From 56c43c7b9c2dfe11ada4e2c0e76cbcc2fdb612ea Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Tue, 16 Nov 2010 14:29:16 +0300 Subject: [PATCH] EA-23503 --- .../gpp/GppClosureParameterTypeProvider.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/gpp/GppClosureParameterTypeProvider.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/gpp/GppClosureParameterTypeProvider.java index 2e0a8e35d979..584c88117360 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/gpp/GppClosureParameterTypeProvider.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/gpp/GppClosureParameterTypeProvider.java @@ -49,20 +49,19 @@ public class GppClosureParameterTypeProvider extends AbstractClosureParameterEnh assert argIndex >= 0; if (listType instanceof GrTupleType) { for (PsiType type : GroovyExpectedTypesProvider.getDefaultExpectedTypes(list)) { - if (type instanceof PsiClassType) { - for (GroovyResolveResult resolveResult : PsiUtil - .getConstructorCandidates((PsiClassType)type, ((GrTupleType)listType).getComponentTypes(), closure)) { - final PsiElement method = resolveResult.getElement(); - if (method instanceof PsiMethod && ((PsiMethod)method).isConstructor()) { - final PsiType toCastTo = - resolveResult.getSubstitutor().substitute(((PsiMethod)method).getParameterList().getParameters()[argIndex].getType()); - final PsiType suggestion = getSingleMethodParameterType(toCastTo, index, closure); - if (suggestion != null) { - return suggestion; - } - } + if (!(type instanceof PsiClassType)) continue; - } + final GroovyResolveResult[] candidates = PsiUtil.getConstructorCandidates((PsiClassType)type,((GrTupleType)listType).getComponentTypes(),closure); + for (GroovyResolveResult resolveResult : candidates) { + final PsiElement method = resolveResult.getElement(); + if (!(method instanceof PsiMethod) || !((PsiMethod)method).isConstructor()) continue; + + final PsiParameter[] parameters = ((PsiMethod)method).getParameterList().getParameters(); + if (parameters.length <= argIndex) continue; + + final PsiType toCastTo = resolveResult.getSubstitutor().substitute(parameters[argIndex].getType()); + final PsiType suggestion = getSingleMethodParameterType(toCastTo, index, closure); + if (suggestion != null) return suggestion; } } }