From 9d0f1e313863f49932ef7940bda896b0d2e8f0d8 Mon Sep 17 00:00:00 2001 From: "alexey.afanasiev" Date: Fri, 25 Jan 2019 15:25:38 +0300 Subject: [PATCH] [groovy] IDEA-202693 Support resolve locals, delegates and owner in lambda expressions --- .../groovy/lang/psi/api/GrFunctionalExpression.java | 9 +-------- .../groovy/lang/psi/impl/GrLambdaExpressionImpl.kt | 10 ++++++++++ .../impl/statements/blocks/GrClosableBlockImpl.java | 9 +++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/GrFunctionalExpression.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/GrFunctionalExpression.java index 220db930de4e..3d10a82f2fe8 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/GrFunctionalExpression.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/GrFunctionalExpression.java @@ -5,16 +5,12 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiType; import com.intellij.psi.ResolveState; import com.intellij.psi.scope.PsiScopeProcessor; -import com.intellij.psi.util.CachedValueProvider; -import com.intellij.psi.util.CachedValuesManager; -import com.intellij.psi.util.PsiModificationTracker; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrParameterListOwner; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; -import static org.jetbrains.plugins.groovy.lang.psi.impl.FunctionalExpressionsKt.doGetOwnerType; import static org.jetbrains.plugins.groovy.lang.psi.impl.FunctionalExpressionsKt.processOwnerAndDelegate; public interface GrFunctionalExpression extends GrExpression, GrParameterListOwner { @@ -32,8 +28,5 @@ public interface GrFunctionalExpression extends GrExpression, GrParameterListOwn } @Nullable - default PsiType getOwnerType() { - return CachedValuesManager - .getCachedValue(this, () -> CachedValueProvider.Result.create(doGetOwnerType(this), PsiModificationTracker.MODIFICATION_COUNT)); - } + PsiType getOwnerType(); } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GrLambdaExpressionImpl.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GrLambdaExpressionImpl.kt index bdadc91cb06f..39d49b3337ac 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GrLambdaExpressionImpl.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GrLambdaExpressionImpl.kt @@ -3,8 +3,12 @@ package org.jetbrains.plugins.groovy.lang.psi.impl import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement +import com.intellij.psi.PsiType import com.intellij.psi.ResolveState import com.intellij.psi.scope.PsiScopeProcessor +import com.intellij.psi.util.CachedValueProvider +import com.intellij.psi.util.CachedValuesManager +import com.intellij.psi.util.PsiModificationTracker import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrCodeBlock import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression @@ -47,6 +51,12 @@ class GrLambdaExpressionImpl(node: ASTNode): GrExpressionImpl(node), GrLambdaExp return parameters } + override fun getOwnerType(): PsiType? { + return CachedValuesManager.getCachedValue(this) { + CachedValueProvider.Result.create(doGetOwnerType(), PsiModificationTracker.MODIFICATION_COUNT) + } + } + override fun toString(): String { return "Lambda expression" } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java index 211ccb5e2ea9..91d16906d65c 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java @@ -7,6 +7,9 @@ import com.intellij.psi.PsiType; import com.intellij.psi.ResolveState; import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.CachedValueProvider; +import com.intellij.psi.util.CachedValuesManager; +import com.intellij.psi.util.PsiModificationTracker; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.NullableFunction; @@ -159,6 +162,12 @@ public class GrClosableBlockImpl extends GrBlockImpl implements GrClosableBlock ); } + @Nullable + @Override + public PsiType getOwnerType() { + return CachedValuesManager.getCachedValue(this, () -> CachedValueProvider.Result.create(doGetOwnerType(this), PsiModificationTracker.MODIFICATION_COUNT)); + } + @Override public GrExpression replaceWithExpression(@NotNull GrExpression newExpr, boolean removeUnnecessaryParentheses) { return PsiImplUtil.replaceExpression(this, newExpr, removeUnnecessaryParentheses);