Class TypeBuilder<T>

  • All Implemented Interfaces:
    java.lang.reflect.AnnotatedElement, java.lang.reflect.Type

    public final class TypeBuilder<T>
    extends Type<T>
    • Field Detail

      • DumpGeneratedClassesProperty

        private static final java.lang.String DumpGeneratedClassesProperty
        See Also:
        Constant Field Values
      • GeneratedClassOutputPathProperty

        private static final java.lang.String GeneratedClassOutputPathProperty
        See Also:
        Constant Field Values
      • VerifyGeneratedClassesProperty

        private static final java.lang.String VerifyGeneratedClassesProperty
        See Also:
        Constant Field Values
      • methodBuilders

        final java.util.ArrayList<MethodBuilder> methodBuilders
      • fieldBuilders

        final java.util.ArrayList<FieldBuilder> fieldBuilders
      • _name

        private java.lang.String _name
      • _fullName

        private java.lang.String _fullName
      • _internalName

        private java.lang.String _internalName
      • _package

        private java.lang.Package _package
      • _baseType

        private Type<?> _baseType
      • _interfaces

        private TypeList _interfaces
      • _declaringType

        private TypeBuilder<?> _declaringType
      • _modifiers

        private int _modifiers
      • _hasBeenCreated

        private boolean _hasBeenCreated
      • _generatedClass

        private java.lang.Class<T> _generatedClass
      • _generatedType

        private Type<T> _generatedType
      • _extendsBound

        private Type<?> _extendsBound
      • _genericParameterPosition

        private int _genericParameterPosition
      • _isGenericParameter

        private boolean _isGenericParameter
      • _isGenericTypeDefinition

        private boolean _isGenericTypeDefinition
      • _annotationMap

        private java.util.Map<java.lang.Class<? extends java.lang.annotation.Annotation>,​AnnotationBuilder<? extends java.lang.annotation.Annotation>> _annotationMap
      • _protectionDomain

        private final java.security.ProtectionDomain _protectionDomain
      • _declarationSite

        private final java.lang.Class<T> _declarationSite
      • _packageAccess

        private java.lang.invoke.MethodHandles.Lookup _packageAccess
      • RawMethodMatcher

        private static final MemberFilter RawMethodMatcher
      • _defineClass

        private static java.lang.invoke.MethodHandle _defineClass
    • Constructor Detail

      • TypeBuilder

        public TypeBuilder​(java.lang.String name,
                           int modifiers)
      • TypeBuilder

        public TypeBuilder​(java.lang.String name,
                           int modifiers,
                           java.lang.invoke.MethodHandles.Lookup packageAccess)
      • TypeBuilder

        public TypeBuilder​(java.lang.String name,
                           int modifiers,
                           Type<?> baseType,
                           TypeList interfaces)
      • TypeBuilder

        public TypeBuilder​(java.lang.String name,
                           int modifiers,
                           Type<?> baseType,
                           TypeList interfaces,
                           java.lang.invoke.MethodHandles.Lookup packageAccess)
      • TypeBuilder

        TypeBuilder()
      • TypeBuilder

        TypeBuilder​(java.lang.String name,
                    int genericParameterPosition,
                    TypeBuilder<?> declaringType)
      • TypeBuilder

        TypeBuilder​(java.lang.String name,
                    int genericParameterPosition,
                    MethodBuilder declaringMethod)
      • TypeBuilder

        TypeBuilder​(java.lang.String name,
                    int modifiers,
                    Type<?> baseType,
                    TypeBuilder<?> declaringType)
      • TypeBuilder

        TypeBuilder​(java.lang.String name,
                    int modifiers,
                    Type<? super T> baseType,
                    TypeList interfaces,
                    TypeBuilder<?> declaringType)
      • TypeBuilder

        TypeBuilder​(java.lang.String name,
                    int modifiers,
                    Type<? super T> baseType,
                    TypeList interfaces,
                    TypeBuilder<?> declaringType,
                    java.lang.invoke.MethodHandles.Lookup packageAccess)
    • Method Detail

      • defaultPackageAccess

        public static java.lang.invoke.MethodHandles.Lookup defaultPackageAccess()
      • initializeAsGenericParameter

        private void initializeAsGenericParameter​(java.lang.String name,
                                                  int position)
      • initialize

        private void initialize​(java.lang.String typeName,
                                int modifiers,
                                Type<?> baseType,
                                TypeList interfaces,
                                TypeBuilder<?> declaringType,
                                java.lang.invoke.MethodHandles.Lookup packageAccess)
      • resolvePackageAccess

        private java.lang.invoke.MethodHandles.Lookup resolvePackageAccess​(java.lang.invoke.MethodHandles.Lookup explicitValue)
      • tryResolvePackageAccessForClass

        public static java.lang.invoke.MethodHandles.Lookup tryResolvePackageAccessForClass​(Type<?> type)
      • extractPackageAccess

        private static java.lang.invoke.MethodHandles.Lookup extractPackageAccess​(MemberInfo m)
      • setInterfaces

        public void setInterfaces​(TypeList interfaces)
      • setBaseType

        public void setBaseType​(Type<?> baseType)
      • updateExtendsBound

        private void updateExtendsBound()
      • verifyNotCreated

        void verifyNotCreated()
      • verifyCreated

        void verifyCreated()
      • verifyNotGeneric

        void verifyNotGeneric()
      • getPackage

        public java.lang.Package getPackage()
        Overrides:
        getPackage in class Type<T>
      • getClassSimpleName

        protected java.lang.String getClassSimpleName()
        Overrides:
        getClassSimpleName in class Type<T>
      • getClassFullName

        protected java.lang.String getClassFullName()
        Overrides:
        getClassFullName in class Type<T>
      • getShortName

        public java.lang.String getShortName()
        Overrides:
        getShortName in class Type<T>
      • getName

        public java.lang.String getName()
        Overrides:
        getName in class Type<T>
      • getFullName

        public java.lang.String getFullName()
        Overrides:
        getFullName in class Type<T>
      • getInternalName

        public java.lang.String getInternalName()
        Overrides:
        getInternalName in class Type<T>
      • appendErasedDescription

        public java.lang.StringBuilder appendErasedDescription​(java.lang.StringBuilder sb)
        Overrides:
        appendErasedDescription in class Type<T>
      • appendErasedSignature

        public java.lang.StringBuilder appendErasedSignature​(java.lang.StringBuilder sb)
        Overrides:
        appendErasedSignature in class Type<T>
      • appendSignature

        public java.lang.StringBuilder appendSignature​(java.lang.StringBuilder sb)
        Overrides:
        appendSignature in class Type<T>
      • isInstance

        public boolean isInstance​(java.lang.Object o)
        Overrides:
        isInstance in class Type<T>
      • isGenericType

        public boolean isGenericType()
        Overrides:
        isGenericType in class Type<T>
      • getErasedClass

        public java.lang.Class<T> getErasedClass()
        Overrides:
        getErasedClass in class Type<T>
      • accept

        public <P,​R> R accept​(TypeVisitor<P,​R> visitor,
                                    P parameter)
        Overrides:
        accept in class Type<T>
      • addCustomAnnotation

        public void addCustomAnnotation​(AnnotationBuilder<? extends java.lang.annotation.Annotation> annotation)
      • getAnnotation

        public <A extends java.lang.annotation.Annotation> A getAnnotation​(java.lang.Class<A> annotationClass)
        Specified by:
        getAnnotation in interface java.lang.reflect.AnnotatedElement
        Overrides:
        getAnnotation in class Type<T>
      • getAnnotations

        @NotNull
        public java.lang.annotation.Annotation[] getAnnotations()
        Specified by:
        getAnnotations in interface java.lang.reflect.AnnotatedElement
        Overrides:
        getAnnotations in class Type<T>
      • bakeAnnotations

        private java.lang.annotation.Annotation[] bakeAnnotations()
      • getDeclaredAnnotations

        @NotNull
        public java.lang.annotation.Annotation[] getDeclaredAnnotations()
        Specified by:
        getDeclaredAnnotations in interface java.lang.reflect.AnnotatedElement
        Overrides:
        getDeclaredAnnotations in class Type<T>
      • isAnnotationPresent

        public boolean isAnnotationPresent​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
        Specified by:
        isAnnotationPresent in interface java.lang.reflect.AnnotatedElement
        Overrides:
        isAnnotationPresent in class Type<T>
      • isCreated

        public boolean isCreated()
      • createType

        public Type<T> createType()
      • createType

        public Type<T> createType​(java.io.File outputFile)
      • createType

        public Type<T> createType​(java.io.OutputStream outputStream)
      • defineDefaultConstructor

        public ConstructorBuilder defineDefaultConstructor​(int modifiers)
      • addMethodToList

        void addMethodToList​(MethodBuilder methodBuilder)
      • defineMethodOverride

        public void defineMethodOverride​(MethodInfo override,
                                         MethodInfo baseMethod)
      • defineMethod

        public MethodBuilder defineMethod​(java.lang.String name,
                                          int modifiers)
      • defineMethod

        public MethodBuilder defineMethod​(java.lang.String name,
                                          int modifiers,
                                          Type<?> returnType)
      • defineMethod

        public MethodBuilder defineMethod​(java.lang.String name,
                                          int modifiers,
                                          Type<?> returnType,
                                          TypeList parameterTypes)
      • defineMethodCore

        private MethodBuilder defineMethodCore​(java.lang.String name,
                                               int modifiers,
                                               Type<?> returnType,
                                               TypeList parameterTypes,
                                               TypeList thrownTypes)
      • defineTypeInitializer

        public MethodBuilder defineTypeInitializer()
      • defineConstant

        public FieldBuilder defineConstant​(java.lang.String name,
                                           Type<?> type,
                                           int modifiers,
                                           java.lang.Object constantValue)
      • defineField

        public FieldBuilder defineField​(java.lang.String name,
                                        Type<?> type,
                                        int modifiers)
      • defineFieldCore

        private FieldBuilder defineFieldCore​(java.lang.String name,
                                             Type<?> type,
                                             int modifiers,
                                             java.lang.Object constantValue)
      • defineGenericParameters

        public GenericParameterBuilder<?>[] defineGenericParameters​(java.lang.String... names)
      • getTypeToken

        short getTypeToken​(Type<?> type)
      • getMethodToken

        short getMethodToken​(MethodBase method)
      • getFieldToken

        short getFieldToken​(FieldInfo field)
      • getConstantToken

        short getConstantToken​(int value)
      • getConstantToken

        short getConstantToken​(long value)
      • getConstantToken

        short getConstantToken​(float value)
      • getConstantToken

        short getConstantToken​(double value)
      • getStringToken

        short getStringToken​(java.lang.String value)
      • getUtf8StringToken

        short getUtf8StringToken​(java.lang.String value)
      • erase

        private static Type<?> erase​(Type<?> t)
      • createTypeNoLock

        private Type<T> createTypeNoLock​(java.io.OutputStream writeTo)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • createBridgeMethods

        private void createBridgeMethods()
      • isBridgeMethodNeeded

        static boolean isBridgeMethodNeeded​(MethodInfo baseMethod,
                                            MethodInfo override)
      • getDefaultOutputStream

        private java.io.OutputStream getDefaultOutputStream()
      • updateMembersWithGeneratedReferences

        private void updateMembersWithGeneratedReferences()
      • defineClass

        private static java.lang.invoke.MethodHandle defineClass()
      • defineClass0

        private static java.lang.invoke.MethodHandle defineClass0()
      • mhLookupDefineClass0

        private static java.lang.invoke.MethodHandle mhLookupDefineClass0()
      • unsafeDefineClass0

        private static java.lang.invoke.MethodHandle unsafeDefineClass0()
                                                                 throws java.lang.ReflectiveOperationException
        Throws:
        java.lang.ReflectiveOperationException