[groovy] IDEA-202693 Support resolve locals, delegates and owner in lambda expressions

This commit is contained in:
alexey.afanasiev
2019-01-25 15:26:04 +03:00
parent 9ae41aff28
commit 9d0f1e3138
3 changed files with 20 additions and 8 deletions
@@ -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();
}
@@ -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"
}
@@ -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);