diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/parameterToEntry/ConvertParameterToMapEntryIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/parameterToEntry/ConvertParameterToMapEntryIntention.java index 5cdc8c88636e..3ce5f8148c7d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/parameterToEntry/ConvertParameterToMapEntryIntention.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/style/parameterToEntry/ConvertParameterToMapEntryIntention.java @@ -195,7 +195,7 @@ public class ConvertParameterToMapEntryIntention extends Intention { call instanceof GrCallExpression ? ((GrCallExpression)call).getClosureArguments() : GrClosableBlock.EMPTY_ARRAY; final GrClosureSignatureUtil.ArgInfo[] argInfos = - GrClosureSignatureUtil.mapParametersToArguments(signature, argumentList, closureArguments, occurrence.getManager(), owner.getResolveScope()); + GrClosureSignatureUtil.mapParametersToArguments(signature, argumentList, closureArguments, owner.getResolveScope()); if (argInfos == null) continue; final GrClosureSignatureUtil.ArgInfo argInfo = argInfos[index]; @@ -319,7 +319,7 @@ public class ConvertParameterToMapEntryIntention extends Intention { private static boolean firstOwnerParameterMustBeMap(final GrParametersOwner owner) { final GrParameter first = getFirstParameter(owner); final PsiType type = first.getTypeGroovy(); - final PsiClassType mapType = PsiUtil.createMapType(owner.getManager(), GlobalSearchScope.allScope(owner.getProject())); + final PsiClassType mapType = PsiUtil.createMapType(GlobalSearchScope.allScope(owner.getProject())); // First parameter may be used as map return type == null || type.isConvertibleFrom(mapType); } 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 bbe4dcca13db..d305f2b4f426 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 @@ -133,7 +133,8 @@ public class GrNewExpressionImpl extends GrCallExpressionImpl implements GrNewEx if (classResults.length == 0) return GroovyResolveResult.EMPTY_ARRAY; if (getNamedArguments().length > 0 && getArgumentList().getExpressionArguments().length == 0) { - GroovyResolveResult[] constructorResults = PsiUtil.getConstructorCandidates(ref, classResults, new PsiType[]{PsiUtil.createMapType(getManager(), getResolveScope())}); //one Map parameter, actually + GroovyResolveResult[] constructorResults = PsiUtil.getConstructorCandidates(ref, classResults, new PsiType[]{PsiUtil.createMapType( + getResolveScope())}); //one Map parameter, actually for (GroovyResolveResult result : constructorResults) { if (result.getElement() instanceof PsiMethod) { PsiMethod constructor = (PsiMethod)result.getElement(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java index 5cfa3f53b0ce..18af1761174f 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java @@ -301,10 +301,9 @@ public class GrClosureSignatureUtil { */ @Nullable public static ArgInfo[] mapParametersToArguments(@NotNull GrClosureSignature signature, - @NotNull GrArgumentList list, - PsiManager manager, - GlobalSearchScope scope) { - return mapParametersToArguments(signature, list, GrClosableBlock.EMPTY_ARRAY, manager, scope); + @NotNull GrArgumentList list, + GlobalSearchScope scope) { + return mapParametersToArguments(signature, list, GrClosableBlock.EMPTY_ARRAY, scope); } private static class InnerArg { @@ -319,10 +318,9 @@ public class GrClosureSignatureUtil { @Nullable public static ArgInfo[] mapParametersToArguments(@NotNull GrClosureSignature signature, - @NotNull GrArgumentList list, - @NotNull GrClosableBlock[] closureArguments, - PsiManager manager, - GlobalSearchScope scope) { + @NotNull GrArgumentList list, + @NotNull GrClosableBlock[] closureArguments, + GlobalSearchScope scope) { final GrNamedArgument[] namedArgs = list.getNamedArguments(); boolean hasNamedArgs = namedArgs.length > 0; GrClosureParameter[] params = signature.getParameters(); @@ -333,7 +331,7 @@ public class GrClosureSignatureUtil { if (params.length == 0) return null; PsiType type = params[0].getType(); if (InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_MAP)) { - innerArgs.add(new InnerArg(PsiUtil.createMapType(manager, scope), namedArgs)); + innerArgs.add(new InnerArg(PsiUtil.createMapType(scope), namedArgs)); } else { return null; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java index 12fd74c64b7a..6c88ca8eaa96 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java @@ -156,7 +156,7 @@ public class PsiUtil { return GrClosureSignatureUtil.isSignatureApplicable(signature, argumentTypes, context); } - public static PsiClassType createMapType(PsiManager manager, GlobalSearchScope scope) { + public static PsiClassType createMapType(GlobalSearchScope scope) { return new GrMapType(scope); } @@ -181,7 +181,7 @@ public class PsiUtil { GrNamedArgument[] namedArgs = call.getNamedArguments(); if (namedArgs.length > 0) { - result.add(createMapType(place.getManager(), place.getResolveScope())); + result.add(createMapType(place.getResolveScope())); } GrExpression[] expressions = call.getExpressionArguments(); @@ -212,7 +212,7 @@ public class PsiUtil { GrNamedArgument[] namedArgs = argList.getNamedArguments(); if (namedArgs.length > 0) { - result.add(createMapType(place.getManager(), place.getResolveScope())); + result.add(createMapType(place.getResolveScope())); } GrExpression[] expressions = argList.getExpressionArguments(); @@ -234,7 +234,7 @@ public class PsiUtil { GrNamedArgument[] namedArgs = argList != null ? argList.getNamedArguments() : GrNamedArgument.EMPTY_ARRAY; final ArrayList result = new ArrayList(); if (namedArgs.length > 0) { - result.add(createMapType(place.getManager(), place.getResolveScope())); + result.add(createMapType(place.getResolveScope())); } for (GrExpression arg : args) { PsiType argType = arg.getType(); @@ -252,7 +252,7 @@ public class PsiUtil { List result = new ArrayList(); if (argList.getNamedArguments().length > 0) { - result.add(createMapType(place.getManager(), place.getResolveScope())); + result.add(createMapType(place.getResolveScope())); } GrExpression[] expressions = argList.getExpressionArguments(); @@ -395,16 +395,33 @@ public class PsiUtil { if (owner instanceof PsiClass) { return true; } + + //non-physical method, e.g. gdk + if (containingClass == null) { + return true; + } + + if (owner.hasModifierProperty(PsiModifier.STATIC)) { + return true; + } + //members from java.lang.Class can be invoked without ".class" - PsiClass javaLangClass = - JavaPsiFacade.getInstance(place.getProject()).findClass(CommonClassNames.JAVA_LANG_CLASS, place.getResolveScope()); - if (javaLangClass != null) { - if ((containingClass == null) || //default groovy method - InheritanceUtil.isInheritorOrSelf(javaLangClass, containingClass, true)) { + final String qname = containingClass.getQualifiedName(); + if (qname != null && qname.startsWith("java.")) { + if (CommonClassNames.JAVA_LANG_OBJECT.equals(qname) || CommonClassNames.JAVA_LANG_CLASS.equals(qname)) { return true; } + + if (containingClass.isInterface()) { + PsiClass javaLangClass = + JavaPsiFacade.getInstance(place.getProject()).findClass(CommonClassNames.JAVA_LANG_CLASS, place.getResolveScope()); + if (javaLangClass != null && javaLangClass.isInheritor(containingClass, true)) { + return true; + } + } } - return owner.hasModifierProperty(PsiModifier.STATIC); + + return false; } } else if (qualifier instanceof GrThisReferenceExpression && ((GrThisReferenceExpression)qualifier).getQualifier() == null) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrMethodCallUsageInfo.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrMethodCallUsageInfo.java index f57683581fc2..787f7e3e3dfe 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrMethodCallUsageInfo.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrMethodCallUsageInfo.java @@ -87,7 +87,7 @@ public class GrMethodCallUsageInfo extends UsageInfo implements PossiblyIncorrec } else { myMapToArguments = - GrClosureSignatureUtil.mapParametersToArguments(signature, list, element.getManager(), GlobalSearchScope.allScope(getProject())); + GrClosureSignatureUtil.mapParametersToArguments(signature, list, GlobalSearchScope.allScope(getProject())); } }