From baa0a7765cb8a721da3f7bcab9ef412c31e9b538 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 31 Aug 2012 22:35:26 +0200 Subject: [PATCH] don't cache globally types calculated during inference --- .../lang/psi/impl/InferenceContext.java | 22 +++++++++++++++++++ .../lang/psi/impl/TypeInferenceHelper.java | 3 ++- .../psi/impl/auxiliary/GrListOrMapImpl.java | 7 ++---- .../blocks/GrClosableBlockImpl.java | 7 ++---- .../GrAssignmentExpressionImpl.java | 3 +-- .../expressions/GrBinaryExpressionImpl.java | 3 +-- .../expressions/GrConditionalExprImpl.java | 3 ++- .../expressions/GrMethodCallImpl.java | 3 ++- .../expressions/GrNewExpressionImpl.java | 7 ++---- .../GrReferenceExpressionImpl.java | 10 ++++----- .../GrSuperReferenceExpressionImpl.java | 3 ++- .../GrThisReferenceExpressionImpl.java | 3 ++- .../arithmetic/GrUnaryExpressionImpl.java | 3 +-- .../expressions/literals/GrLiteralImpl.java | 15 ++----------- .../expressions/literals/GrStringImpl.java | 20 ++++------------- .../expressions/path/GrIndexPropertyImpl.java | 2 +- .../GrBuiltinTypeClassExpressionImpl.java | 3 ++- .../types/GrInstanceofExpressionImpl.java | 11 +--------- .../types/GrSafeCastExpressionImpl.java | 3 +-- .../typedef/members/GrMethodBaseImpl.java | 7 ++---- 20 files changed, 59 insertions(+), 79 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/InferenceContext.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/InferenceContext.java index 568e19afdf1c..54997d75195e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/InferenceContext.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/InferenceContext.java @@ -25,6 +25,7 @@ import com.intellij.psi.impl.source.resolve.ResolveCache; import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.PsiModificationTracker; +import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; @@ -64,6 +65,12 @@ public interface InferenceContext { ResolveResult[] results = ResolveCache.getInstance(ref.getElement().getProject()).resolveWithCaching(ref, resolver, true, incomplete); return results.length == 0 ? GroovyResolveResult.EMPTY_ARRAY : (GroovyResolveResult[])results; } + + @Nullable + @Override + public PsiType getExpressionType(T element, Function calculator) { + return GroovyPsiManager.getInstance(element.getProject()).getType(element, calculator); + } }; @Nullable @@ -73,6 +80,9 @@ public interface InferenceContext { GroovyResolveResult[] multiResolve(@NotNull T ref, boolean incomplete, ResolveCache.PolyVariantResolver resolver); + @Nullable + PsiType getExpressionType(T element, Function calculator); + class PartialContext implements InferenceContext { private final Map myTypes; private final Map> myCache = newHashMap(); @@ -118,6 +128,18 @@ public interface InferenceContext { } }, Pair.create(incomplete, resolver.getClass())); } + + @Nullable + @Override + public PsiType getExpressionType(final T element, final Function calculator) { + return _getCachedValue(element, new Computable() { + @Override + public PsiType compute() { + PsiType type = calculator.fun(element); + return type == PsiType.NULL ? null : type; + } + }, "type"); + } } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/TypeInferenceHelper.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/TypeInferenceHelper.java index c9940bca442e..2107a24437fb 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/TypeInferenceHelper.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/TypeInferenceHelper.java @@ -54,7 +54,7 @@ public class TypeInferenceHelper { private static final Logger LOG = Logger.getInstance(TypeInferenceHelper.class); private static final ThreadLocal ourInferenceContext = new ThreadLocal(); - public static T doInference(Map bindings, Computable computation) { + private static T doInference(Map bindings, Computable computation) { InferenceContext old = ourInferenceContext.get(); ourInferenceContext.set(new InferenceContext.PartialContext(bindings)); try { @@ -125,6 +125,7 @@ public class TypeInferenceHelper { return inferVariableType(variableName, scope, flow, findInstructionAt(place, flow)); } + @Nullable private static PsiType inferVariableType(String variableName, GrControlFlowOwner scope, Instruction[] flow, Instruction instruction) { if (instruction == null) return null; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/GrListOrMapImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/GrListOrMapImpl.java index f75ab56c769c..66542da9b83a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/GrListOrMapImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/GrListOrMapImpl.java @@ -36,10 +36,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgument import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; -import org.jetbrains.plugins.groovy.lang.psi.impl.GrMapType; -import org.jetbrains.plugins.groovy.lang.psi.impl.GrTupleType; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; -import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; +import org.jetbrains.plugins.groovy.lang.psi.impl.*; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrExpressionImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames; @@ -96,7 +93,7 @@ public class GrListOrMapImpl extends GrExpressionImpl implements GrListOrMap { } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPES_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, TYPES_CALCULATOR); } public boolean isMap() { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java index 0c60f342dd1c..1a4c67c46943 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java @@ -39,10 +39,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameterList; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; -import org.jetbrains.plugins.groovy.lang.psi.impl.GrClosureType; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiElementImpl; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; -import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; +import org.jetbrains.plugins.groovy.lang.psi.impl.*; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.params.GrParameterListImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.ClosureSyntheticParameter; @@ -265,7 +262,7 @@ public class GrClosableBlockImpl extends GrBlockImpl implements GrClosableBlock @Nullable public PsiType getReturnType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, ourTypesCalculator); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, ourTypesCalculator); } @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrAssignmentExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrAssignmentExpressionImpl.java index 83fdf74493d8..054a85a32dd5 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrAssignmentExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrAssignmentExpressionImpl.java @@ -37,7 +37,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpres import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrIndexProperty; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.TypeInferenceHelper; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; @@ -101,7 +100,7 @@ public class GrAssignmentExpressionImpl extends GrExpressionImpl implements GrAs } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPE_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, TYPE_CALCULATOR); } public boolean processDeclarations(@NotNull PsiScopeProcessor processor, @NotNull ResolveState state, PsiElement lastParent, @NotNull PsiElement place) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrBinaryExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrBinaryExpressionImpl.java index 9cd7ef9059a0..5c881dc8ddab 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrBinaryExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrBinaryExpressionImpl.java @@ -33,7 +33,6 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrBinaryExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.TypeInferenceHelper; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; @@ -121,7 +120,7 @@ public abstract class GrBinaryExpressionImpl extends GrExpressionImpl implements @Override public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPE_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, TYPE_CALCULATOR); } @Nullable diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrConditionalExprImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrConditionalExprImpl.java index 2fda11a92270..cfa4a2b973a0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrConditionalExprImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrConditionalExprImpl.java @@ -28,6 +28,7 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrConditionalExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; +import org.jetbrains.plugins.groovy.lang.psi.impl.TypeInferenceHelper; /** * @author ilyas @@ -88,7 +89,7 @@ public class GrConditionalExprImpl extends GrExpressionImpl implements GrConditi } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPE_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, TYPE_CALCULATOR); } public void accept(GroovyElementVisitor visitor) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrMethodCallImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrMethodCallImpl.java index 4498b8363914..d11295333598 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrMethodCallImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrMethodCallImpl.java @@ -27,6 +27,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpres import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; +import org.jetbrains.plugins.groovy.lang.psi.impl.TypeInferenceHelper; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.GrCallExpressionImpl; import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrCallExpressionTypeCalculator; @@ -100,7 +101,7 @@ public abstract class GrMethodCallImpl extends GrCallExpressionImpl implements G } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, METHOD_CALL_TYPES_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, METHOD_CALL_TYPES_CALCULATOR); } @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrNewExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrNewExpressionImpl.java index 6f7074c23276..12ba82d3adaa 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrNewExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrNewExpressionImpl.java @@ -39,10 +39,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrBuiltInTypeElement; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeArgumentList; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; -import org.jetbrains.plugins.groovy.lang.psi.impl.GrClassReferenceType; -import org.jetbrains.plugins.groovy.lang.psi.impl.GrMapType; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; -import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; +import org.jetbrains.plugins.groovy.lang.psi.impl.*; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.GrCallExpressionImpl; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; @@ -96,7 +93,7 @@ public class GrNewExpressionImpl extends GrCallExpressionImpl implements GrNewEx } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, MY_TYPE_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, MY_TYPE_CALCULATOR); } public GrNamedArgument addNamedArgument(final GrNamedArgument namedArgument) throws IncorrectOperationException { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java index 1caa4f92e9f5..291c45f13750 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java @@ -593,13 +593,14 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl TYPE_CALCULATOR = new NullableFunction() { - @Override - public PsiType fun(GrLiteralImpl grLiteral) { - IElementType elemType = getLiteralType(grLiteral); - return TypesUtil.getPsiType(grLiteral, elemType); - } - }; - public GrLiteralImpl(@NotNull ASTNode node) { super(node); } @@ -63,8 +52,8 @@ public class GrLiteralImpl extends GrAbstractLiteral implements GrLiteral, PsiLa } public PsiType getType() { - if (getLiteralType(this) == kNULL) return PsiType.NULL; - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPE_CALCULATOR); + IElementType elemType = getLiteralType(this); + return elemType == kNULL ? PsiType.NULL : TypesUtil.getPsiType(this, elemType); } public void accept(GroovyElementVisitor visitor) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/literals/GrStringImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/literals/GrStringImpl.java index 828f69368921..de3e3d624b24 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/literals/GrStringImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/literals/GrStringImpl.java @@ -17,36 +17,24 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals; import com.intellij.lang.ASTNode; -import com.intellij.psi.CommonClassNames; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiType; -import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrString; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; import org.jetbrains.plugins.groovy.lang.psi.util.GrStringUtil; -import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames; import java.util.List; +import static com.intellij.psi.CommonClassNames.JAVA_LANG_STRING; +import static org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames.GROOVY_LANG_GSTRING; + /** * @author ilyas */ public class GrStringImpl extends GrAbstractLiteral implements GrString { - private static final Function TYPE_CALCULATOR = new Function() { - @Override - public PsiType fun(GrStringImpl grString) { - if (grString.findChildByClass(GrStringInjection.class) != null) { - return grString.getTypeByFQName(GroovyCommonClassNames.GROOVY_LANG_GSTRING); - } - else { - return grString.getTypeByFQName(CommonClassNames.JAVA_LANG_STRING); - } - } - }; public GrStringImpl(@NotNull ASTNode node) { super(node); @@ -57,7 +45,7 @@ public class GrStringImpl extends GrAbstractLiteral implements GrString { } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPE_CALCULATOR); + return getTypeByFQName(findChildByClass(GrStringInjection.class) != null ? GROOVY_LANG_GSTRING : JAVA_LANG_STRING); } public boolean isPlainString() { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrIndexPropertyImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrIndexPropertyImpl.java index 66f345a208fd..6a52625e76fc 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrIndexPropertyImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrIndexPropertyImpl.java @@ -246,7 +246,7 @@ public class GrIndexPropertyImpl extends GrExpressionImpl implements GrIndexProp } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPE_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, TYPE_CALCULATOR); } @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrBuiltinTypeClassExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrBuiltinTypeClassExpressionImpl.java index cd74c8f17243..5bd4951b668e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrBuiltinTypeClassExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrBuiltinTypeClassExpressionImpl.java @@ -25,6 +25,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrBuiltinTypeClassExpression; import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; +import org.jetbrains.plugins.groovy.lang.psi.impl.TypeInferenceHelper; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrExpressionImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; @@ -49,7 +50,7 @@ public class GrBuiltinTypeClassExpressionImpl extends GrExpressionImpl implement } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPES_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, TYPES_CALCULATOR); } @NotNull diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrInstanceofExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrInstanceofExpressionImpl.java index 4956fde808ea..217b660c6974 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrInstanceofExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrInstanceofExpressionImpl.java @@ -19,14 +19,12 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.types; import com.intellij.lang.ASTNode; import com.intellij.psi.CommonClassNames; import com.intellij.psi.PsiType; -import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrInstanceOfExpression; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrExpressionImpl; /** @@ -34,13 +32,6 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrExpre */ public class GrInstanceofExpressionImpl extends GrExpressionImpl implements GrInstanceOfExpression { - private static final Function TYPE_CALCULATOR = new Function() { - @Override - public PsiType fun(GrInstanceofExpressionImpl expression) { - return expression.getTypeByFQName(CommonClassNames.JAVA_LANG_BOOLEAN); - } - }; - public GrInstanceofExpressionImpl(@NotNull ASTNode node) { super(node); } @@ -54,7 +45,7 @@ public class GrInstanceofExpressionImpl extends GrExpressionImpl implements GrIn } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPE_CALCULATOR); + return getTypeByFQName(CommonClassNames.JAVA_LANG_BOOLEAN); } @Nullable diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrSafeCastExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrSafeCastExpressionImpl.java index a5d03c410ebb..59f4495cf089 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrSafeCastExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/types/GrSafeCastExpressionImpl.java @@ -33,7 +33,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrSafeCastExpression; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.TypeInferenceHelper; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrExpressionImpl; @@ -116,7 +115,7 @@ public class GrSafeCastExpressionImpl extends GrExpressionImpl implements GrSafe } public PsiType getType() { - return GroovyPsiManager.getInstance(getProject()).getType(this, TYPE_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, TYPE_CALCULATOR); } @Nullable diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java index 704a375d308f..7d4df6eca819 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java @@ -63,10 +63,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameter; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameterList; -import org.jetbrains.plugins.groovy.lang.psi.impl.GrStubElementBase; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyFileImpl; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager; -import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; +import org.jetbrains.plugins.groovy.lang.psi.impl.*; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrReflectedMethodImpl; import org.jetbrains.plugins.groovy.lang.psi.stubs.GrMethodStub; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; @@ -141,7 +138,7 @@ public abstract class GrMethodBaseImpl extends GrStubElementBase i //todo uncomment when EAP is on //LOG.assertTrue(!ApplicationManager.getApplication().isDispatchThread()); //this is a potentially long action } - return GroovyPsiManager.getInstance(getProject()).getType(this, ourTypesCalculator); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, ourTypesCalculator); } public boolean processDeclarations(@NotNull PsiScopeProcessor processor,