mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
java sealed types: increase language level (IDEA-243474)
ensure records can be used with java 15 as well GitOrigin-RevId: 5716dddb35ad9b2349e6558460897d650740fe1c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
584d51bcac
commit
9dd5c364a6
@@ -3228,10 +3228,16 @@ public class HighlightUtil {
|
||||
@NotNull
|
||||
private static LanguageLevel getApplicableLevel(@NotNull PsiFile file, @NotNull HighlightingFeature feature) {
|
||||
LanguageLevel standardLevel = feature.getStandardLevel();
|
||||
if (standardLevel != null && feature.level.isPreview()) {
|
||||
if (feature.level.isPreview()) {
|
||||
JavaSdkVersion sdkVersion = JavaSdkVersionUtil.getJavaSdkVersion(file);
|
||||
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.fromLanguageLevel(standardLevel))) {
|
||||
return standardLevel;
|
||||
if (sdkVersion != null) {
|
||||
if (standardLevel != null && sdkVersion.isAtLeast(JavaSdkVersion.fromLanguageLevel(standardLevel))) {
|
||||
return standardLevel;
|
||||
}
|
||||
LanguageLevel previewLevel = sdkVersion.getMaxLanguageLevel().getPreviewLevel();
|
||||
if (previewLevel != null) {
|
||||
return previewLevel;
|
||||
}
|
||||
}
|
||||
}
|
||||
return feature.level;
|
||||
|
||||
@@ -30,9 +30,22 @@ public class JavaErrorQuickFixProvider implements ErrorQuickFixProvider {
|
||||
if (parent instanceof PsiJavaFile && errorElement.getErrorDescription().equals(
|
||||
JavaPsiBundle.message("expected.class.or.interface"))) {
|
||||
PsiElement child = errorElement.getFirstChild();
|
||||
if (child instanceof PsiIdentifier && child.getText().equals(PsiKeyword.RECORD)) {
|
||||
HighlightUtil.registerIncreaseLanguageLevelFixes(
|
||||
new QuickFixActionRegistrarImpl(highlightInfo), errorElement, HighlightingFeature.RECORDS);
|
||||
if (child instanceof PsiIdentifier) {
|
||||
HighlightingFeature feature;
|
||||
switch (child.getText()) {
|
||||
case PsiKeyword.RECORD:
|
||||
feature = HighlightingFeature.RECORDS;
|
||||
break;
|
||||
case PsiKeyword.SEALED:
|
||||
feature = HighlightingFeature.SEALED_CLASSES;
|
||||
break;
|
||||
default:
|
||||
feature = null;
|
||||
break;
|
||||
}
|
||||
if (feature != null) {
|
||||
HighlightUtil.registerIncreaseLanguageLevelFixes(new QuickFixActionRegistrarImpl(highlightInfo), errorElement, feature);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ jdk.13.language.level.description=13 - No new language features
|
||||
jdk.14.language.level.description=14 - Switch expressions
|
||||
jdk.14.preview.language.level.description=14 (Preview) - Records, patterns, text blocks
|
||||
jdk.15.language.level.description=15 - Text blocks
|
||||
jdk.15.preview.language.level.description=15 (Preview) - Sealed types
|
||||
jdk.15.preview.language.level.description=15 (Preview) - Sealed types, records, patterns
|
||||
jdk.X.language.level.description=X - Experimental features
|
||||
|
||||
local.class.preposition=local
|
||||
|
||||
@@ -57,6 +57,19 @@ public enum LanguageLevel {
|
||||
return myPreview;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return corresponding preview level, or {@code null} if level has no paired preview level
|
||||
*/
|
||||
public LanguageLevel getPreviewLevel() {
|
||||
if (myPreview) return this;
|
||||
try {
|
||||
return valueOf(name() + "_PREVIEW");
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Nls
|
||||
public String getPresentableText() {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
se<caret>aled class C {}
|
||||
@@ -23,7 +23,7 @@ public class IncreaseLanguageLevelFixTest extends LightDaemonAnalyzerTestCase {
|
||||
|
||||
@Override
|
||||
protected Sdk getProjectJDK() {
|
||||
return IdeaTestUtil.getMockJdk(JavaVersion.compose(14));
|
||||
return IdeaTestUtil.getMockJdk(JavaVersion.compose(15));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -40,15 +40,19 @@ public class IncreaseLanguageLevelFixTest extends LightDaemonAnalyzerTestCase {
|
||||
}
|
||||
|
||||
public void testRecordTopLevel() {
|
||||
doTest(LanguageLevel.JDK_14_PREVIEW);
|
||||
doTest(LanguageLevel.JDK_15_PREVIEW);
|
||||
}
|
||||
|
||||
public void testRecordInClass() {
|
||||
doTest(LanguageLevel.JDK_14_PREVIEW);
|
||||
doTest(LanguageLevel.JDK_15_PREVIEW);
|
||||
}
|
||||
|
||||
public void testRecordInMethod() {
|
||||
doTest(LanguageLevel.JDK_14_PREVIEW);
|
||||
doTest(LanguageLevel.JDK_15_PREVIEW);
|
||||
}
|
||||
|
||||
public void testSealedClasses() {
|
||||
doTest(LanguageLevel.JDK_15_PREVIEW);
|
||||
}
|
||||
|
||||
private void doTest(LanguageLevel level) {
|
||||
|
||||
Reference in New Issue
Block a user