From 705d3862f05d1c15a1fa80e52c681ada5b4db656 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 30 Jan 2020 21:47:59 +0100 Subject: [PATCH] suggest to increase language level to 14 for switch expressions on jdk 14 (IDEA-230871) GitOrigin-RevId: 003686c3fbb16c27b9a880c89bdfeb9602a2467c --- .../daemon/impl/analysis/HighlightUtil.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) 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 48afe4c8a7b1..fcba5acfcbf5 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 @@ -21,6 +21,7 @@ import com.intellij.openapi.module.EffectiveLanguageLevelUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.projectRoots.JavaSdkVersion; +import com.intellij.openapi.projectRoots.JavaSdkVersionUtil; import com.intellij.openapi.roots.impl.FilePropertyPusher; import com.intellij.openapi.roots.impl.JavaLanguageLevelPusher; import com.intellij.openapi.ui.DialogWrapper; @@ -3228,12 +3229,22 @@ public class HighlightUtil extends HighlightUtilBase { boolean isSufficient(LanguageLevel useSiteLevel) { return useSiteLevel.isAtLeast(LanguageLevel.JDK_13_PREVIEW);//enabled in jdk 14 as standard } + + @Override + LanguageLevel getStandardLevel() { + return LanguageLevel.JDK_14; + } }, SWITCH_EXPRESSION(LanguageLevel.JDK_13_PREVIEW, "feature.switch.expressions") { @Override boolean isSufficient(LanguageLevel useSiteLevel) { return useSiteLevel.isAtLeast(LanguageLevel.JDK_13_PREVIEW);//enabled in jdk 14 as standard } + + @Override + LanguageLevel getStandardLevel() { + return LanguageLevel.JDK_14; + } }, TEXT_BLOCKS(LanguageLevel.JDK_13_PREVIEW, "feature.text.blocks"), RECORDS(LanguageLevel.JDK_14_PREVIEW, "feature.records"), @@ -3259,6 +3270,24 @@ public class HighlightUtil extends HighlightUtilBase { boolean isSufficient(LanguageLevel useSiteLevel) { return useSiteLevel.isAtLeast(level) && (!level.isPreview() || useSiteLevel.isPreview()); } + + /** + * Override if feature was preview and then accepted as standard + */ + LanguageLevel getStandardLevel() { + return level.isPreview() ? null : level; + } + } + + private static LanguageLevel getApplicableLevel(PsiFile file, Feature feature) { + LanguageLevel standardLevel = feature.getStandardLevel(); + if (standardLevel != null && feature.level.isPreview()) { + JavaSdkVersion sdkVersion = JavaSdkVersionUtil.getJavaSdkVersion(file); + if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.fromLanguageLevel(standardLevel))) { + return standardLevel; + } + } + return feature.level; } static HighlightInfo checkFeature(@NotNull PsiElement element, @@ -3268,7 +3297,7 @@ public class HighlightUtil extends HighlightUtilBase { if (file.getManager().isInProject(file) && !feature.isSufficient(level)) { String message = getUnsupportedFeatureMessage(element, feature, level, file); 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.createIncreaseLanguageLevelFix(getApplicableLevel(file, feature))); QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createShowModulePropertiesFix(element)); return info; }