Class BCClass
- java.lang.Object
-
- org.apache.derby.impl.services.bytecode.GClass
-
- org.apache.derby.impl.services.bytecode.BCClass
-
- All Implemented Interfaces:
ClassBuilder
class BCClass extends GClass
ClassBuilder is used to construct a java class's byte array representation. Limitations: No checking for language use violations such as invalid modifiers or duplicate field names. All classes must have a superclass; java.lang.Object must be supplied if there is no superclass.When a class is first created, it has:
- a superclass
- modifiers
- a name
- a package
- no superinterfaces, methods, fields, or constructors
- an empty static initializer
- an empty initializer
MethodBuilder implementations are required to supply a way for Generators to give them code. Most typically, they may have a stream to which the Generator writes the code that is of the type to satisfy what the Generator is writing.
BCClass is a ClassBuilder implementation for generating java bytecode directly.
-
-
Field Summary
Fields Modifier and Type Field Description protected ClassHolder
classHold
(package private) Type
classType
(package private) BCJava
factory
(package private) java.lang.String
limitMsg
Simple text indicating any limits execeeded while generating the class file.protected java.lang.String
name
protected java.lang.String
superClassName
-
Fields inherited from class org.apache.derby.impl.services.bytecode.GClass
bytecode, cf, qualifiedName
-
-
Constructor Summary
Constructors Constructor Description BCClass(ClassFactory cf, java.lang.String packageName, int classModifiers, java.lang.String className, java.lang.String superClassName, BCJava factory)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description LocalField
addField(java.lang.String javaType, java.lang.String name, int modifiers)
add a field to this class.(package private) void
addLimitExceeded(java.lang.String rawText)
Add the fact that some class limit was exceeded while generating the class.(package private) void
addLimitExceeded(BCMethod mb, java.lang.String limitName, int limit, int value)
Add the fact that some class limit was exceeded while generating the class.ByteArray
getClassBytecode()
At the time the class is completed and bytecode generated, if there are no constructors then the default no-arg constructor will be defined.(package private) ClassFactory
getClassFactory()
java.lang.String
getName()
the class's unqualified name(package private) java.lang.String
getSuperClassName()
(package private) ClassHolder
modify()
Let those that need to get to the classModify tool to alter the class definition.MethodBuilder
newConstructorBuilder(int modifiers)
a constructor.MethodBuilder
newMethodBuilder(int modifiers, java.lang.String returnType, java.lang.String methodName)
a method.MethodBuilder
newMethodBuilder(int modifiers, java.lang.String returnType, java.lang.String methodName, java.lang.String[] parms)
a method with parameters.-
Methods inherited from class org.apache.derby.impl.services.bytecode.GClass
getFullName, getGeneratedClass, validateType, writeClassFile
-
-
-
-
Field Detail
-
limitMsg
java.lang.String limitMsg
Simple text indicating any limits execeeded while generating the class file.
-
classHold
protected ClassHolder classHold
-
superClassName
protected java.lang.String superClassName
-
name
protected java.lang.String name
-
factory
BCJava factory
-
classType
final Type classType
-
-
Constructor Detail
-
BCClass
BCClass(ClassFactory cf, java.lang.String packageName, int classModifiers, java.lang.String className, java.lang.String superClassName, BCJava factory)
-
-
Method Detail
-
addField
public LocalField addField(java.lang.String javaType, java.lang.String name, int modifiers)
add a field to this class. Fields cannot be initialized here, they must be initialized in the static initializer code (static fields) or in the constructors.static fields also added to this list, with the modifier set appropriately.
- Parameters:
javaType
- The type of the field in java language.name
- The name of the field.modifiers
- The | of the modifier values such as public, static, etc.- See Also:
ClassBuilder.newMethodBuilder(int, java.lang.String, java.lang.String)
,ClassBuilder.newConstructorBuilder(int)
-
getClassBytecode
public ByteArray getClassBytecode() throws StandardException
At the time the class is completed and bytecode generated, if there are no constructors then the default no-arg constructor will be defined.- Throws:
StandardException
-
getName
public java.lang.String getName()
the class's unqualified name
-
newMethodBuilder
public MethodBuilder newMethodBuilder(int modifiers, java.lang.String returnType, java.lang.String methodName)
a method. Once it is created, thrown exceptions, statements, and local variable declarations must be added to it. It is put into its defining class when it is created.Java: #modifiers #returnType #methodName() {} // modifiers is the | of the JVM constants for // the modifiers such as static, public, etc. This is used to start a constructor as well; pass in null for the returnType when used in that manner. See java.lang.reflect.Modifiers
- Parameters:
modifiers
- the | of the Modifiers constants representing the visibility and control of this method.returnType
- the return type of the method as its Java language type name.methodName
- the name of the method.- Returns:
- the method builder.
- See Also:
Modifier
-
newMethodBuilder
public MethodBuilder newMethodBuilder(int modifiers, java.lang.String returnType, java.lang.String methodName, java.lang.String[] parms)
a method with parameters. Once it is created, thrown exceptions, statements, and local variable declarations must be added to it. It is put into its defining class when it is created.Java: #modifiers #returnType #methodName() {} // modifiers is the | of the JVM constants for // the modifiers such as static, public, etc. This is used to start a constructor as well; pass in null for the returnType when used in that manner. See java.lang.reflect.Modifiers
- Parameters:
modifiers
- the | of the Modifiers constants representing the visibility and control of this method.returnType
- the return type of the method as its Java language type name.methodName
- the name of the method.parms
- an array of ParameterDeclarations representing the method's parameters- Returns:
- the method builder.
- See Also:
Modifier
-
newConstructorBuilder
public MethodBuilder newConstructorBuilder(int modifiers)
a constructor. Once it is created, thrown exceptions, statements, and local variable declarations must be added to it. It is put into its defining class when it is created.Java: #modifiers #className() {} // modifiers is the | of the JVM constants for // the modifiers such as static, public, etc. // className is taken from definingClass.getName() This is used to start a constructor as well; pass in null for the returnType when used in that manner.
See Modifiers
- Parameters:
modifiers
- the | of the Modifiers constants representing the visibility and control of this method.- Returns:
- the method builder for the constructor.
- See Also:
Modifier
-
getSuperClassName
java.lang.String getSuperClassName()
-
modify
ClassHolder modify()
Let those that need to get to the classModify tool to alter the class definition.
-
getClassFactory
ClassFactory getClassFactory()
-
addLimitExceeded
void addLimitExceeded(BCMethod mb, java.lang.String limitName, int limit, int value)
Add the fact that some class limit was exceeded while generating the class. We create a set of them and report at the end, this allows the generated class file to still be dumped.- Parameters:
mb
-limitName
-limit
-value
-
-
addLimitExceeded
void addLimitExceeded(java.lang.String rawText)
Add the fact that some class limit was exceeded while generating the class. Text is the simple string passed in.- Parameters:
rawText
- Text to be reported.- See Also:
addLimitExceeded(BCMethod, String, int, int)
-
-