From bf0d218fc6d446f260439667f85d04705cff65b2 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 26 Oct 2016 17:45:21 +0200 Subject: [PATCH] pass explanations from language level pushers for more places (IDEA-163152) --- .../impl/analysis/HighlightMethodUtil.java | 12 ++++-- .../daemon/impl/analysis/HighlightUtil.java | 41 +++++++++++-------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java index c7d1b15bd4cf..8a92a32b045e 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java @@ -360,9 +360,10 @@ public class HighlightMethodUtil { TextRange fixRange = getFixRange(methodCall); highlightInfo = HighlightUtil.checkUnhandledExceptions(methodCall, fixRange); if (highlightInfo == null) { - final String invalidCallMessage = + String invalidCallMessage = LambdaUtil.getInvalidQualifier4StaticInterfaceMethodMessage((PsiMethod)resolved, methodCall.getMethodExpression(), resolveResult.getCurrentFileResolveScope(), languageLevel); if (invalidCallMessage != null) { + invalidCallMessage = HighlightUtil.extendUnsupportedLanguageLevelDescription(invalidCallMessage, methodCall, languageLevel, methodCall.getContainingFile(), LanguageLevel.JDK_1_8); highlightInfo = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).descriptionAndTooltip(invalidCallMessage).range(fixRange).create(); if (!languageLevel.isAtLeast(LanguageLevel.JDK_1_8)) { QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createIncreaseLanguageLevelFix(LanguageLevel.JDK_1_8)); @@ -589,9 +590,12 @@ public class HighlightMethodUtil { ? LambdaUtil.getInvalidQualifier4StaticInterfaceMethodMessage((PsiMethod)element, referenceToMethod, resolveResult.getCurrentFileResolveScope(), languageLevel) : null; - description = staticInterfaceMethodMessage != null - ? staticInterfaceMethodMessage - : HighlightUtil.buildProblemWithStaticDescription(element); + if (staticInterfaceMethodMessage != null) { + description = HighlightUtil.extendUnsupportedLanguageLevelDescription(staticInterfaceMethodMessage, methodCall, languageLevel, referenceToMethod.getContainingFile(), LanguageLevel.JDK_1_8); + } + else { + description = HighlightUtil.buildProblemWithStaticDescription(element); + } elementToHighlight = referenceToMethod.getReferenceNameElement(); } else { diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 3b9e2ab58312..dd32e221fa18 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -358,9 +358,10 @@ public class HighlightUtil extends HighlightUtilBase { } } } else { + String description = extendUnsupportedLanguageLevelDescription("Intersection types in cast are not supported at this language level", expression, languageLevel, expression.getContainingFile(), LanguageLevel.JDK_1_8); return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR) .range(expression) - .descriptionAndTooltip("Intersection types in cast are not supported at this language level").create(); + .descriptionAndTooltip(description).create(); } } return null; @@ -3000,21 +3001,7 @@ public class HighlightUtil extends HighlightUtilBase { if (file.getManager().isInProject(file) && !level.isAtLeast(feature.level)) { String message = JavaErrorMessages.message("insufficient.language.level", JavaErrorMessages.message(feature.key)); - Module module = ModuleUtilCore.findModuleForPsiElement(element); - if (module != null) { - LanguageLevel moduleLanguageLevel = EffectiveLanguageLevelUtil.getEffectiveLanguageLevel(module); - if (moduleLanguageLevel.isAtLeast(feature.level)) { - for (FilePropertyPusher pusher : FilePropertyPusher.EP_NAME.getExtensions()) { - if (pusher instanceof JavaLanguageLevelPusher) { - String newMessage = ((JavaLanguageLevelPusher)pusher).getInconsistencyLanguageLevelMessage(message, element, level, file); - if (newMessage != null) { - message = newMessage; - break; - } - } - } - } - } + message = extendUnsupportedLanguageLevelDescription(message, element, level, file, feature.level); HighlightInfo info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(element).descriptionAndTooltip(message).create(); QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createIncreaseLanguageLevelFix(feature.level)); QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createShowModulePropertiesFix(element)); @@ -3023,4 +3010,26 @@ public class HighlightUtil extends HighlightUtilBase { return null; } + + static String extendUnsupportedLanguageLevelDescription(@NotNull String message, + @NotNull PsiElement element, + @NotNull LanguageLevel fileLanguageLevel, + @NotNull PsiFile file, + @NotNull LanguageLevel featureLevel) { + Module module = ModuleUtilCore.findModuleForPsiElement(element); + if (module != null) { + LanguageLevel moduleLanguageLevel = EffectiveLanguageLevelUtil.getEffectiveLanguageLevel(module); + if (moduleLanguageLevel.isAtLeast(featureLevel)) { + for (FilePropertyPusher pusher : FilePropertyPusher.EP_NAME.getExtensions()) { + if (pusher instanceof JavaLanguageLevelPusher) { + String newMessage = ((JavaLanguageLevelPusher)pusher).getInconsistencyLanguageLevelMessage(message, element, fileLanguageLevel, file); + if (newMessage != null) { + return newMessage; + } + } + } + } + } + return message; + } } \ No newline at end of file