< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java

Print this page
@@ -215,11 +215,11 @@
          if (lastParam != null && (lastParam.mods.flags & Flags.VARARGS) != 0)
              m.flags_field |= Flags.VARARGS;
  
          localEnv.info.scope.leave();
          if (chk.checkUnique(tree.pos(), m, enclScope)) {
-         enclScope.enter(m);
+             enclScope.enter(m);
          }
  
          annotate.annotateLater(tree.mods.annotations, localEnv, m, tree.pos());
          // Visit the signature of the method. Note that
          // TypeAnnotate doesn't descend into the body.

@@ -285,13 +285,16 @@
                  ? env.info.scope.owner.kind == MTH ? Type.noType : syms.errType
                  : tree.vartype.type;
          VarSymbol v = new VarSymbol(0, tree.name, vartype, enclScope.owner);
          v.flags_field = chk.checkFlags(tree.pos(), tree.mods.flags, v, tree);
          tree.sym = v;
+         /* Don't want constant propagation/folding for instance fields of primitive classes,
+            as these can undergo updates via copy on write.
+         */
          if (tree.init != null) {
              v.flags_field |= HASINIT;
-             if ((v.flags_field & FINAL) != 0 &&
+             if ((v.flags_field & FINAL) != 0 && ((v.flags_field & STATIC) != 0 || !v.owner.isPrimitiveClass()) &&
                  needsLazyConstValue(tree.init)) {
                  Env<AttrContext> initEnv = getInitEnv(tree, env);
                  initEnv.info.enclVar = v;
                  v.setLazyConstValue(initEnv(tree, initEnv), attr, tree);
              }
< prev index next >