blob: 3125afe2f019a915ef6e5c140e0233c6790ac06a [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.errors.Unreachable;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.naming.ClassNamingForNameMapper;
import com.android.tools.r8.references.ClassReference;
import java.util.List;
import java.util.function.Consumer;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public class AbsentClassSubject extends ClassSubject {
public AbsentClassSubject(CodeInspector codeInspector, ClassReference reference) {
super(codeInspector, reference);
}
@Override
public boolean isPresent() {
return false;
}
@Override
public void forAllMethods(Consumer<FoundMethodSubject> inspection) {}
@Override
public void forAllVirtualMethods(Consumer<FoundMethodSubject> inspection) {}
@Override
public MethodSubject method(String returnType, String name, List<String> parameters) {
return new AbsentMethodSubject();
}
@Override
public MethodSubject uniqueMethodWithName(String name) {
return new AbsentMethodSubject();
}
@Override
public void forAllFields(Consumer<FoundFieldSubject> inspection) {}
@Override
public void forAllInstanceFields(Consumer<FoundFieldSubject> inspection) {}
@Override
public void forAllStaticFields(Consumer<FoundFieldSubject> inspection) {}
@Override
public FieldSubject field(String type, String name) {
return new AbsentFieldSubject();
}
@Override
public FieldSubject uniqueFieldWithName(String name) {
return new AbsentFieldSubject();
}
@Override
public FieldSubject uniqueFieldWithFinalName(String name) {
return new AbsentFieldSubject();
}
@Override
public boolean isAbstract() {
throw new Unreachable("Cannot determine if an absent class is abstract");
}
@Override
public boolean isAnnotation() {
throw new Unreachable("Cannot determine if an absent class is an annotation");
}
@Override
public boolean isPublic() {
throw new Unreachable("Cannot determine if an absent class is public");
}
@Override
public DexProgramClass getDexProgramClass() {
return null;
}
@Override
public AnnotationSubject annotation(String name) {
return new AbsentAnnotationSubject();
}
@Override
public String getOriginalName() {
return null;
}
@Override
public String getOriginalDescriptor() {
return null;
}
@Override
public String getOriginalBinaryName() {
return null;
}
@Override
public String getFinalName() {
return null;
}
@Override
public String getFinalDescriptor() {
return null;
}
@Override
public String getFinalBinaryName() {
return null;
}
@Override
public boolean isRenamed() {
throw new Unreachable("Cannot determine if an absent class has been renamed");
}
@Override
public boolean isMemberClass() {
throw new Unreachable("Cannot determine if an absent class is a member class");
}
@Override
public boolean isLocalClass() {
throw new Unreachable("Cannot determine if an absent class is a local class");
}
@Override
public boolean isAnonymousClass() {
throw new Unreachable("Cannot determine if an absent class is an anonymous class");
}
@Override
public boolean isSynthetic() {
throw new Unreachable("Cannot determine if an absent class is synthetic");
}
@Override
public boolean isSynthesizedJavaLambdaClass() {
throw new Unreachable("Cannot determine if an absent class is a synthesized lambda class");
}
@Override
public DexMethod getFinalEnclosingMethod() {
throw new Unreachable("Cannot determine EnclosingMethod attribute of an absent class");
}
@Override
public String getOriginalSignatureAttribute() {
return null;
}
@Override
public String getFinalSignatureAttribute() {
return null;
}
@Override
public KmClassSubject getKmClass() {
return null;
}
@Override
public KmPackageSubject getKmPackage() {
return null;
}
@Override
public KotlinClassMetadata getKotlinClassMetadata() {
return null;
}
@Override
public ClassNamingForNameMapper getNaming() {
return null;
}
@Override
public void disassembleUsingJavap(boolean verbose) throws Exception {
throw new Unreachable("Cannot disassembly an absent class");
}
}