Class TypeMaker


  • public class TypeMaker
    extends java.lang.Object
    • Field Detail

      • INTERNALNAME_TO_OBJECTPRIMITIVETYPE

        private static final java.util.HashMap<java.lang.String,​ObjectType> INTERNALNAME_TO_OBJECTPRIMITIVETYPE
      • signatureToType

        private java.util.HashMap<java.lang.String,​Type> signatureToType
      • internalTypeNameFieldNameToType

        private java.util.HashMap<java.lang.String,​Type> internalTypeNameFieldNameToType
      • descriptorToObjectType

        private java.util.HashMap<java.lang.String,​ObjectType> descriptorToObjectType
      • internalTypeNameToObjectType

        private java.util.HashMap<java.lang.String,​ObjectType> internalTypeNameToObjectType
      • internalTypeNameToTypeTypes

        private java.util.HashMap<java.lang.String,​TypeMaker.TypeTypes> internalTypeNameToTypeTypes
      • internalTypeNameMethodNameParameterCountToBoolean

        private java.util.HashMap<java.lang.String,​java.lang.Boolean> internalTypeNameMethodNameParameterCountToBoolean
      • internalTypeNameMethodNameDescriptorToMethodTypes

        private java.util.HashMap<java.lang.String,​TypeMaker.MethodTypes> internalTypeNameMethodNameDescriptorToMethodTypes
      • signatureToMethodTypes

        private java.util.HashMap<java.lang.String,​TypeMaker.MethodTypes> signatureToMethodTypes
      • assignableRawTypes

        private java.util.HashMap<java.lang.Long,​java.lang.Boolean> assignableRawTypes
      • superParameterizedObjectTypes

        private java.util.HashMap<java.lang.Long,​ObjectType> superParameterizedObjectTypes
      • hierarchy

        private java.util.HashMap<java.lang.String,​java.lang.String[]> hierarchy
      • loader

        private Loader loader
    • Constructor Detail

      • TypeMaker

        public TypeMaker​(Loader loader)
    • Method Detail

      • parseClassFileSignature

        public TypeMaker.TypeTypes parseClassFileSignature​(ClassFile classFile)
        Rules: ClassSignature: TypeParameters? SuperclassSignature SuperInterfaceSignature* SuperclassSignature: ClassTypeSignature SuperInterfaceSignature: ClassTypeSignature
      • getExceptionTypeNames

        private static java.lang.String[] getExceptionTypeNames​(Method method)
      • parseFieldSignature

        public Type parseFieldSignature​(ClassFile classFile,
                                        Field field)
      • makeFromSignature

        public Type makeFromSignature​(java.lang.String signature)
      • countDimension

        public static int countDimension​(java.lang.String descriptor)
      • parseMethodSignature

        private TypeMaker.MethodTypes parseMethodSignature​(java.lang.String descriptor,
                                                           java.lang.String signature,
                                                           java.lang.String[] exceptionTypeNames)
      • parseMethodSignature

        private TypeMaker.MethodTypes parseMethodSignature​(java.lang.String signature,
                                                           java.lang.String[] exceptionTypeNames)
        Rules: MethodTypeSignature: TypeParameters? '(' ReferenceTypeSignature* ')' ReturnType ThrowsSignature* ReturnType: TypeSignature | VoidDescriptor ThrowsSignature: '^' ClassTypeSignature | '^' TypeVariableSignature
      • parseTypeParameter

        private TypeParameter parseTypeParameter​(TypeMaker.SignatureReader reader)
        Rules: TypeParameter: Identifier ClassBound InterfaceBound* ClassBound: ':' FieldTypeSignature? InterfaceBound: ':' FieldTypeSignature
      • parseExceptionSignature

        private Type parseExceptionSignature​(TypeMaker.SignatureReader reader)
        Rules: ThrowsSignature: '^' ClassTypeSignature | '^' TypeVariableSignature
      • parseClassTypeSignature

        private ObjectType parseClassTypeSignature​(TypeMaker.SignatureReader reader,
                                                   int dimension)
        Rules: ClassTypeSignature: 'L' PackageSpecifier* SimpleClassTypeSignature ClassTypeSignatureSuffix* ';' SimpleClassTypeSignature: Identifier TypeArguments? ClassTypeSignatureSuffix: '.' SimpleClassTypeSignature
      • parseReferenceTypeSignature

        private Type parseReferenceTypeSignature​(TypeMaker.SignatureReader reader)
        Rules: ReferenceTypeSignature: ClassTypeSignature | ArrayTypeSignature | TypeVariableSignature SimpleClassTypeSignature: Identifier TypeArguments? ArrayTypeSignature: '[' TypeSignature TypeSignature: '[' FieldTypeSignature | '[' BaseType BaseType: 'B' | 'C' | 'D' | 'F' | 'I' | 'J' | 'S' | 'Z' TypeVariableSignature: 'T' Identifier ';'
      • parseTypeArgument

        private TypeArgument parseTypeArgument​(TypeMaker.SignatureReader reader)
        Rules: TypeArgument: WildcardIndicator? FieldTypeSignature | '*' WildcardIndicator: '+' | '-'
      • extractLocalClassName

        private static java.lang.String extractLocalClassName​(java.lang.String name)
      • makeFromDescriptorOrInternalTypeName

        public ObjectType makeFromDescriptorOrInternalTypeName​(java.lang.String descriptorOrInternalTypeName)
      • makeFromDescriptor

        public ObjectType makeFromDescriptor​(java.lang.String descriptor)
      • makeFromDescriptorWithoutBracket

        private ObjectType makeFromDescriptorWithoutBracket​(java.lang.String descriptor)
      • makeFromInternalTypeName

        public ObjectType makeFromInternalTypeName​(java.lang.String internalTypeName)
      • create

        private ObjectType create​(java.lang.String internalTypeName)
      • isAssignable

        public boolean isAssignable​(java.util.Map<java.lang.String,​BaseType> typeBounds,
                                    ObjectType left,
                                    ObjectType right)
      • searchSuperParameterizedType

        private ObjectType searchSuperParameterizedType​(long superHashCode,
                                                        java.lang.String superInternalTypeName,
                                                        ObjectType objectType)
      • isRawTypeAssignable

        private boolean isRawTypeAssignable​(long leftHashCode,
                                            java.lang.String leftInternalName,
                                            java.lang.String rightInternalName)
      • makeTypeTypes

        public TypeMaker.TypeTypes makeTypeTypes​(java.lang.String internalTypeName)
      • makeTypeTypes

        private TypeMaker.TypeTypes makeTypeTypes​(java.lang.String internalTypeName,
                                                  byte[] data)
                                           throws java.lang.Exception
        Throws:
        java.lang.Exception
      • makeFieldType

        public Type makeFieldType​(java.lang.String internalTypeName,
                                  java.lang.String fieldName,
                                  java.lang.String descriptor)
      • loadFieldType

        private Type loadFieldType​(java.lang.String internalTypeName,
                                   java.lang.String fieldName,
                                   java.lang.String descriptor)
      • loadFieldType

        private Type loadFieldType​(ObjectType objectType,
                                   java.lang.String fieldName,
                                   java.lang.String descriptor)
      • makeMethodTypes

        public TypeMaker.MethodTypes makeMethodTypes​(java.lang.String internalTypeName,
                                                     java.lang.String methodName,
                                                     java.lang.String descriptor)
      • loadMethodTypes

        private TypeMaker.MethodTypes loadMethodTypes​(java.lang.String internalTypeName,
                                                      java.lang.String methodName,
                                                      java.lang.String descriptor)
      • loadType

        private ObjectType loadType​(java.lang.String internalTypeName)
      • loadType

        private ObjectType loadType​(java.lang.String internalTypeName,
                                    byte[] data)
                             throws java.lang.Exception
        Throws:
        java.lang.Exception
      • loadFieldsAndMethods

        private boolean loadFieldsAndMethods​(java.lang.String internalTypeName)
      • loadFieldsAndMethods

        private void loadFieldsAndMethods​(java.lang.String internalTypeName,
                                          byte[] data)
                                   throws java.lang.Exception
        Throws:
        java.lang.Exception
      • loadClassFile

        private java.lang.Object[] loadClassFile​(java.lang.String internalTypeName,
                                                 ClassFileReader reader)
                                          throws java.lang.Exception
        Throws:
        java.lang.Exception
      • skipMembers

        private static void skipMembers​(ClassFileReader reader)
      • loadConstants

        private java.lang.Object[] loadConstants​(ClassFileReader reader)
                                          throws java.lang.Exception
        Throws:
        java.lang.Exception
      • skipAttributes

        private static void skipAttributes​(ClassFileReader reader)
      • multipleMethods

        public boolean multipleMethods​(java.lang.String internalTypeName,
                                       java.lang.String name,
                                       int parameterCount)
      • multipleMethods

        private java.lang.Boolean multipleMethods​(java.lang.String internalTypeName,
                                                  java.lang.String suffixKey)