langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java
equal
deleted
inserted
replaced
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 |