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 intprotected ClassPathThe path we use for finding class (binary) files.private static final ClassDefinitionFactoryprivate Hashtable<Type, ClassDeclaration> The classes, keyed by ClassDeclaration.private Vector<ClassDeclaration> The classes, in order of appearance.private Filecoverage data fileA list of files containing deprecation warnings.private ErrorConsumerwrites out error messagesprivate StringThe filename where the last errors have occurredprivate intMaximum number of errors to print.private ErrorMessageList of outstanding error messagesprivate intprivate Set<Identifier> A set of Identifiers for all packages exempt from the "exists" check in Imports#resolve().intflagsprivate booleanprivate static final StringshortMajor and minor versions to use for generated class files.shortprivate intintThe number of errors and warningsintprivate OutputStreamThe stream where error message are printed.private Hashtable<Identifier, Package> A hashtable of resource contexts.private static final StringFields inherited from interface 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, WHILEFields inherited from interface 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 TypeMethodDescriptionbooleanCheck if a class exists Applies only to package members (non-nested classes).(package private) static ClassDefinitionFactoryvoidIssue an errorerrorString(String err, Object arg1, Object arg2, Object arg3) Error StringvoidGet 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 fileintgetFlags()Return flagsReturn the declarations for all generated classes.shortReturn major version to use for generated class filesstatic intshortReturn minor version to use for generated class filesgetPackage(Identifier pkg) Get the package path for a packageprivate static intgetVersionPortion(String versionString) private booleaninsertError(long where, String message) Insert an error message in the list of outstanding error messages.private static booleanisBinaryClassCompatibleJavaVersion(String property) booleanTells whether an Identifier refers to a package which should be exempt from the "exists" check in Imports#resolve().voidLoad the definition of a class or at least determine how to load it.private ClassDefinitionLoad 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 booleanprivate booleanLoad a binary classvoidOutput a string.voidParse a source filevoidpushError(String errorFileName, int line, String message, String referenceText, String referenceTextPointer) Flush outstanding errorsprivate voidreportError(Object src, long where, String err, String msg) Report errorprivate voidSet the set of packages which are exempt from the exists check in Imports#resolve().voidshutdown()Release resources in classpath.private static booleanMethods inherited from class 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
-
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
-
getMajorVersion
public short getMajorVersion()Return major version to use for generated class files- Overrides:
getMajorVersionin classEnvironment
-
getMinorVersion
public short getMinorVersion()Return minor version to use for generated class files- Overrides:
getMinorVersionin classEnvironment
-
getcovFile
-
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:
isExemptPackagein 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:
getClassDeclarationin classEnvironment
-
getClassDeclaration
Description copied from class:EnvironmentReturn a class declaration given a type. Only works for class types.- Overrides:
getClassDeclarationin classEnvironment
-
classExists
Check if a class exists Applies only to package members (non-nested classes).- Overrides:
classExistsin classEnvironment
-
getPackage
Get the package path for a package- Overrides:
getPackagein 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:
loadDefinitionin 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:
makeClassDefinitionin 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:
makeMemberDefinitionin classEnvironment
-
shutdown
-
errorString
-
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
-
flushErrors
public void flushErrors() -
reportError
-
error
-
output
Output a string. This can either be an error message or something for debugging.- Overrides:
outputin classEnvironment
-