langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java
changeset 44393 ce94820fa9d1
parent 38512 c71e1cdd6674
child 44571 1140b8dad6bb
equal deleted inserted replaced
44392:e21b18355690 44393:ce94820fa9d1
     1 /*
     1 /*
     2  * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     7  * published by the Free Software Foundation.  Oracle designates this
   258 
   258 
   259     @Override
   259     @Override
   260     public void visitReference(JCMemberReference tree) {
   260     public void visitReference(JCMemberReference tree) {
   261         //perform arity-based check
   261         //perform arity-based check
   262         Env<AttrContext> localEnv = env.dup(tree);
   262         Env<AttrContext> localEnv = env.dup(tree);
   263         JCExpression exprTree = (JCExpression)deferredAttr.attribSpeculative(tree.getQualifierExpression(), localEnv,
   263         JCExpression exprTree;
   264                 attr.memberReferenceQualifierResult(tree));
   264         exprTree = (JCExpression)deferredAttr.attribSpeculative(tree.getQualifierExpression(), localEnv,
       
   265                 attr.memberReferenceQualifierResult(tree),
       
   266                 withLocalCacheContext());
   265         JCMemberReference mref2 = new TreeCopier<Void>(attr.make).copy(tree);
   267         JCMemberReference mref2 = new TreeCopier<Void>(attr.make).copy(tree);
   266         mref2.expr = exprTree;
   268         mref2.expr = exprTree;
   267         Symbol lhsSym = TreeInfo.symbol(exprTree);
   269         Symbol lhsSym = TreeInfo.symbol(exprTree);
   268         localEnv.info.selectSuper = lhsSym != null && lhsSym.name == lhsSym.name.table.names._super;
   270         localEnv.info.selectSuper = lhsSym != null && lhsSym.name == lhsSym.name.table.names._super;
   269         Symbol res =
   271         Symbol res =
   275         if (res.kind.isResolutionTargetError() ||
   277         if (res.kind.isResolutionTargetError() ||
   276                 res.type != null && res.type.hasTag(FORALL) ||
   278                 res.type != null && res.type.hasTag(FORALL) ||
   277                 (res.flags() & Flags.VARARGS) != 0 ||
   279                 (res.flags() & Flags.VARARGS) != 0 ||
   278                 (TreeInfo.isStaticSelector(exprTree, tree.name.table.names) &&
   280                 (TreeInfo.isStaticSelector(exprTree, tree.name.table.names) &&
   279                 exprTree.type.isRaw() && !exprTree.type.hasTag(ARRAY))) {
   281                 exprTree.type.isRaw() && !exprTree.type.hasTag(ARRAY))) {
   280             tree.overloadKind = JCMemberReference.OverloadKind.OVERLOADED;
   282             tree.setOverloadKind(JCMemberReference.OverloadKind.OVERLOADED);
   281         } else {
   283         } else {
   282             tree.overloadKind = JCMemberReference.OverloadKind.UNOVERLOADED;
   284             tree.setOverloadKind(JCMemberReference.OverloadKind.UNOVERLOADED);
   283         }
   285         }
   284         //return a plain old deferred type for this
   286         //return a plain old deferred type for this
   285         setResult(tree, deferredAttr.new DeferredType(tree, env));
   287         setResult(tree, deferredAttr.new DeferredType(tree, env));
   286     }
   288     }
   287 
   289