blob: 5c9dad24316f2b1815c293c59352271b80053d88 [file] [log] [blame]
// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
import com.android.tools.r8.dex.IndexedItemCollection;
import com.android.tools.r8.dex.MixedSectionCollection;
public class DexMemberAnnotation<R extends DexMember<?, R>, S extends DexItem> extends DexItem {
public final R item;
public final S annotations;
public DexMemberAnnotation(R item, S annotations) {
this.item = item;
this.annotations = annotations;
}
@Override
void collectMixedSectionItems(MixedSectionCollection mixedItems) {
annotations.collectMixedSectionItems(mixedItems);
}
@Override
public int hashCode() {
return item.hashCode() * 7 + annotations.hashCode();
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other instanceof DexMemberAnnotation) {
DexMemberAnnotation<?,?> otherMember = (DexMemberAnnotation<?,?>) other;
return item.equals(otherMember.item) && annotations.equals(otherMember.annotations);
}
return false;
}
public static class DexFieldAnnotation extends DexMemberAnnotation<DexField, DexAnnotationSet> {
public DexFieldAnnotation(DexField item, DexAnnotationSet annotations) {
super(item, annotations);
}
public void collectIndexedItems(IndexedItemCollection indexedItems) {
item.collectIndexedItems(indexedItems);
annotations.collectIndexedItems(indexedItems);
}
}
public static class DexMethodAnnotation extends DexMemberAnnotation<DexMethod, DexAnnotationSet> {
public DexMethodAnnotation(DexMethod item, DexAnnotationSet annotations) {
super(item, annotations);
}
public void collectIndexedItems(IndexedItemCollection indexedItems) {
item.collectIndexedItems(indexedItems);
annotations.collectIndexedItems(indexedItems);
}
}
public static class DexParameterAnnotation extends
DexMemberAnnotation<DexMethod, ParameterAnnotationsList> {
public DexParameterAnnotation(DexMethod item, ParameterAnnotationsList annotations) {
super(item, annotations);
}
public void collectIndexedItems(IndexedItemCollection indexedItems) {
item.collectIndexedItems(indexedItems);
annotations.collectIndexedItems(indexedItems);
}
}
}