--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Wed Jul 09 10:49:32 2014 -0400
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Thu Jul 10 13:57:27 2014 -0700
@@ -82,7 +82,6 @@
private final Target target;
private final Source source;
private final TypeEnvs typeEnvs;
- private final boolean allowEnums;
private final Name dollarAssertionsDisabled;
private final Name classDollar;
private final Types types;
@@ -103,7 +102,6 @@
target = Target.instance(context);
source = Source.instance(context);
typeEnvs = TypeEnvs.instance(context);
- allowEnums = source.allowEnums();
dollarAssertionsDisabled = names.
fromString(target.syntheticNameChar() + "assertionsDisabled");
classDollar = names.
@@ -1492,9 +1490,6 @@
List<JCVariableDecl> freevarDefs(int pos, List<VarSymbol> freevars, Symbol owner,
long additionalFlags) {
long flags = FINAL | SYNTHETIC | additionalFlags;
- if (owner.kind == TYP &&
- target.usePrivateSyntheticFields())
- flags |= PRIVATE;
List<JCVariableDecl> defs = List.nil();
for (List<VarSymbol> l = freevars; l.nonEmpty(); l = l.tail) {
VarSymbol v = l.head;
@@ -1525,9 +1520,6 @@
}
private VarSymbol makeOuterThisVarSymbol(Symbol owner, long flags) {
- if (owner.kind == TYP &&
- target.usePrivateSyntheticFields())
- flags |= PRIVATE;
Type target = types.erasure(owner.enclClass().type.getEnclosingType());
VarSymbol outerThis =
new VarSymbol(flags, outerThisName(target, owner), target, owner);
@@ -1900,8 +1892,6 @@
*/
private ClassSymbol outerCacheClass() {
ClassSymbol clazz = outermostClassDef.sym;
- if ((clazz.flags() & INTERFACE) == 0 &&
- !target.useInnerCacheClass()) return clazz;
Scope s = clazz.members();
for (Symbol sym : s.getSymbols(NON_RECURSIVE))
if (sym.kind == TYP &&
@@ -1958,79 +1948,54 @@
JCBlock returnResult;
- // in 1.4.2 and above, we use
- // Class.forName(String name, boolean init, ClassLoader loader);
- // which requires we cache the current loader in cl$
- if (target.classLiteralsNoInit()) {
- // clsym = "private static ClassLoader cl$"
- VarSymbol clsym = new VarSymbol(STATIC|SYNTHETIC,
- names.fromString("cl" + target.syntheticNameChar()),
- syms.classLoaderType,
- outerCacheClass);
- enterSynthetic(pos, clsym, outerCacheClass.members());
-
- // emit "private static ClassLoader cl$;"
- JCVariableDecl cldef = make.VarDef(clsym, null);
- JCClassDecl outerCacheClassDef = classDef(outerCacheClass);
- outerCacheClassDef.defs = outerCacheClassDef.defs.prepend(cldef);
-
- // newcache := "new cache$1[0]"
- JCNewArray newcache = make.
- NewArray(make.Type(outerCacheClass.type),
- List.<JCExpression>of(make.Literal(INT, 0).setType(syms.intType)),
- null);
- newcache.type = new ArrayType(types.erasure(outerCacheClass.type),
- syms.arrayClass, Type.noAnnotations);
-
- // forNameSym := java.lang.Class.forName(
- // String s,boolean init,ClassLoader loader)
- Symbol forNameSym = lookupMethod(make_pos, names.forName,
- types.erasure(syms.classType),
- List.of(syms.stringType,
- syms.booleanType,
- syms.classLoaderType));
- // clvalue := "(cl$ == null) ?
- // $newcache.getClass().getComponentType().getClassLoader() : cl$"
- JCExpression clvalue =
+ // cache the current loader in cl$
+ // clsym = "private static ClassLoader cl$"
+ VarSymbol clsym = new VarSymbol(STATIC | SYNTHETIC,
+ names.fromString("cl" + target.syntheticNameChar()),
+ syms.classLoaderType,
+ outerCacheClass);
+ enterSynthetic(pos, clsym, outerCacheClass.members());
+
+ // emit "private static ClassLoader cl$;"
+ JCVariableDecl cldef = make.VarDef(clsym, null);
+ JCClassDecl outerCacheClassDef = classDef(outerCacheClass);
+ outerCacheClassDef.defs = outerCacheClassDef.defs.prepend(cldef);
+
+ // newcache := "new cache$1[0]"
+ JCNewArray newcache = make.NewArray(make.Type(outerCacheClass.type),
+ List.<JCExpression>of(make.Literal(INT, 0).setType(syms.intType)),
+ null);
+ newcache.type = new ArrayType(types.erasure(outerCacheClass.type),
+ syms.arrayClass, Type.noAnnotations);
+
+ // forNameSym := java.lang.Class.forName(
+ // String s,boolean init,ClassLoader loader)
+ Symbol forNameSym = lookupMethod(make_pos, names.forName,
+ types.erasure(syms.classType),
+ List.of(syms.stringType,
+ syms.booleanType,
+ syms.classLoaderType));
+ // clvalue := "(cl$ == null) ?
+ // $newcache.getClass().getComponentType().getClassLoader() : cl$"
+ JCExpression clvalue =
make.Conditional(
- makeBinary(EQ, make.Ident(clsym), makeNull()),
- make.Assign(
- make.Ident(clsym),
- makeCall(
- makeCall(makeCall(newcache,
- names.getClass,
- List.<JCExpression>nil()),
- names.getComponentType,
- List.<JCExpression>nil()),
- names.getClassLoader,
- List.<JCExpression>nil())).setType(syms.classLoaderType),
- make.Ident(clsym)).setType(syms.classLoaderType);
-
- // returnResult := "{ return Class.forName(param1, false, cl$); }"
- List<JCExpression> args = List.of(make.Ident(md.params.head.sym),
- makeLit(syms.booleanType, 0),
- clvalue);
- returnResult = make.
- Block(0, List.<JCStatement>of(make.
- Call(make. // return
- App(make.
- Ident(forNameSym), args))));
- } else {
- // forNameSym := java.lang.Class.forName(String s)
- Symbol forNameSym = lookupMethod(make_pos,
- names.forName,
- types.erasure(syms.classType),
- List.of(syms.stringType));
- // returnResult := "{ return Class.forName(param1); }"
- returnResult = make.
- Block(0, List.of(make.
- Call(make. // return
- App(make.
- QualIdent(forNameSym),
- List.<JCExpression>of(make.
- Ident(md.params.
- head.sym))))));
- }
+ makeBinary(EQ, make.Ident(clsym), makeNull()),
+ make.Assign(make.Ident(clsym),
+ makeCall(
+ makeCall(makeCall(newcache,
+ names.getClass,
+ List.<JCExpression>nil()),
+ names.getComponentType,
+ List.<JCExpression>nil()),
+ names.getClassLoader,
+ List.<JCExpression>nil())).setType(syms.classLoaderType),
+ make.Ident(clsym)).setType(syms.classLoaderType);
+
+ // returnResult := "{ return Class.forName(param1, false, cl$); }"
+ List<JCExpression> args = List.of(make.Ident(md.params.head.sym),
+ makeLit(syms.booleanType, 0),
+ clvalue);
+ returnResult = make.Block(0, List.<JCStatement>of(make.Call(make.App(make.Ident(forNameSym), args))));
// catchParam := ClassNotFoundException e1
VarSymbol catchParam =
@@ -2039,27 +2004,13 @@
classDollarSym);
JCStatement rethrow;
- if (target.hasInitCause()) {
- // rethrow = "throw new NoClassDefFoundError().initCause(e);
- JCExpression throwExpr =
- makeCall(makeNewClass(syms.noClassDefFoundErrorType,
- List.<JCExpression>nil()),
- names.initCause,
- List.<JCExpression>of(make.Ident(catchParam)));
- rethrow = make.Throw(throwExpr);
- } else {
- // getMessageSym := ClassNotFoundException.getMessage()
- Symbol getMessageSym = lookupMethod(make_pos,
- names.getMessage,
- syms.classNotFoundExceptionType,
- List.<Type>nil());
- // rethrow = "throw new NoClassDefFoundError(e.getMessage());"
- rethrow = make.
- Throw(makeNewClass(syms.noClassDefFoundErrorType,
- List.<JCExpression>of(make.App(make.Select(make.Ident(catchParam),
- getMessageSym),
- List.<JCExpression>nil()))));
- }
+ // rethrow = "throw new NoClassDefFoundError().initCause(e);
+ JCExpression throwExpr =
+ makeCall(makeNewClass(syms.noClassDefFoundErrorType,
+ List.<JCExpression>nil()),
+ names.initCause,
+ List.<JCExpression>of(make.Ident(catchParam)));
+ rethrow = make.Throw(throwExpr);
// rethrowStmt := "( $rethrow )"
JCBlock rethrowStmt = make.Block(0, List.of(rethrow));
@@ -2147,29 +2098,10 @@
((VarSymbol)typeSym).getConstValue(); // ensure initializer is evaluated
return make.QualIdent(typeSym);
case CLASS: case ARRAY:
- if (target.hasClassLiterals()) {
VarSymbol sym = new VarSymbol(
STATIC | PUBLIC | FINAL, names._class,
syms.classType, type.tsym);
return make_at(pos).Select(make.Type(type), sym);
- }
- // replace with <cache == null ? cache = class$(tsig) : cache>
- // where
- // - <tsig> is the type signature of T,
- // - <cache> is the cache variable for tsig.
- String sig =
- writer.xClassName(type).toString().replace('/', '.');
- Symbol cs = cacheSym(pos, sig);
- return make_at(pos).Conditional(
- makeBinary(EQ, make.Ident(cs), makeNull()),
- make.Assign(
- make.Ident(cs),
- make.App(
- make.Ident(classDollarSym(pos)),
- List.<JCExpression>of(make.Literal(CLASS, sig)
- .setType(syms.stringType))))
- .setType(types.erasure(syms.classType)),
- make.Ident(cs)).setType(types.erasure(syms.classType));
default:
throw new AssertionError();
}
@@ -2415,9 +2347,8 @@
Name name = names.package_info;
long flags = Flags.ABSTRACT | Flags.INTERFACE;
- if (target.isPackageInfoSynthetic())
- // package-info is marked SYNTHETIC in JDK 1.6 and later releases
- flags = flags | Flags.SYNTHETIC;
+ // package-info is marked SYNTHETIC in JDK 1.6 and later releases
+ flags = flags | Flags.SYNTHETIC;
JCClassDecl packageAnnotationsClass
= make.ClassDef(make.Modifiers(flags, tree.getAnnotations()),
name, List.<JCTypeParameter>nil(),
@@ -2549,8 +2480,7 @@
if (tree.extending == null)
tree.extending = make.Type(types.supertype(tree.type));
- // classOfType adds a cache field to tree.defs unless
- // target.hasClassLiterals().
+ // classOfType adds a cache field to tree.defs
JCExpression e_class = classOfType(tree.sym.type, tree.pos()).
setType(types.erasure(syms.classType));
@@ -2810,11 +2740,7 @@
// recursively translate following local statements and
// combine with this- or super-call
List<JCStatement> stats = translate(tree.body.stats.tail);
- if (target.initializeFieldsBeforeSuper())
- tree.body.stats = stats.prepend(selfCall).prependList(added);
- else
- tree.body.stats = stats.prependList(added).prepend(selfCall);
-
+ tree.body.stats = stats.prepend(selfCall).prependList(added);
outerThisStack = prevOuterThisStack;
} else {
Map<Symbol, Symbol> prevLambdaTranslationMap =
@@ -3056,9 +2982,7 @@
public void visitApply(JCMethodInvocation tree) {
Symbol meth = TreeInfo.symbol(tree.meth);
List<Type> argtypes = meth.type.getParameterTypes();
- if (allowEnums &&
- meth.name==names.init &&
- meth.owner == syms.enumSym)
+ if (meth.name == names.init && meth.owner == syms.enumSym)
argtypes = argtypes.tail.tail;
tree.args = boxArgs(argtypes, tree.args, tree.varargsElement);
tree.varargsElement = null;
@@ -3195,20 +3119,12 @@
/** Box up a single primitive expression. */
JCExpression boxPrimitive(JCExpression tree, Type box) {
make_at(tree.pos());
- if (target.boxWithConstructors()) {
- Symbol ctor = lookupConstructor(tree.pos(),
- box,
- List.<Type>nil()
- .prepend(tree.type));
- return make.Create(ctor, List.of(tree));
- } else {
- Symbol valueOfSym = lookupMethod(tree.pos(),
- names.valueOf,
- box,
- List.<Type>nil()
- .prepend(tree.type));
- return make.App(make.QualIdent(valueOfSym), List.of(tree));
- }
+ Symbol valueOfSym = lookupMethod(tree.pos(),
+ names.valueOf,
+ box,
+ List.<Type>nil()
+ .prepend(tree.type));
+ return make.App(make.QualIdent(valueOfSym), List.of(tree));
}
/** Unbox an object to a primitive value. */