Package org.benf.cfr.reader.entities
Class ClassFile
- java.lang.Object
-
- org.benf.cfr.reader.entities.ClassFile
-
- All Implemented Interfaces:
Dumpable
,TypeUsageCollectable
public class ClassFile extends java.lang.Object implements Dumpable, TypeUsageCollectable
-
-
Field Summary
-
Constructor Summary
Constructors Constructor Description ClassFile(ByteData data, java.lang.String usePath, DCCommonState dcCommonState)
-
Method Summary
-
-
-
Field Detail
-
OFFSET_OF_MAGIC
private static final long OFFSET_OF_MAGIC
- See Also:
- Constant Field Values
-
OFFSET_OF_MINOR
private static final long OFFSET_OF_MINOR
- See Also:
- Constant Field Values
-
OFFSET_OF_MAJOR
private static final long OFFSET_OF_MAJOR
- See Also:
- Constant Field Values
-
OFFSET_OF_CONSTANT_POOL_COUNT
private static final long OFFSET_OF_CONSTANT_POOL_COUNT
- See Also:
- Constant Field Values
-
OFFSET_OF_CONSTANT_POOL
private static final long OFFSET_OF_CONSTANT_POOL
- See Also:
- Constant Field Values
-
constantPool
private final ConstantPool constantPool
-
accessFlags
private final java.util.Set<AccessFlag> accessFlags
-
fields
private final java.util.List<ClassFileField> fields
-
fieldsByName
private java.util.Map<java.lang.String,java.util.Map<JavaTypeInstance,ClassFileField>> fieldsByName
-
methods
private final java.util.List<Method> methods
-
fakeMethods
private FakeMethods fakeMethods
-
methodsByName
private java.util.Map<java.lang.String,java.util.List<Method>> methodsByName
-
isInnerClass
private final boolean isInnerClass
-
innerClassesByTypeInfo
private final java.util.Map<JavaTypeInstance,Pair<InnerClassAttributeInfo,ClassFile>> innerClassesByTypeInfo
-
attributes
private final AttributeMap attributes
-
thisClass
private final ConstantPoolEntryClass thisClass
-
rawSuperClass
private final ConstantPoolEntryClass rawSuperClass
-
rawInterfaces
private final java.util.List<ConstantPoolEntryClass> rawInterfaces
-
classSignature
private final ClassSignature classSignature
-
classFileVersion
private ClassFileVersion classFileVersion
-
decompilerComments
private DecompilerComments decompilerComments
-
begunAnalysis
private boolean begunAnalysis
-
hiddenInnerClass
private boolean hiddenInnerClass
-
boundSuperClasses
private BindingSuperContainer boundSuperClasses
-
dumpHelper
private ClassFileDumper dumpHelper
-
usePath
private final java.lang.String usePath
-
anonymousUsages
private java.util.List<ConstructorInvokationAnonymousInner> anonymousUsages
-
methodUsages
private java.util.List<ConstructorInvokationSimple> methodUsages
-
-
Constructor Detail
-
ClassFile
public ClassFile(ByteData data, java.lang.String usePath, DCCommonState dcCommonState)
-
-
Method Detail
-
fixConfusingEnumConstructors
private void fixConfusingEnumConstructors()
-
elideScala
private void elideScala()
-
checkInnerClassAssumption
private void checkInnerClassAssumption(AttributeInnerClasses attributeInnerClasses, JavaRefTypeInstance typeInstance, DCCommonState state)
-
getUsePath
public java.lang.String getUsePath()
-
isInterface
public boolean isInterface()
-
addComment
public void addComment(DecompilerComment comment)
-
addComment
public void addComment(java.lang.String comment)
-
addComment
private void addComment(java.lang.String comment, java.lang.Exception e)
-
getNullableDecompilerComments
public DecompilerComments getNullableDecompilerComments()
-
ensureDecompilerComments
public DecompilerComments ensureDecompilerComments()
-
addFakeMethod
public FakeMethod addFakeMethod(java.lang.Object key, java.lang.String nameHint, UnaryFunction<java.lang.String,FakeMethod> methodFactory)
-
getAllClassTypes
public java.util.List<JavaTypeInstance> getAllClassTypes()
-
collectTypeUsages
public void collectTypeUsages(TypeUsageCollector collector)
- Specified by:
collectTypeUsages
in interfaceTypeUsageCollectable
-
getAllClassTypes
private void getAllClassTypes(java.util.List<JavaTypeInstance> tgt)
-
setDumpHelper
public void setDumpHelper(ClassFileDumper dumpHelper)
-
markHiddenInnerClass
public void markHiddenInnerClass()
-
getClassFileVersion
public ClassFileVersion getClassFileVersion()
-
isInnerClass
public boolean isInnerClass()
-
getConstantPool
public ConstantPool getConstantPool()
-
testAccessFlag
public boolean testAccessFlag(AccessFlag accessFlag)
-
hasFormalTypeParameters
public boolean hasFormalTypeParameters()
-
ensureFieldsByName
private void ensureFieldsByName()
-
hasLocalField
public boolean hasLocalField(java.lang.String name)
-
hasAccessibleField
public boolean hasAccessibleField(java.lang.String name, JavaRefTypeInstance maybeCaller)
-
getFieldByName
public ClassFileField getFieldByName(java.lang.String name, JavaTypeInstance type) throws java.lang.NoSuchFieldException
- Throws:
java.lang.NoSuchFieldException
-
calculateFieldsByName
private void calculateFieldsByName()
-
getFields
public java.util.List<ClassFileField> getFields()
-
getMethods
public java.util.List<Method> getMethods()
-
getMethodsWithMatchingName
private java.util.List<Method> getMethodsWithMatchingName(MethodPrototype prototype)
-
collectMethods
private void collectMethods(MethodPrototype prototype, java.util.List<Method> tgt, java.util.Set<JavaTypeInstance> seen)
-
collectTypeMethods
private void collectTypeMethods(MethodPrototype prototype, java.util.List<Method> tgt, java.util.Set<JavaTypeInstance> seen, JavaTypeInstance clazz)
-
getOverloadMethodSet
public OverloadMethodSet getOverloadMethodSet(MethodPrototype prototype)
-
getOverloadMethodSetInner
private OverloadMethodSet getOverloadMethodSetInner(MethodPrototype prototype)
-
getMethodByPrototype
public Method getMethodByPrototype(MethodPrototype prototype) throws java.lang.NoSuchMethodException
- Throws:
java.lang.NoSuchMethodException
-
getMethodByPrototypeOrNull
public Method getMethodByPrototypeOrNull(MethodPrototype prototype)
-
getAccessibleMethodByPrototype
private Method getAccessibleMethodByPrototype(MethodPrototype prototype, GenericTypeBinder binder, JavaRefTypeInstance accessor) throws java.lang.NoSuchMethodException
- Throws:
java.lang.NoSuchMethodException
-
getSingleMethodByNameOrNull
public Method getSingleMethodByNameOrNull(java.lang.String name)
-
getMethodsByNameOrNull
public java.util.List<Method> getMethodsByNameOrNull(java.lang.String name)
-
getMethodByName
public java.util.List<Method> getMethodByName(java.lang.String name) throws java.lang.NoSuchMethodException
- Throws:
java.lang.NoSuchMethodException
-
getConstructors
public java.util.List<Method> getConstructors()
-
getBootstrapMethods
public AttributeBootstrapMethods getBootstrapMethods()
-
getThisClassConstpoolEntry
public ConstantPoolEntryClass getThisClassConstpoolEntry()
-
isInferredAnonymousStatic
private boolean isInferredAnonymousStatic(DCCommonState state, JavaTypeInstance thisType, JavaTypeInstance innerType)
-
testIsInnerClass
private boolean testIsInnerClass(DCCommonState dcCommonState)
-
loadInnerClasses
public void loadInnerClasses(DCCommonState dcCommonState)
-
getInnerClassAttributeInfos
private java.util.List<InnerClassAttributeInfo> getInnerClassAttributeInfos(DCCommonState state)
-
analyseInnerClassesPass1
private void analyseInnerClassesPass1(DCCommonState state)
-
analysePassOuterFirst
private void analysePassOuterFirst(UnaryProcedure<ClassFile> fn)
-
analyseTop
public void analyseTop(DCCommonState dcCommonState, TypeUsageCollectingDumper typeUsageCollectingDumper)
-
analyseOverrides
private void analyseOverrides()
-
analyseMid
private void analyseMid(DCCommonState state)
-
releaseCode
public void releaseCode()
-
getClassType
public JavaTypeInstance getClassType()
-
getRefClassType
public JavaRefTypeInstance getRefClassType()
-
getBaseClassType
public JavaTypeInstance getBaseClassType()
-
getClassSignature
public ClassSignature getClassSignature()
-
getAccessFlags
public java.util.Set<AccessFlag> getAccessFlags()
-
sanitiseAccessPermissions
private void sanitiseAccessPermissions()
-
getSignature
private ClassSignature getSignature(ConstantPool cp, ConstantPoolEntryClass rawSuperClass, java.util.List<ConstantPoolEntryClass> rawInterfaces)
-
dumpNamedInnerClasses
public void dumpNamedInnerClasses(Dumper d)
-
getFilePath
public java.lang.String getFilePath()
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
getFormalParametersText
private static void getFormalParametersText(ClassSignature signature, TypeAnnotationHelper ah, UnaryFunction<java.lang.Integer,Predicate<AnnotationTableTypeEntry>> typeAnnPredicateFact, UnaryFunction<java.lang.Integer,Predicate<AnnotationTableTypeEntry>> typeBoundAnnPredicateFact, Dumper d)
-
dumpReceiverClassIdentity
public void dumpReceiverClassIdentity(java.util.List<AnnotationTableTypeEntry> recieverAnnotations, Dumper d)
-
dumpClassIdentity
public void dumpClassIdentity(Dumper d)
-
getBindingSupers
public BindingSuperContainer getBindingSupers()
-
generateBoundSuperClasses
private BindingSuperContainer generateBoundSuperClasses()
-
getBoundSuperClasses
private void getBoundSuperClasses(JavaTypeInstance boundGeneric, BoundSuperCollector boundSuperCollector, BindingSuperContainer.Route route, java.util.Set<JavaTypeInstance> seen)
-
getGenericTypeBinder
public GenericTypeBinder getGenericTypeBinder(JavaGenericRefTypeInstance boundGeneric)
-
getBoundSuperClasses2
private void getBoundSuperClasses2(JavaTypeInstance base, GenericTypeBinder genericTypeBinder, BoundSuperCollector boundSuperCollector, BindingSuperContainer.Route route, java.util.Set<JavaTypeInstance> seen)
-
noteAnonymousUse
public void noteAnonymousUse(ConstructorInvokationAnonymousInner anoynmousInner)
-
noteMethodUse
public void noteMethodUse(ConstructorInvokationSimple constructorCall)
-
getAnonymousUsages
public java.util.List<ConstructorInvokationAnonymousInner> getAnonymousUsages()
-
getMethodUsages
public java.util.List<ConstructorInvokationSimple> getMethodUsages()
-
getAnonymousTypeBase
public static JavaTypeInstance getAnonymousTypeBase(ClassFile classFile)
-
getAttributes
public AttributeMap getAttributes()
-
getMethodFakes
public java.util.List<FakeMethod> getMethodFakes()
-
-