edu.rit.classfile
Class SynthesizedConstructorDescription

java.lang.Object
  extended by edu.rit.classfile.SubroutineReference
      extended by edu.rit.classfile.SubroutineDescription
          extended by edu.rit.classfile.SynthesizedSubroutineDescription
              extended by edu.rit.classfile.SynthesizedConstructorDescription

public class SynthesizedConstructorDescription
extends SynthesizedSubroutineDescription

Class SynthesizedConstructorDescription is used to synthesize a subroutine description for some actual constructor. To synthesize a constructor:

  1. Create an instance of class SynthesizedConstructorDescription, specifying the class.

  2. Modify the constructor's access mode and strict floating point mode if necessary.

  3. Add the constructor's argument types in order, if any.

  4. Add the constructor's thrown exceptions in order, if any.

  5. Add the constructor's bytecode instructions in order.

  6. Add the constructor's exception handlers in order if necessary.

  7. Set the constructor's max_stack and max_locals values.

Or:

  1. Create an instance of class SynthesizedConstructorDescription, specifying the class.

  2. Modify the constructor's access mode and strict floating point mode if necessary.

  3. Specify the constructor's method descriptor, if the constructor has arguments. The method descriptor must indicate the return type is void.

  4. Add the constructor's thrown exceptions in order, if any.

  5. Add the constructor's bytecode instructions in order.

  6. Add the constructor's exception handlers in order if necessary.

  7. Set the constructor's max_stack and max_locals values.
Or:

  1. Create an instance of class SynthesizedConstructorDescription, specifying the class and the constructor's method descriptor, if the constructor has arguments. The method descriptor must indicate the return type is void.

  2. Modify the constructor's access mode and strict floating point mode if necessary.

  3. Add the constructor's thrown exceptions in order, if any.

  4. Add the constructor's bytecode instructions in order.

  5. Add the constructor's exception handlers in order if necessary.

  6. Set the constructor's max_stack and max_locals values.

In the documentation below, the term "described constructor" means "the synthesized constructor described by this synthesized constructor description object."


Constructor Summary
SynthesizedConstructorDescription(SynthesizedClassDescription theClassDescription)
          Construct a new synthesized constructor description object.
SynthesizedConstructorDescription(SynthesizedClassDescription theClassDescription, String theMethodDescriptor)
          Construct a new synthesized constructor description object with the given method descriptor.
 
Method Summary
 void addArgumentType(TypeReference theArgumentType)
          Add an argument to this described constructor.
 void addExceptionHandler(Location theStartLocation, Location theEndLocation, Location theHandlerLocation, ClassReference theCatchType)
          Add an exception handler to the described constructor's list of exception handlers.
 void addInstruction(Instruction theInstruction)
          Adds the given instruction to the described constructor's list of bytecode instructions.
 void addThrownException(ClassReference theExceptionClass)
          Add a thrown exception to this described constructor.
 void increaseMaxLocals(int theMaxLocals)
          Increase the described constructor's max_locals item if necessary.
 void increaseMaxStack(int theMaxStack)
          Increase the described constructor's max_stack item if necessary.
 void setMaxLocals(int theMaxLocals)
          Specify the described constructor's max_locals item.
 void setMaxStack(int theMaxStack)
          Specify the described constructor's max_stack item.
 void setMethodDescriptor(String theMethodDescriptor)
          Specify the described constructor's method descriptor.
 void setPackageScoped()
          Specify that the described constructor has default access (also known as package scoped), that is, may be accessed only from inside its defining package or inside its defining class.
 void setPrivate()
          Specify that the described constructor is private, that is, may be accessed only from inside its defining class.
 void setProtected()
          Specify that the described constructor is protected, that is, may be accessed only from inside its defining package, inside its defining class, or inside subclasses of its defining class.
 void setPublic()
          Specify that the described constructor is public, that is, may be accessed from inside and outside its defining package.
 void setStrictfp(boolean isStrictfp)
          Specify whether the described constructor uses strict floating point mode.
 
Methods inherited from class edu.rit.classfile.SubroutineDescription
getCodeLength, getExceptionHandlers, getInstructions, getMaxLocals, getMaxStack, getThrownExceptions, isAbstract, isFinal, isNative, isPackageScoped, isPrivate, isProtected, isPublic, isStatic, isStrictfp, isSynchronized
 
Methods inherited from class edu.rit.classfile.SubroutineReference
equals, getArgumentTypes, getArgumentWordCount, getClassReference, getMethodDescriptor, getMethodName, getReturnType, hashCode, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

SynthesizedConstructorDescription

public SynthesizedConstructorDescription(SynthesizedClassDescription theClassDescription)
                                  throws ListFullException
Construct a new synthesized constructor description object. Initially, the described constructor is public, does not use strict floating point mode, has no arguments, throws no exceptions, has no instructions, has max_stack = 0, and has max_locals = 0. As a side effect, the new synthesized constructor description object is added to the given synthesized class description object.

Parameters:
theClassDescription - Class containing this constructor.
Throws:
NullPointerException - (unchecked exception) Thrown if theClassDescription is null.
ListFullException - Thrown if theClassDescription's subroutine list is full (i.e., contains 65535 subroutines).

SynthesizedConstructorDescription

public SynthesizedConstructorDescription(SynthesizedClassDescription theClassDescription,
                                         String theMethodDescriptor)
                                  throws ListFullException
Construct a new synthesized constructor description object with the given method descriptor. Initially, the described constructor is public, does not use strict floating point mode, has arguments as specified by theMethodDescriptor, throws no exceptions, has no instructions, has max_stack = 0, and has max_locals = 0. The method descriptor must indicate the return type is void. As a side effect, the new synthesized constructor description object is added to the given synthesized class description object.

Parameters:
theClassDescription - Class containing this constructor.
theMethodDescriptor - Method descriptor in the format specified by Section 4.3.3 of the Java Virtual Machine Specification, Second Edition.
Throws:
NullPointerException - (unchecked exception) Thrown if theClassDescription is null or theMethodDescriptor is null.
IllegalArgumentException - (unchecked exception) Thrown if theMethodDescriptor does not obey the syntax of a method descriptor. Thrown if theMethodDescriptor indicates that the return type is not void. Thrown if the number of arguments in theMethodDescriptor exceeds the limit (254).
ListFullException - Thrown if theClassDescription's subroutine list is full (i.e., contains 65535 subroutines).
Method Detail

setPublic

public void setPublic()
Specify that the described constructor is public, that is, may be accessed from inside and outside its defining package.


setPrivate

public void setPrivate()
Specify that the described constructor is private, that is, may be accessed only from inside its defining class.


setProtected

public void setProtected()
Specify that the described constructor is protected, that is, may be accessed only from inside its defining package, inside its defining class, or inside subclasses of its defining class.


setPackageScoped

public void setPackageScoped()
Specify that the described constructor has default access (also known as package scoped), that is, may be accessed only from inside its defining package or inside its defining class.


setStrictfp

public void setStrictfp(boolean isStrictfp)
Specify whether the described constructor uses strict floating point mode.

Parameters:
isStrictfp - True to use strict floating point mode, false not to use strict floating point mode.

addArgumentType

public void addArgumentType(TypeReference theArgumentType)
                     throws ListFullException
Add an argument to this described constructor.

Parameters:
theArgumentType - Argument's type reference.
Throws:
NullPointerException - (unchecked exception) Thrown if theArgumentType is null.
ListFullException - Thrown if adding theArgumentType would cause the described constructor's argument word count to exceed the limit (254).

setMethodDescriptor

public void setMethodDescriptor(String theMethodDescriptor)
Specify the described constructor's method descriptor. The method descriptor must indicate the return type is void.

Parameters:
theMethodDescriptor - Method descriptor in the format specified by Section 4.3.3 of the Java Virtual Machine Specification, Second Edition.
Throws:
NullPointerException - (unchecked exception) Thrown if theMethodDescriptor is null.
IllegalStateException - (unchecked exception) Thrown if the method descriptor cannot be set because this constructor description is already in use.
IllegalArgumentException - (unchecked exception) Thrown if theMethodDescriptor does not obey the syntax of a method descriptor. Thrown if theMethodDescriptor indicates that the return type is not void. Thrown if the number of arguments in theMethodDescriptor exceeds the limit (254).

addThrownException

public void addThrownException(ClassReference theExceptionClass)
                        throws ListFullException
Add a thrown exception to this described constructor.

Parameters:
theExceptionClass - Exception's class reference.
Throws:
NullPointerException - (unchecked exception) Thrown if theExceptionClass is null.
ListFullException - Thrown if the requisite constant pool entries could not be added because the constant pool is full. Also thrown if the described constructor's thrown exception list is full (i.e., contains 65535 thrown exceptions).

addInstruction

public void addInstruction(Instruction theInstruction)
                    throws ListFullException
Adds the given instruction to the described constructor's list of bytecode instructions.

Parameters:
theInstruction - Instruction to add.
Throws:
NullPointerException - (unchecked exception) Thrown if theInstruction is null.
ListFullException - Thrown if the requisite constant pool entries could not be added because the described constructor's class's constant pool is full. Also thrown if adding theInstruction would cause the described constructor's code length to exceed the maximum allowed value (65534 bytes).

addExceptionHandler

public void addExceptionHandler(Location theStartLocation,
                                Location theEndLocation,
                                Location theHandlerLocation,
                                ClassReference theCatchType)
                         throws ListFullException
Add an exception handler to the described constructor's list of exception handlers.

Parameters:
theStartLocation - Start location. This is the location of the first instruction in the constructor's bytecode sequence covered by the exception handler. (The start location is inclusive.)
theEndLocation - End location. This is the location of the next instruction after the last instruction in the constructor's bytecode sequence covered by the exception handler. (The end location is exclusive.)
theHandlerLocation - Handler location. This is the location of the first instruction in the exception handler itself.
theCatchType - Catch type. This is a class reference to the exception class caught by the exception handler. Null means the exception handler catches all exceptions.
Throws:
NullPointerException - (unchecked exception) Thrown if theStartLocation is null, theEndLocation is null, or theHandlerLocation is null.
IllegalArgumentException - (unchecked exception) Thrown if any of the following is true:
  • theStartLocation, theEndLocation, and theHandlerLocation have not all been added to the described constructor.
  • theStartLocation is at the same place as or comes after theEndLocation.
ListFullException - Thrown if the requisite constant pool entries could not be added because the described constructor's class's constant pool was full. Also thrown if the described constructor's exception handler list is full (i.e., contains 65535 exception handlers).

setMaxStack

public void setMaxStack(int theMaxStack)
                 throws OutOfRangeException
Specify the described constructor's max_stack item. The max_stack item's value gives the maximum depth of the described constructor's operand stack at any point during execution of the constructor.

Parameters:
theMaxStack - max_stack value.
Throws:
OutOfRangeException - Thrown if theMaxStack is not in the range 0 .. 65535.

increaseMaxStack

public void increaseMaxStack(int theMaxStack)
                      throws OutOfRangeException
Increase the described constructor's max_stack item if necessary. The max_stack item's value gives the maximum depth of the described constructor's operand stack at any point during execution of the constructor. If the described constructor's current max_stack value is less than theMaxStack, the max_stack value is set to theMaxStack, otherwise the max_stack value is unchanged.

Parameters:
theMaxStack - max_stack value.
Throws:
OutOfRangeException - Thrown if theMaxStack is not in the range 0 .. 65535.

setMaxLocals

public void setMaxLocals(int theMaxLocals)
                  throws OutOfRangeException
Specify the described constructor's max_locals item. The max_locals item's value gives the number of local variables in the local variable array allocated upon invocation of the described constructor.

Parameters:
theMaxLocals - max_locals value.
Throws:
OutOfRangeException - Thrown if theMaxLocals is not in the range 0 .. 65535.

increaseMaxLocals

public void increaseMaxLocals(int theMaxLocals)
                       throws OutOfRangeException
Increase the described constructor's max_locals item if necessary. The max_locals item's value gives the number of local variables in the local variable array allocated upon invocation of the described constructor. If the described constructor's current max_locals value is less than theMaxLocals, the max_locals value is set to theMaxLocals, otherwise the max_locals value is unchanged.

Parameters:
theMaxLocals - max_locals value.
Throws:
OutOfRangeException - Thrown if theMaxLocals is not in the range 0 .. 65535.


Copyright © 2001-2006 by Alan Kaminsky. All rights reserved. Send comments to ark­@­cs.rit.edu.