blob: e2561b00ccf8f6ef1f35ed272691d185611f017d [file] [log] [blame]
// Copyright (c) 2018, 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.utils.codeinspector;
import com.android.tools.r8.graph.DexAnnotationElement;
import com.android.tools.r8.graph.DexValue;
import com.android.tools.r8.graph.DexValue.DexValueArray;
import com.android.tools.r8.naming.MemberNaming.Signature;
public abstract class MemberSubject extends Subject {
public abstract boolean isPublic();
public abstract boolean isProtected();
public abstract boolean isPrivate();
public abstract boolean isPackagePrivate();
public abstract boolean isStatic();
public abstract boolean isFinal();
public abstract Signature getOriginalSignature();
public abstract Signature getFinalSignature();
public String getOriginalName() {
return getOriginalName(true);
}
public String getOriginalName(boolean qualified) {
Signature originalSignature = getOriginalSignature();
if (originalSignature != null) {
String name = originalSignature.name;
if (!qualified) {
int index = name.lastIndexOf(".");
if (index >= 0) {
return name.substring(index + 1);
}
}
return name;
}
return null;
}
public String getFinalName() {
Signature finalSignature = getFinalSignature();
return finalSignature == null ? null : finalSignature.name;
}
public abstract AnnotationSubject annotation(String name);
public AnnotationSubject getSignatureAnnotation() {
return annotation("dalvik.annotation.Signature");
}
public String getSignatureAnnotationValue() {
AnnotationSubject annotation = getSignatureAnnotation();
if (!annotation.isPresent()) {
return null;
}
assert annotation.getAnnotation().elements.length == 1;
DexAnnotationElement element = annotation.getAnnotation().elements[0];
assert element.name.toString().equals("value");
assert element.value.isDexValueArray();
DexValueArray array = element.value.asDexValueArray();
StringBuilder builder = new StringBuilder();
for (DexValue value : array.getValues()) {
if (value.isDexValueString()) {
builder.append(value.asDexValueString().value);
} else {
builder.append(value.toString());
}
}
return builder.toString();
}
public FieldSubject asFieldSubject() {
return null;
}
public boolean isFieldSubject() {
return false;
}
public MethodSubject asMethodSubject() {
return null;
}
public boolean isMethodSubject() {
return false;
}
}