< prev index next >

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

Print this page
@@ -30,11 +30,10 @@
  
  import com.sun.tools.javac.code.*;
  import com.sun.tools.javac.code.Scope.WriteableScope;
  import com.sun.tools.javac.tree.*;
  import com.sun.tools.javac.util.*;
- import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
  import com.sun.tools.javac.util.JCDiagnostic.Error;
  import com.sun.tools.javac.code.Source.Feature;
  
  import com.sun.tools.javac.code.Symbol.*;
  import com.sun.tools.javac.code.Type.*;

@@ -64,10 +63,12 @@
      private final Attr attr;
      private final Symtab syms;
      private final Annotate annotate;
      private final Types types;
      private final Names names;
+     private final Preview preview;
+     private final boolean allowValueClasses;
  
      public static MemberEnter instance(Context context) {
          MemberEnter instance = context.get(memberEnterKey);
          if (instance == null)
              instance = new MemberEnter(context);

@@ -84,10 +85,12 @@
          syms = Symtab.instance(context);
          annotate = Annotate.instance(context);
          types = Types.instance(context);
          source = Source.instance(context);
          names = Names.instance(context);
+         preview = Preview.instance(context);
+         allowValueClasses = preview.isEnabled() && Feature.VALUE_CLASSES.allowedInSource(source);
      }
  
      /** Construct method type from method signature.
       *  @param typarams    The method's type parameters.
       *  @param params      The method's value parameters.

@@ -291,10 +294,14 @@
              v.flags_field |= HASINIT;
              if ((v.flags_field & FINAL) != 0 &&
                  needsLazyConstValue(tree.init)) {
                  Env<AttrContext> initEnv = getInitEnv(tree, env);
                  initEnv.info.enclVar = v;
+                 initEnv = initEnv(tree, initEnv);
+                 if (v.isStrictInstance() && allowValueClasses) {
+                     initEnv.info.earlyContext = EarlyConstructionContext.of((ClassSymbol)v.owner, false);
+                 }
                  v.setLazyConstValue(initEnv(tree, initEnv), env, attr, tree);
              }
          }
  
          if(!(Feature.UNNAMED_VARIABLES.allowedInSource(source) && tree.sym.isUnnamedVariable())) {
< prev index next >