From f284e22971548a2ca36f03398449f1ec788f5871 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 20 Feb 2013 18:46:04 +0100 Subject: [PATCH] lambda: no need to store params to compute anymore - return values are checked not to depend on params inference anyway --- .../src/com/intellij/psi/LambdaUtil.java | 41 +++++++------------ .../psi/infos/MethodCandidateInfo.java | 4 +- .../source/resolve/PsiResolveHelperImpl.java | 12 ++---- 3 files changed, 19 insertions(+), 38 deletions(-) diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java index a096a9e921cd..2aabebcffc31 100644 --- a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java @@ -37,7 +37,6 @@ import java.util.*; */ public class LambdaUtil { private static final Logger LOG = Logger.getInstance("#" + LambdaUtil.class.getName()); - public static ThreadLocal> ourParams = new ThreadLocal>(); @NonNls public static final String JAVA_LANG_FUNCTIONAL_INTERFACE = "java.lang.FunctionalInterface"; @Nullable @@ -525,34 +524,22 @@ public class LambdaUtil { final PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(param, PsiLambdaExpression.class); if (lambdaExpression != null) { - Set currentStack = ourParams.get(); - if (currentStack == null) { - currentStack = new HashSet(); - ourParams.set(currentStack); - } - final PsiParameterList parameterList = lambdaExpression.getParameterList(); - final boolean add = currentStack.add(parameterList); - try { - PsiType type = getFunctionalInterfaceType(lambdaExpression, true, parameterIndex); - if (type == null) { - type = getFunctionalInterfaceType(lambdaExpression, false); - } - if (type instanceof PsiIntersectionType) { - final PsiType[] conjuncts = ((PsiIntersectionType)type).getConjuncts(); - for (PsiType conjunct : conjuncts) { - final PsiType lambdaParameterFromType = getLambdaParameterFromType(parameterIndex, lambdaExpression, conjunct); - if (lambdaParameterFromType != null) return lambdaParameterFromType; - } - } else { - final PsiType lambdaParameterFromType = getLambdaParameterFromType(parameterIndex, lambdaExpression, type); - if (lambdaParameterFromType != null) { - return lambdaParameterFromType; - } - } + PsiType type = getFunctionalInterfaceType(lambdaExpression, true, parameterIndex); + if (type == null) { + type = getFunctionalInterfaceType(lambdaExpression, false); } - finally { - if (add) currentStack.remove(parameterList); + if (type instanceof PsiIntersectionType) { + final PsiType[] conjuncts = ((PsiIntersectionType)type).getConjuncts(); + for (PsiType conjunct : conjuncts) { + final PsiType lambdaParameterFromType = getLambdaParameterFromType(parameterIndex, lambdaExpression, conjunct); + if (lambdaParameterFromType != null) return lambdaParameterFromType; + } + } else { + final PsiType lambdaParameterFromType = getLambdaParameterFromType(parameterIndex, lambdaExpression, type); + if (lambdaParameterFromType != null) { + return lambdaParameterFromType; + } } } } diff --git a/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java b/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java index c8d193f8e4e1..cac0f3bc2c89 100644 --- a/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java +++ b/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java @@ -29,7 +29,6 @@ import org.intellij.lang.annotations.MagicConstant; import org.jetbrains.annotations.Nullable; import java.util.Map; -import java.util.Set; /** * @author ik, dsl @@ -103,8 +102,7 @@ public class MethodCandidateInfo extends CandidateInfo{ final PsiSubstitutor inferredSubstitutor = inferTypeArguments(DefaultParameterTypeInferencePolicy.INSTANCE); - final Set lists = LambdaUtil.ourParams.get(); - if (lists != null && !lists.isEmpty() || !stackStamp.mayCacheNow()) { + if (!stackStamp.mayCacheNow()) { return inferredSubstitutor; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java index abbd7264958d..e66d675decdb 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java @@ -18,7 +18,10 @@ package com.intellij.psi.impl.source.resolve; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.projectRoots.JavaSdkVersion; import com.intellij.openapi.projectRoots.JavaVersionService; -import com.intellij.openapi.util.*; +import com.intellij.openapi.util.Computable; +import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.RecursionGuard; import com.intellij.openapi.util.registry.Registry; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; @@ -40,7 +43,6 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; -import java.util.Set; public class PsiResolveHelperImpl implements PsiResolveHelper { private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.resolve.PsiResolveHelperImpl"); @@ -719,12 +721,6 @@ public class PsiResolveHelperImpl implements PsiResolveHelper { final Pair constraintFromFormalParams = inferConstraintFromLambdaFormalParams(typeParam, subst, method, lambdaExpression); if (constraintFromFormalParams != null) return constraintFromFormalParams; - final Set lists = LambdaUtil.ourParams.get(); - if (lists != null && lists.contains(lambdaExpression.getParameterList()) && - ourGraphGuard.currentStack().isEmpty()){ - return null; - } - final PsiParameter[] methodParameters = method.getParameterList().getParameters(); if (methodParamsDependOn(typeParam, lambdaExpression, functionalInterfaceType, methodParameters, subst)) { return null;