From 204b167104fbe5b2e35702ebced444497be8cd01 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 30 Oct 2018 16:49:30 +0300 Subject: [PATCH] [groovy] fix warnings in GrClosureSignatureUtil --- .../type/GroovyTypeCheckVisitorHelper.java | 2 +- .../signatures/GrClosureSignatureUtil.java | 48 +++++++++++-------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/GroovyTypeCheckVisitorHelper.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/GroovyTypeCheckVisitorHelper.java index 672c32239c04..6b446d9b5d98 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/GroovyTypeCheckVisitorHelper.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/type/GroovyTypeCheckVisitorHelper.java @@ -118,7 +118,7 @@ public class GroovyTypeCheckVisitorHelper { final List> allErrors = new ArrayList<>(); final List signatures = GrClosureSignatureUtil.generateSimpleSignatures(signature); for (GrClosureSignature closureSignature : signatures) { - final GrClosureSignatureUtil.MapResultWithError map = GrClosureSignatureUtil.mapSimpleSignatureWithErrors( + final GrClosureSignatureUtil.MapResultWithError map = GrClosureSignatureUtil.mapSimpleSignatureWithErrors( closureSignature, argumentTypes, id, argumentList, 255 ); if (map != null) { diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/signatures/GrClosureSignatureUtil.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/signatures/GrClosureSignatureUtil.java index dd402318dff0..4cc1c0c1e352 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/signatures/GrClosureSignatureUtil.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/signatures/GrClosureSignatureUtil.java @@ -17,6 +17,7 @@ import com.intellij.util.Function; import com.intellij.util.FunctionUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; @@ -380,6 +381,7 @@ public class GrClosureSignatureUtil { boolean partial) { if (args.length > params.length && !partial) return null; + //noinspection unchecked ArgInfo[] map = new ArgInfo[params.length]; int notOptional = params.length - optional; int optionalArgs = args.length - notOptional; @@ -398,11 +400,12 @@ public class GrClosureSignatureUtil { map[cur] = new ArgInfo<>(args[i], type); } for (int i = 0; i < map.length; i++) { - if (map[i] == null) map[i] = new ArgInfo<>(Collections.emptyList(), false, null); + if (map[i] == null) map[i] = new ArgInfo<>(Collections.emptyList(), false, null); } return map; } + @Contract("null, _, _ -> true; _, null, _ -> true") private static boolean isAssignableByConversion(@Nullable PsiType paramType, @Nullable PsiType argType, @NotNull PsiElement context) { if (argType == null || paramType == null) { return true; @@ -474,7 +477,10 @@ public class GrClosureSignatureUtil { types[i] = typeComputer.fun(args[i]); } paramLength = params.length - 1; - vararg = ((PsiArrayType)params[paramLength].getType()).getComponentType(); + final PsiType lastParamType = params[paramLength].getType(); + assert lastParamType instanceof PsiArrayType; + vararg = ((PsiArrayType)lastParamType).getComponentType(); + //noinspection unchecked map = new ArgInfo[params.length]; } @@ -484,7 +490,7 @@ public class GrClosureSignatureUtil { for (int i = 0; i < paramLength; i++) { if (!params[i].isOptional()) notOptionals++; } - if (isApplicableInternal(0, 0, false, notOptionals)) { + if (isApplicableInternal(0, 0, notOptionals)) { for (int i = 0; i < map.length; i++) { if (map[i] == null) map[i] = new ArgInfo<>(false, null); } @@ -495,7 +501,8 @@ public class GrClosureSignatureUtil { } } - private boolean isApplicableInternal(int curParam, int curArg, boolean skipOptionals, int notOptional) { + private boolean isApplicableInternal(int curParam, int curArg, int notOptional) { + boolean skipOptionals = false; int startParam = curParam; if (notOptional > args.length - curArg) return false; if (notOptional == args.length - curArg) skipOptionals = true; @@ -509,7 +516,7 @@ public class GrClosureSignatureUtil { if (params[curParam].isOptional()) { if (isAssignableByConversion(params[curParam].getType(), types[curArg], context) && - isApplicableInternal(curParam + 1, curArg + 1, false, notOptional)) { + isApplicableInternal(curParam + 1, curArg + 1, notOptional)) { map[curParam] = new ArgInfo<>(args[curArg], types[curArg]); return true; } @@ -703,6 +710,7 @@ public class GrClosureSignatureUtil { final ArgInfo[] innerMap = mapParametersToArguments(signature, innerArgs.toArray(new InnerArg[0]), o -> o.type, context, partial); if (innerMap == null) return null; + //noinspection unchecked ArgInfo[] map = new ArgInfo[innerMap.length]; int i = 0; if (hasNamedArgs) { @@ -886,7 +894,7 @@ public class GrClosureSignatureUtil { } - public static class MapResultWithError { + public static class MapResultWithError { private final List> errorsAndExpectedType; public MapResultWithError(List> errorsAndExpectedType) { @@ -899,11 +907,11 @@ public class GrClosureSignatureUtil { } @Nullable - public static MapResultWithError mapSimpleSignatureWithErrors(@NotNull GrClosureSignature signature, - @NotNull Arg[] args, - @NotNull Function typeComputer, - @NotNull GroovyPsiElement context, - int maxErrorCount) { + public static MapResultWithError mapSimpleSignatureWithErrors(@NotNull GrClosureSignature signature, + @NotNull Arg[] args, + @NotNull Function typeComputer, + @NotNull GroovyPsiElement context, + int maxErrorCount) { final GrClosureParameter[] params = signature.getParameters(); if (args.length < params.length) return null; @@ -914,12 +922,14 @@ public class GrClosureSignatureUtil { for (int i = 0; i < params.length; i++) { final PsiType type = typeComputer.fun(args[i]); - if (isAssignableByConversion(params[i].getType(), type, context)) continue; - if (params[i].getType() instanceof PsiArrayType && i == params.length - 1) { + final GrClosureParameter parameter = params[i]; + final PsiType parameterType = parameter.getType(); + if (isAssignableByConversion(parameterType, type, context)) continue; + if (parameterType instanceof PsiArrayType && i == params.length - 1) { if (i + 1 == args.length) { - errors.add(new Pair<>(i, params[i].getType())); + errors.add(new Pair<>(i, parameterType)); } - final PsiType ellipsis = ((PsiArrayType)params[i].getType()).getComponentType(); + final PsiType ellipsis = ((PsiArrayType)parameterType).getComponentType(); for (int j = i; j < args.length; j++) { if (!isAssignableByConversion(ellipsis, typeComputer.fun(args[j]), context)) { errorCount++; @@ -931,10 +941,10 @@ public class GrClosureSignatureUtil { else { errorCount++; if (errorCount > maxErrorCount) return null; - errors.add(new Pair<>(i, params[i].getType())); + errors.add(new Pair<>(i, parameterType)); } } - return new MapResultWithError<>(errors); + return new MapResultWithError(errors); } public static List generateSimpleSignatures(@NotNull GrSignature signature) { @@ -960,8 +970,8 @@ public class GrClosureSignatureUtil { }); } - final int pcount = signature.isVarargs() ? signature.getParameterCount() - 2 : signature.getParameterCount() - 1; - for (int i = pcount; i >= 0; i--) { + final int pCount = signature.isVarargs() ? signature.getParameterCount() - 2 : signature.getParameterCount() - 1; + for (int i = pCount; i >= 0; i--) { if (original[i].isOptional()) { result.add(new GrImmediateClosureSignatureImpl(parameters.toArray(GrClosureParameter.EMPTY_ARRAY), signature.getReturnType(), signature.isVarargs(), false)); parameters.remove(i);