From b51d40f717070727fd1301c92d633b24c2cf4334 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 6 Oct 2014 13:00:30 +0200 Subject: [PATCH] beware of null in IDEA-130746 Incorrect cast after completion in evaluate dialog --- .../completion/JavaCompletionUtil.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 93a75f3c9c47..17cb8724dc56 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -448,12 +448,15 @@ public class JavaCompletionUtil { PsiSubstitutor plainSub = plainResult.getSubstitutor(); PsiSubstitutor castSub = TypeConversionUtil.getSuperClassSubstitutor(plainClass, (PsiClassType)castType); PsiType returnType = method.getReturnType(); - if (method.getSignature(plainSub).equals(method.getSignature(castSub)) && - returnType != null && - toRaw(castSub.substitute(returnType)).isAssignableFrom(toRaw(plainSub.substitute(returnType))) && - processor.isAccessible(plainClass.findMethodBySignature(method, true)) - ) { - return item; + if (method.getSignature(plainSub).equals(method.getSignature(castSub))) { + PsiType typeAfterCast = toRaw(castSub.substitute(returnType)); + PsiType typeDeclared = toRaw(plainSub.substitute(returnType)); + if (typeAfterCast != null && typeDeclared != null && + typeAfterCast.isAssignableFrom(typeDeclared) && + processor.isAccessible(plainClass.findMethodBySignature(method, true)) + ) { + return item; + } } } } @@ -495,7 +498,8 @@ public class JavaCompletionUtil { }); } - private static PsiType toRaw(@NotNull PsiType type) { + @Nullable + private static PsiType toRaw(@Nullable PsiType type) { return type instanceof PsiClassType ? ((PsiClassType)type).rawType() : type; }