net.sf.retrotranslator.runtime.impl
Class ClassDescriptor
java.lang.Object
net.sf.retrotranslator.runtime.impl.EmptyVisitor
net.sf.retrotranslator.runtime.impl.AnnotatedElementDescriptor
net.sf.retrotranslator.runtime.impl.GenericDeclarationDescriptor
net.sf.retrotranslator.runtime.impl.ClassDescriptor
- All Implemented Interfaces:
- AnnotationVisitor, ClassVisitor, FieldVisitor, MethodVisitor, SignatureVisitor
public class ClassDescriptor
- extends GenericDeclarationDescriptor
- Author:
- Taras Puchko
Constructor Summary |
ClassDescriptor(java.lang.Class target,
byte[] bytecode)
|
Method Summary |
protected Annotation_[] |
createAnnotations(Annotation_[] declaredAnnotations)
|
protected java.lang.reflect.TypeVariable |
findTypeVariable(java.lang.String name)
|
ClassDescriptor |
getClassDescriptor()
|
MethodDescriptor |
getEnclosingMethodDescriptor()
|
FieldDescriptor |
getFieldDescriptor(java.lang.String name)
|
java.util.Collection<FieldDescriptor> |
getFieldDescriptors()
|
java.lang.reflect.Type[] |
getGenericInterfaces()
|
java.lang.reflect.Type |
getGenericSuperclass()
|
static ClassDescriptor |
getInstance(java.lang.Class target)
|
private static java.util.Map<java.lang.Class,ClassDescriptor> |
getMap()
|
MethodDescriptor |
getMethodDescriptor(java.lang.String key)
|
java.util.Collection<MethodDescriptor> |
getMethodDescriptors()
|
java.lang.String |
getName()
|
java.lang.Class |
getTarget()
|
boolean |
isLocalOrAnonymous()
|
static void |
setBytecodeTransformer(BytecodeTransformer transformer)
|
void |
visit(int version,
int access,
java.lang.String name,
java.lang.String signature,
java.lang.String superName,
java.lang.String[] interfaces)
Visits the header of the class. |
FieldVisitor |
visitField(int access,
java.lang.String name,
java.lang.String desc,
java.lang.String signature,
java.lang.Object value)
Visits a field of the class. |
void |
visitInnerClass(java.lang.String name,
java.lang.String outerName,
java.lang.String innerName,
int access)
Visits information about an inner class. |
SignatureVisitor |
visitInterface()
Visits the type of an interface implemented by the class. |
MethodVisitor |
visitMethod(int access,
java.lang.String name,
java.lang.String desc,
java.lang.String signature,
java.lang.String[] exceptions)
Visits a method of the class. |
void |
visitOuterClass(java.lang.String owner,
java.lang.String name,
java.lang.String desc)
Visits the enclosing class of the class. |
SignatureVisitor |
visitSuperclass()
Visits the type of the super class. |
Methods inherited from class net.sf.retrotranslator.runtime.impl.AnnotatedElementDescriptor |
createAnnotations, createType, createTypes, getAnnotation, getAnnotations, getClassByInternalName, getClassByType, getDeclaredAnnotations, getLazyList, getLazyType, isAccess, isAnnotationPresent, resolveValue, visitAnnotation |
Methods inherited from class net.sf.retrotranslator.runtime.impl.EmptyVisitor |
visit, visitAnnotation, visitAnnotationDefault, visitArray, visitArrayType, visitAttribute, visitBaseType, visitClassType, visitCode, visitEnd, visitEnum, visitExceptionType, visitFieldInsn, visitIincInsn, visitInnerClassType, visitInsn, visitIntInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMultiANewArrayInsn, visitParameterAnnotation, visitParameterType, visitReturnType, visitSource, visitTableSwitchInsn, visitTryCatchBlock, visitTypeArgument, visitTypeArgument, visitTypeInsn, visitTypeVariable, visitVarInsn |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
cache
private static java.lang.ref.SoftReference<java.util.Map<java.lang.Class,ClassDescriptor>> cache
bytecodeTransformer
private static BytecodeTransformer bytecodeTransformer
name
private java.lang.String name
target
private java.lang.Class target
enclosingClass
private java.lang.String enclosingClass
enclosingMethod
private java.lang.String enclosingMethod
genericInterfaces
private LazyList<TypeDescriptor,java.lang.reflect.Type> genericInterfaces
genericSuperclass
private LazyValue<TypeDescriptor,java.lang.reflect.Type> genericSuperclass
fieldDescriptors
private java.util.Map<java.lang.String,FieldDescriptor> fieldDescriptors
methodDescriptors
private java.util.Map<java.lang.String,MethodDescriptor> methodDescriptors
ClassDescriptor
public ClassDescriptor(java.lang.Class target,
byte[] bytecode)
setBytecodeTransformer
public static void setBytecodeTransformer(BytecodeTransformer transformer)
getInstance
public static ClassDescriptor getInstance(java.lang.Class target)
getMap
private static java.util.Map<java.lang.Class,ClassDescriptor> getMap()
createAnnotations
protected Annotation_[] createAnnotations(Annotation_[] declaredAnnotations)
- Specified by:
createAnnotations
in class AnnotatedElementDescriptor
getName
public java.lang.String getName()
getClassDescriptor
public ClassDescriptor getClassDescriptor()
- Specified by:
getClassDescriptor
in class AnnotatedElementDescriptor
getEnclosingMethodDescriptor
public MethodDescriptor getEnclosingMethodDescriptor()
isLocalOrAnonymous
public boolean isLocalOrAnonymous()
getFieldDescriptor
public FieldDescriptor getFieldDescriptor(java.lang.String name)
getGenericInterfaces
public java.lang.reflect.Type[] getGenericInterfaces()
getGenericSuperclass
public java.lang.reflect.Type getGenericSuperclass()
getMethodDescriptor
public MethodDescriptor getMethodDescriptor(java.lang.String key)
getMethodDescriptors
public java.util.Collection<MethodDescriptor> getMethodDescriptors()
getFieldDescriptors
public java.util.Collection<FieldDescriptor> getFieldDescriptors()
getTarget
public java.lang.Class getTarget()
- Specified by:
getTarget
in class GenericDeclarationDescriptor
findTypeVariable
protected java.lang.reflect.TypeVariable findTypeVariable(java.lang.String name)
- Specified by:
findTypeVariable
in class AnnotatedElementDescriptor
visit
public void visit(int version,
int access,
java.lang.String name,
java.lang.String signature,
java.lang.String superName,
java.lang.String[] interfaces)
- Description copied from interface:
ClassVisitor
- Visits the header of the class.
- Specified by:
visit
in interface ClassVisitor
- Overrides:
visit
in class EmptyVisitor
- Parameters:
version
- the class version.access
- the class's access flags (see Opcodes
). This
parameter also indicates if the class is deprecated.name
- the internal name of the class (see
getInternalName
).signature
- the signature of this class. May be null if
the class is not a generic one, and does not extend or implement
generic classes or interfaces.superName
- the internal of name of the super class (see
getInternalName
). For interfaces,
the super class is Object
. May be null, but
only for the Object
class.interfaces
- the internal names of the class's interfaces (see
getInternalName
). May be
null.
visitOuterClass
public void visitOuterClass(java.lang.String owner,
java.lang.String name,
java.lang.String desc)
- Description copied from interface:
ClassVisitor
- Visits the enclosing class of the class. This method must be called only
if the class has an enclosing class.
- Specified by:
visitOuterClass
in interface ClassVisitor
- Overrides:
visitOuterClass
in class EmptyVisitor
- Parameters:
owner
- internal name of the enclosing class of the class.name
- the name of the method that contains the class, or
null if the class is not enclosed in a method of its
enclosing class.desc
- the descriptor of the method that contains the class, or
null if the class is not enclosed in a method of its
enclosing class.
visitInnerClass
public void visitInnerClass(java.lang.String name,
java.lang.String outerName,
java.lang.String innerName,
int access)
- Description copied from interface:
ClassVisitor
- Visits information about an inner class. This inner class is not
necessarily a member of the class being visited.
- Specified by:
visitInnerClass
in interface ClassVisitor
- Overrides:
visitInnerClass
in class EmptyVisitor
- Parameters:
name
- the internal name of an inner class (see
getInternalName
).outerName
- the internal name of the class to which the inner class
belongs (see getInternalName
). May
be null.innerName
- the (simple) name of the inner class inside its
enclosing class. May be null for anonymous inner
classes.access
- the access flags of the inner class as originally declared
in the enclosing class.
visitField
public FieldVisitor visitField(int access,
java.lang.String name,
java.lang.String desc,
java.lang.String signature,
java.lang.Object value)
- Description copied from interface:
ClassVisitor
- Visits a field of the class.
- Specified by:
visitField
in interface ClassVisitor
- Overrides:
visitField
in class EmptyVisitor
- Parameters:
access
- the field's access flags (see Opcodes
). This
parameter also indicates if the field is synthetic and/or
deprecated.name
- the field's name.desc
- the field's descriptor (see Type
).signature
- the field's signature. May be null if the
field's type does not use generic types.value
- the field's initial value. This parameter, which may be
null if the field does not have an initial value, must
be an Integer
, a Float
, a Long
, a
Double
or a String
(for int,
float, long or String fields
respectively). This parameter is only used for static fields.
Its value is ignored for non static fields, which must be
initialized through bytecode instructions in constructors or
methods.
- Returns:
- a visitor to visit field annotations and attributes, or
null if this class visitor is not interested in
visiting these annotations and attributes.
visitMethod
public MethodVisitor visitMethod(int access,
java.lang.String name,
java.lang.String desc,
java.lang.String signature,
java.lang.String[] exceptions)
- Description copied from interface:
ClassVisitor
- Visits a method of the class. This method must return a new
MethodVisitor
instance (or null) each time it is
called, i.e., it should not return a previously returned visitor.
- Specified by:
visitMethod
in interface ClassVisitor
- Overrides:
visitMethod
in class EmptyVisitor
- Parameters:
access
- the method's access flags (see Opcodes
). This
parameter also indicates if the method is synthetic and/or
deprecated.name
- the method's name.desc
- the method's descriptor (see Type
).signature
- the method's signature. May be null if the
method parameters, return type and exceptions do not use generic
types.exceptions
- the internal names of the method's exception classes
(see getInternalName
). May be
null.
- Returns:
- an object to visit the byte code of the method, or null
if this class visitor is not interested in visiting the code of
this method.
visitSuperclass
public SignatureVisitor visitSuperclass()
- Description copied from interface:
SignatureVisitor
- Visits the type of the super class.
- Specified by:
visitSuperclass
in interface SignatureVisitor
- Overrides:
visitSuperclass
in class EmptyVisitor
- Returns:
- a non null visitor to visit the signature of the super class
type.
visitInterface
public SignatureVisitor visitInterface()
- Description copied from interface:
SignatureVisitor
- Visits the type of an interface implemented by the class.
- Specified by:
visitInterface
in interface SignatureVisitor
- Overrides:
visitInterface
in class EmptyVisitor
- Returns:
- a non null visitor to visit the signature of the interface type.