suggest to increase language level to 14 for switch expressions on jdk 14 (IDEA-230871)

GitOrigin-RevId: 003686c3fbb16c27b9a880c89bdfeb9602a2467c
This commit is contained in:
Anna Kozlova
2020-01-30 21:01:35 +00:00
committed by intellij-monorepo-bot
parent 43ef17b8b8
commit 705d3862f0
@@ -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;
}