JVM code generation phase
JVM code generation phase
builder of bean info classes
builder of bean info classes
basic functionality for class file building
basic functionality for class file building
functionality for building plain and mirror classes
functionality for building plain and mirror classes
builder of mirror classes
builder of mirror classes
builder of plain classes
builder of plain classes
A standard phase template
A standard phase template
Is this component enabled? Default is true.
Is this component enabled? Default is true.
cls.getName
null
if no Java signature is to be added (null
is what ASM expects in these cases).The global environment; overridden by instantiation in Global.
The global environment; overridden by instantiation in Global.
SubComponent are added to a HashSet and two phases are the same if they have the same name
SubComponent are added to a HashSet and two phases are the same if they have the same name
Given an internal name (eg "java/lang/Integer") returns the class symbol for it.
Given an internal name (eg "java/lang/Integer") returns the class symbol for it.
Better not to need this method (an example where control flow arrives here is welcome). This method is invoked only upon both (1) and (2) below happening: (1) providing an asm.ClassWriter with an internal name by other means than javaName() (2) forgetting to track the corresponding class-symbol in reverseJavaName.
(The first item is already unlikely because we rely on javaName() to do the bookkeeping for entries that should go in innerClassBuffer.)
(We could do completely without this method at the expense of computing stack-map-frames ourselves and invoking visitFrame(), but that would require another pass over all instructions.)
Right now I can't think of any invocation of visitSomething() on MethodVisitor where we hand an internal name not backed by a reverseJavaName. However, I'm leaving this note just in case any such oversight is discovered.
True if this phase runs before all other phases.
True if this phase runs before all other phases. Usually, parser
.
True if this phase is not provided by a plug-in.
True if this phase is not provided by a plug-in.
Return the Java modifiers for the given symbol.
Return the Java modifiers for the given symbol. Java modifiers for classes:
(*) protected cannot be used, since inner classes 'see' protected members, and they would fail verification after lifted.
A namespace for utilities to normalize the code of an IMethod, over and beyond what IMethod.
A namespace for utilities to normalize the code of an IMethod, over and beyond what IMethod.normalize() strives for. In particualr, IMethod.normalize() doesn't collapseJumpChains().
TODO Eventually, these utilities should be moved to IMethod and reused from normalize() (there's nothing JVM-specific about them).
Create a new phase
Create a new phase
The phase corresponding to this subcomponent in the current compiler run
The phase corresponding to this subcomponent in the current compiler run
The name of the phase
The name of the phase
New flags defined by the phase which are not valid before
New flags defined by the phase which are not valid before
New flags defined by the phase which are not valid until immediately after it
New flags defined by the phase which are not valid until immediately after it
Names of phases required by this component.
Names of phases required by this component. Default is Nil
.
Names of phases that must run before this phase.
Names of phases that must run before this phase.
Names of phases that must run after this phase.
Names of phases that must run after this phase. Default is Nil
.
Name of the phase that this phase must follow immediately.
Name of the phase that this phase must follow immediately.
True if this phase runs after all other phases.
True if this phase runs after all other phases. Usually, terminal
.