Package org.glassfish.rmic.tools.javac
Class BatchEnvironment
java.lang.Object
org.glassfish.rmic.tools.java.Environment
org.glassfish.rmic.tools.javac.BatchEnvironment
- All Implemented Interfaces:
Constants
,RuntimeConstants
,ErrorConsumer
- Direct Known Subclasses:
BatchEnvironment
Main environment of the batch version of the Java compiler,
this needs more work.
WARNING: The contents of this source file are not part of any
supported API. Code that depends on them does so at its own risk:
they are subject to change or removal without notice.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final int
protected ClassPath
The path we use for finding class (binary) files.private static final ClassDefinitionFactory
private Hashtable
<Type, ClassDeclaration> The classes, keyed by ClassDeclaration.private Vector
<ClassDeclaration> The classes, in order of appearance.private File
coverage data fileA list of files containing deprecation warnings.private ErrorConsumer
writes out error messagesprivate String
The filename where the last errors have occurredprivate int
Maximum number of errors to print.private ErrorMessage
List of outstanding error messagesprivate int
private Set
<Identifier> A set of Identifiers for all packages exempt from the "exists" check in Imports#resolve().int
flagsprivate boolean
private static final String
short
Major and minor versions to use for generated class files.short
private int
int
The number of errors and warningsint
private OutputStream
The stream where error message are printed.private Hashtable
<Identifier, Package> A hashtable of resource contexts.private static final String
Fields inherited from interface org.glassfish.rmic.tools.java.Constants
ABSTRACT, ACCM_CLASS, ACCM_FIELD, ACCM_INNERCLASS, ACCM_MEMBER, ACCM_METHOD, ADD, AND, ARRAY, ARRAYACCESS, ASGADD, ASGBITAND, ASGBITOR, ASGBITXOR, ASGDIV, ASGLSHIFT, ASGMUL, ASGREM, ASGRSHIFT, ASGSUB, ASGURSHIFT, ASSIGN, ATT_ALL, ATT_ALLCLASSES, ATT_CODE, BITAND, BITNOT, BITOR, BITXOR, BOOLEAN, BOOLEANVAL, BREAK, BYTE, BYTEVAL, CASE, CAST, CATCH, CHAR, CHARVAL, CLASS, COLON, COMMA, COMMENT, COND, CONST, CONTINUE, CONVERT, CS_BINARY, CS_CHECKED, CS_COMPILED, CS_NOTFOUND, CS_PARSED, CS_SOURCE, CS_UNDECIDED, CS_UNDEFINED, CT_BLOCK, CT_BRANCH_FALSE, CT_BRANCH_TRUE, CT_CASE, CT_FIKT_METHOD, CT_FIKT_RET, CT_FIRST_KIND, CT_LAST_KIND, CT_METHOD, CT_SWITH_WO_DEF, DEC, DECLARATION, DEFAULT, DIV, DO, DOUBLE, DOUBLEVAL, ELSE, EQ, ERROR, EXPR, EXPRESSION, EXTENDS, F_COVDATA, F_COVERAGE, F_DEBUG_LINES, F_DEBUG_SOURCE, F_DEBUG_VARS, F_DEPENDENCIES, F_DEPRECATION, F_DUMP, F_ERRORSREPORTED, F_OPT, F_OPT_INTERCLASS, F_PRINT_DEPENDENCIES, F_STRICTDEFAULT, F_VERBOSE, F_VERSION12, F_WARNINGS, FALSE, FIELD, FINAL, FINALLY, FLOAT, FLOATVAL, FOR, GE, GOTO, GT, idAppend, idClass, idClassInit, idClone, idCode, idConstantValue, idCoverageTable, idDeprecated, idDocumentation, IDENT, idExceptions, idFinallyReturnValue, idGetClass, idInit, idInnerClasses, idJavaIoSerializable, idJavaLang, idJavaLangClass, idJavaLangCloneable, idJavaLangError, idJavaLangException, idJavaLangObject, idJavaLangRuntimeException, idJavaLangString, idJavaLangStringBuffer, idJavaLangThrowable, idLength, idLineNumberTable, idLocalVariableTable, idNew, idNull, idSourceFile, idStar, idSuper, idSynthetic, idThis, idToString, idTYPE, idValueOf, IF, IMPLEMENTS, IMPORT, INC, INLINEMETHOD, INLINENEWINSTANCE, INLINERETURN, INSTANCEOF, INT, INTERFACE, INTVAL, LBRACE, LE, LENGTH, LONG, LONGVAL, LPAREN, LSHIFT, LSQBRACKET, LT, M_ABSTRACT, M_ANONYMOUS, M_DEPRECATED, M_FINAL, M_INLINEABLE, M_INTERFACE, M_LOCAL, M_NATIVE, M_PRIVATE, M_PROTECTED, M_PUBLIC, M_STATIC, M_STRICTFP, M_SYNCHRONIZED, M_SYNTHETIC, M_TRANSIENT, M_VOLATILE, MAXFILESIZE, MAXLINENUMBER, METHOD, MM_CLASS, MM_FIELD, MM_MEMBER, MM_METHOD, MUL, NATIVE, NE, NEG, NEW, NEWARRAY, NEWFROMNAME, NEWINSTANCE, NOT, NULL, opNames, opPrecedence, OR, PACKAGE, paraDeprecated, POS, POSTDEC, POSTINC, PREDEC, prefixAccess, prefixArray, prefixClass, prefixLoc, prefixThis, prefixVal, PREINC, PRIVATE, PROTECTED, PUBLIC, QUESTIONMARK, RBRACE, REM, RETURN, RPAREN, RSHIFT, RSQBRACKET, SEMICOLON, SHORT, SHORTVAL, SIG_INNERCLASS, SIGC_INNERCLASS, STAT, STATIC, STRICTFP, STRINGVAL, SUB, SUPER, SWITCH, SYNCHRONIZED, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_DOUBLE, TC_ERROR, TC_FLOAT, TC_INT, TC_LONG, TC_METHOD, TC_NULL, TC_SHORT, TC_VOID, THIS, THROW, THROWS, TM_ARRAY, TM_BOOLEAN, TM_BYTE, TM_CHAR, TM_CLASS, TM_DOUBLE, TM_ERROR, TM_FLOAT, TM_INT, TM_INT32, TM_INTEGER, TM_LONG, TM_METHOD, TM_NULL, TM_NUM32, TM_NUM64, TM_NUMBER, TM_REAL, TM_REFERENCE, TM_SHORT, TM_VOID, tracing, TRANSIENT, TRUE, TRY, TYPE, URSHIFT, VARDECLARATION, VOID, VOLATILE, WHEREOFFSETBITS, WHILE
Fields inherited from interface org.glassfish.rmic.tools.java.RuntimeConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_CLASS, CONSTANT_DOUBLE, CONSTANT_FIELD, CONSTANT_FLOAT, CONSTANT_INTEGER, CONSTANT_INTERFACEMETHOD, CONSTANT_INVOKEDYNAMIC, CONSTANT_LONG, CONSTANT_METHOD, CONSTANT_METHODHANDLE, CONSTANT_METHODTYPE, CONSTANT_NAMEANDTYPE, CONSTANT_STRING, CONSTANT_UNICODE, CONSTANT_UTF8, JAVA_DEFAULT_MINOR_VERSION, JAVA_DEFAULT_VERSION, JAVA_MAGIC, JAVA_MAX_SUPPORTED_MINOR_VERSION, JAVA_MAX_SUPPORTED_VERSION, JAVA_MIN_SUPPORTED_VERSION, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_breakpoint, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dead, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokedynamic, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_label, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_try, opc_wide, opcLengths, opcNames, SIG_ARRAY, SIG_BOOLEAN, SIG_BYTE, SIG_CHAR, SIG_CLASS, SIG_DOUBLE, SIG_ENDCLASS, SIG_ENDMETHOD, SIG_FLOAT, SIG_INT, SIG_LONG, SIG_METHOD, SIG_PACKAGE, SIG_SHORT, SIG_VOID, SIGC_ARRAY, SIGC_BOOLEAN, SIGC_BYTE, SIGC_CHAR, SIGC_CLASS, SIGC_DOUBLE, SIGC_ENDCLASS, SIGC_ENDMETHOD, SIGC_FLOAT, SIGC_INT, SIGC_LONG, SIGC_METHOD, SIGC_PACKAGE, SIGC_SHORT, SIGC_VOID, T_BOOLEAN, T_BYTE, T_CHAR, T_CLASS, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT
-
Constructor Summary
ConstructorsConstructorDescriptionBatchEnvironment
(OutputStream out, ClassPath binaryPath) BatchEnvironment
(OutputStream out, ClassPath binaryPath, ErrorConsumer errorConsumer) -
Method Summary
Modifier and TypeMethodDescriptionboolean
Check if a class exists Applies only to package members (non-nested classes).(package private) static ClassDefinitionFactory
void
Issue an errorerrorString
(String err, Object arg1, Object arg2, Object arg3) Error Stringvoid
Get a class, given the fully qualified class nameReturn a class declaration given a type.Return an enumeration of all the currently defined classes in order of appearance to getClassDeclaration().Return coverage data fileint
getFlags()
Return flagsReturn the declarations for all generated classes.short
Return major version to use for generated class filesstatic int
short
Return minor version to use for generated class filesgetPackage
(Identifier pkg) Get the package path for a packageprivate static int
getVersionPortion
(String versionString) private boolean
insertError
(long where, String message) Insert an error message in the list of outstanding error messages.private static boolean
isBinaryClassCompatibleJavaVersion
(String property) boolean
Tells whether an Identifier refers to a package which should be exempt from the "exists" check in Imports#resolve().void
Load the definition of a class or at least determine how to load it.private ClassDefinition
Load a binary filemakeClassDefinition
(Environment toplevelEnv, long where, IdentifierToken name, String doc, int modifiers, IdentifierToken superClass, IdentifierToken[] interfaces, ClassDefinition outerClass) Create a new class.makeMemberDefinition
(Environment origEnv, long where, ClassDefinition clazz, String doc, int modifiers, Type type, Identifier name, IdentifierToken[] argNames, IdentifierToken[] expIds, Object value) Create a new field.static boolean
private boolean
Load a binary classvoid
Output a string.void
Parse a source filevoid
pushError
(String errorFileName, int line, String message, String referenceText, String referenceTextPointer) Flush outstanding errorsprivate void
reportError
(Object src, long where, String err, String msg) Report errorprivate void
Set the set of packages which are exempt from the exists check in Imports#resolve().void
shutdown()
Release resources in classpath.private static boolean
Methods inherited from class org.glassfish.rmic.tools.java.Environment
classExists, covdata, coverage, debug_lines, debug_source, debug_vars, debugOutput, dependencies, deprecation, dtEnter, dtEvent, dtExit, dump, dumpModifiers, error, error, error, error, explicitCast, getCharacterEncoding, getClassDefinition, getClassDefinition, getImports, getQualifiedClassDefinition, getSource, implicitCast, isApplicable, isMoreSpecific, isMoreSpecific, opt, opt_interclass, print_dependencies, resolve, resolve, resolveByName, resolveExtendsByName, resolveName, resolveNames, resolvePackageQualifiedName, setCharacterEncoding, strictdefault, verbose, version12, warnings
-
Field Details
-
USE_LEGACY_PARSING_PROPERTY
- See Also:
-
JAVA_VERSION_PROPERTY
- See Also:
-
ASM_ONLY_JAVA_VERSION
private static final int ASM_ONLY_JAVA_VERSION- See Also:
-
classDefinitionFactory
-
out
The stream where error message are printed. -
binaryPath
The path we use for finding class (binary) files. -
packages
A hashtable of resource contexts. -
classesOrdered
The classes, in order of appearance. -
classes
The classes, keyed by ClassDeclaration. -
flags
public int flagsflags -
majorVersion
public short majorVersionMajor and minor versions to use for generated class files. Environments that extend BatchEnvironment (such as javadoc's Env class) get the default values below. javac itself may override these versions with values determined from the command line "-target" option. -
minorVersion
public short minorVersion -
covFile
coverage data file -
nerrors
public int nerrorsThe number of errors and warnings -
nwarnings
public int nwarnings -
ndeprecations
private int ndeprecations -
deprecationFiles
A list of files containing deprecation warnings. -
errorConsumer
writes out error messages -
exemptPackages
A set of Identifiers for all packages exempt from the "exists" check in Imports#resolve(). These are the current packages for all classes being compiled as of the first call to isExemptPackage. -
errorFileName
The filename where the last errors have occurred -
errors
List of outstanding error messages -
errorsPushed
private int errorsPushed -
errorLimit
private int errorLimitMaximum number of errors to print. -
hitErrorLimit
private boolean hitErrorLimit
-
-
Constructor Details
-
BatchEnvironment
-
BatchEnvironment
-
-
Method Details
-
createClassDefinitionFactory
-
getMaxSupportedClassVersion
public static int getMaxSupportedClassVersion() -
useBinaryClassFactory
private static boolean useBinaryClassFactory() -
mayUseBinaryClassFactory
public static boolean mayUseBinaryClassFactory() -
isBinaryClassCompatibleJavaVersion
-
getVersionPortion
-
getFlags
public int getFlags()Return flags- Overrides:
getFlags
in classEnvironment
-
getMajorVersion
public short getMajorVersion()Return major version to use for generated class files- Overrides:
getMajorVersion
in classEnvironment
-
getMinorVersion
public short getMinorVersion()Return minor version to use for generated class files- Overrides:
getMinorVersion
in classEnvironment
-
getcovFile
Return coverage data file- Overrides:
getcovFile
in classEnvironment
-
getClasses
Return an enumeration of all the currently defined classes in order of appearance to getClassDeclaration(). -
getGeneratedClasses
Return the declarations for all generated classes. These can be recognized as having the 'parsed' status -
isExemptPackage
Tells whether an Identifier refers to a package which should be exempt from the "exists" check in Imports#resolve().- Overrides:
isExemptPackage
in classEnvironment
-
setExemptPackages
private void setExemptPackages()Set the set of packages which are exempt from the exists check in Imports#resolve(). -
getClassDeclaration
Get a class, given the fully qualified class name- Overrides:
getClassDeclaration
in classEnvironment
-
getClassDeclaration
Description copied from class:Environment
Return a class declaration given a type. Only works for class types.- Overrides:
getClassDeclaration
in classEnvironment
-
classExists
Check if a class exists Applies only to package members (non-nested classes).- Overrides:
classExists
in classEnvironment
-
getPackage
Get the package path for a package- Overrides:
getPackage
in classEnvironment
-
parseFile
Parse a source file- Throws:
FileNotFoundException
-
loadFile
Load a binary file- Throws:
IOException
-
needsCompilation
private boolean needsCompilation(Hashtable<ClassDeclaration, ClassDeclaration> check, ClassDeclaration c) Load a binary class -
loadDefinition
Load the definition of a class or at least determine how to load it. The caller must repeat calls to this method until it the state converges to CS_BINARY, CS_PARSED, or the like..- Overrides:
loadDefinition
in classEnvironment
- See Also:
-
makeClassDefinition
public ClassDefinition makeClassDefinition(Environment toplevelEnv, long where, IdentifierToken name, String doc, int modifiers, IdentifierToken superClass, IdentifierToken[] interfaces, ClassDefinition outerClass) Create a new class.- Overrides:
makeClassDefinition
in classEnvironment
-
makeMemberDefinition
public MemberDefinition makeMemberDefinition(Environment origEnv, long where, ClassDefinition clazz, String doc, int modifiers, Type type, Identifier name, IdentifierToken[] argNames, IdentifierToken[] expIds, Object value) Create a new field.- Overrides:
makeMemberDefinition
in classEnvironment
-
shutdown
public void shutdown()Release resources in classpath.- Overrides:
shutdown
in classEnvironment
-
errorString
Error String -
insertError
Insert an error message in the list of outstanding error messages. The list is sorted on input position and contains no duplicates. The return value indicates whether or not the message was actually inserted. The method flushErrors() used to check for duplicate error messages. It would only detect duplicates if they were contiguous. Removing non-contiguous duplicate error messages is slightly less complicated at insertion time, so the functionality was moved here. This also saves a miniscule number of allocations. -
pushError
public void pushError(String errorFileName, int line, String message, String referenceText, String referenceTextPointer) Flush outstanding errors- Specified by:
pushError
in interfaceErrorConsumer
-
flushErrors
public void flushErrors() -
reportError
Report error -
error
Issue an error- Overrides:
error
in classEnvironment
-
output
Output a string. This can either be an error message or something for debugging.- Overrides:
output
in classEnvironment
-