From 7562d68b7d86ef9e0adc5f3ffee702eb3d79ef76 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Thu, 3 Oct 2019 17:44:28 +0300 Subject: [PATCH] [groovy] reference expression: move checking code outside of caching in references since it relies on element parent ... which may cause various PIEAE later GitOrigin-RevId: 619e38783dde9f2e9c6e235ecc6313b41c21bdb1 --- .../GrReferenceExpressionImpl.java | 31 ++++++------------- .../GrReferenceExpressionReference.kt | 6 ++-- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java index 90087e02da44..6e10adb525f0 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java @@ -47,7 +47,6 @@ import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import org.jetbrains.plugins.groovy.lang.resolve.DependentResolver; import org.jetbrains.plugins.groovy.lang.resolve.GroovyResolver; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; -import org.jetbrains.plugins.groovy.lang.resolve.api.Argument; import org.jetbrains.plugins.groovy.lang.resolve.api.GroovyProperty; import org.jetbrains.plugins.groovy.lang.resolve.references.GrExplicitMethodCallReference; import org.jetbrains.plugins.groovy.lang.resolve.references.GrStaticExpressionReference; @@ -62,7 +61,7 @@ import static com.intellij.psi.util.PsiUtilCore.ensureValid; import static java.util.Collections.emptyList; import static kotlin.LazyKt.lazy; import static org.jetbrains.plugins.groovy.lang.psi.GroovyTokenSets.REFERENCE_DOTS; -import static org.jetbrains.plugins.groovy.lang.psi.util.GroovyLValueUtil.getRValue; +import static org.jetbrains.plugins.groovy.lang.psi.util.GroovyLValueUtil.isLValue; import static org.jetbrains.plugins.groovy.lang.psi.util.GroovyLValueUtil.isRValue; import static org.jetbrains.plugins.groovy.lang.resolve.impl.IncompleteKt.resolveIncomplete; import static org.jetbrains.plugins.groovy.lang.typing.DefaultMethodCallTypeCalculatorKt.getTypeFromCandidate; @@ -79,19 +78,9 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl myCallReference = lazy( - () -> getParent() instanceof GrMethodCall && !isImplicitCallReceiver() ? new GrExplicitMethodCallReference(this) : null - ); - - private final Lazy myRValueReference = lazy( - () -> isRValue(this) ? new GrRValueExpressionReference(this) : null - ); - - private final Lazy myLValueReference = lazy(() -> { - Argument rValue = getRValue(this); - return rValue == null ? null : new GrLValueExpressionReference(this, rValue); - }); + private final Lazy myCallReference = lazy(() -> new GrExplicitMethodCallReference(this)); + private final Lazy myRValueReference = lazy(() -> new GrRValueExpressionReference(this)); + private final Lazy myLValueReference = lazy(() -> new GrLValueExpressionReference(this)); @Override public void accept(@NotNull GroovyElementVisitor visitor) { @@ -422,19 +411,19 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl doResolve(@NotNull GrReferenceExpressionImpl ref, boolean incomplete) { - final GroovyReference rValueRef = ref.myRValueReference.getValue(); - final GroovyReference lValueRef = ref.myLValueReference.getValue(); + final GroovyReference rValueRef = ref.getRValueReference(); + final GroovyReference lValueRef = ref.getLValueReference(); if (rValueRef != null && lValueRef != null) { // merge results from both references final Map results = new THashMap<>(); @@ -615,7 +604,7 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl): GrResolverProcessor<*> { - return lValueProcessor(name, place, kinds, argument) + val rValue = requireNotNull(element.getRValue()) + return lValueProcessor(name, place, kinds, rValue) } }