langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java
changeset 25445 603f0c93d5c9
parent 25443 9187d77f2c64
equal deleted inserted replaced
25444:27045478cf23 25445:603f0c93d5c9
    52 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
    52 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
    53 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
    53 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
    54 
    54 
    55 import java.util.Arrays;
    55 import java.util.Arrays;
    56 import java.util.Collection;
    56 import java.util.Collection;
    57 import java.util.EnumMap;
       
    58 import java.util.EnumSet;
    57 import java.util.EnumSet;
    59 import java.util.Iterator;
    58 import java.util.Iterator;
    60 import java.util.LinkedHashMap;
    59 import java.util.LinkedHashMap;
    61 import java.util.LinkedHashSet;
       
    62 import java.util.Map;
    60 import java.util.Map;
    63 
    61 
    64 import javax.lang.model.element.ElementVisitor;
    62 import javax.lang.model.element.ElementVisitor;
    65 
    63 
    66 import static com.sun.tools.javac.code.Flags.*;
    64 import static com.sun.tools.javac.code.Flags.*;
    90     Infer infer;
    88     Infer infer;
    91     ClassFinder finder;
    89     ClassFinder finder;
    92     TreeInfo treeinfo;
    90     TreeInfo treeinfo;
    93     Types types;
    91     Types types;
    94     JCDiagnostic.Factory diags;
    92     JCDiagnostic.Factory diags;
    95     public final boolean boxingEnabled;
       
    96     public final boolean varargsEnabled;
       
    97     public final boolean allowMethodHandles;
    93     public final boolean allowMethodHandles;
    98     public final boolean allowFunctionalInterfaceMostSpecific;
    94     public final boolean allowFunctionalInterfaceMostSpecific;
    99     public final boolean checkVarargsAccessAfterResolution;
    95     public final boolean checkVarargsAccessAfterResolution;
   100     private final boolean debugResolve;
    96     private final boolean debugResolve;
   101     private final boolean compactMethodDiags;
    97     private final boolean compactMethodDiags;
   126         finder = ClassFinder.instance(context);
   122         finder = ClassFinder.instance(context);
   127         treeinfo = TreeInfo.instance(context);
   123         treeinfo = TreeInfo.instance(context);
   128         types = Types.instance(context);
   124         types = Types.instance(context);
   129         diags = JCDiagnostic.Factory.instance(context);
   125         diags = JCDiagnostic.Factory.instance(context);
   130         Source source = Source.instance(context);
   126         Source source = Source.instance(context);
   131         boxingEnabled = source.allowBoxing();
       
   132         varargsEnabled = source.allowVarargs();
       
   133         Options options = Options.instance(context);
   127         Options options = Options.instance(context);
   134         debugResolve = options.isSet("debugresolve");
   128         debugResolve = options.isSet("debugresolve");
   135         compactMethodDiags = options.isSet(Option.XDIAGS, "compact") ||
   129         compactMethodDiags = options.isSet(Option.XDIAGS, "compact") ||
   136                 options.isUnset(Option.XDIAGS) && options.isUnset("rawDiagnostics");
   130                 options.isUnset(Option.XDIAGS) && options.isUnset("rawDiagnostics");
   137         verboseResolutionMode = VerboseResolutionMode.getVerboseResolutionMode(options);
   131         verboseResolutionMode = VerboseResolutionMode.getVerboseResolutionMode(options);
  3277         MethodResolutionContext prevResolutionContext = currentResolutionContext;
  3271         MethodResolutionContext prevResolutionContext = currentResolutionContext;
  3278         try {
  3272         try {
  3279             Symbol bestSoFar = methodNotFound;
  3273             Symbol bestSoFar = methodNotFound;
  3280             currentResolutionContext = resolveContext;
  3274             currentResolutionContext = resolveContext;
  3281             for (MethodResolutionPhase phase : methodResolutionSteps) {
  3275             for (MethodResolutionPhase phase : methodResolutionSteps) {
  3282                 if (!phase.isApplicable(boxingEnabled, varargsEnabled) ||
  3276                 if (lookupHelper.shouldStop(bestSoFar, phase))
  3283                         lookupHelper.shouldStop(bestSoFar, phase)) break;
  3277                     break;
  3284                 MethodResolutionPhase prevPhase = currentResolutionContext.step;
  3278                 MethodResolutionPhase prevPhase = currentResolutionContext.step;
  3285                 Symbol prevBest = bestSoFar;
  3279                 Symbol prevBest = bestSoFar;
  3286                 currentResolutionContext.step = phase;
  3280                 currentResolutionContext.step = phase;
  3287                 Symbol sym = lookupHelper.lookup(env, phase);
  3281                 Symbol sym = lookupHelper.lookup(env, phase);
  3288                 lookupHelper.debug(pos, sym);
  3282                 lookupHelper.debug(pos, sym);
  4206 
  4200 
  4207         public boolean isVarargsRequired() {
  4201         public boolean isVarargsRequired() {
  4208             return isVarargsRequired;
  4202             return isVarargsRequired;
  4209         }
  4203         }
  4210 
  4204 
  4211         public boolean isApplicable(boolean boxingEnabled, boolean varargsEnabled) {
       
  4212             return (varargsEnabled || !isVarargsRequired) &&
       
  4213                    (boxingEnabled || !isBoxingRequired);
       
  4214         }
       
  4215 
       
  4216         public Symbol mergeResults(Symbol prev, Symbol sym) {
  4205         public Symbol mergeResults(Symbol prev, Symbol sym) {
  4217             return sym;
  4206             return sym;
  4218         }
  4207         }
  4219     }
  4208     }
  4220 
  4209