mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 22:17:05 +07:00
GitOrigin-RevId: 94aaaa37713d2df34c939298d3bc1be721e7ac38
159 lines
6.3 KiB
Java
159 lines
6.3 KiB
Java
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
|
package com.intellij.java.codeInsight.daemon;
|
|
|
|
import com.intellij.JavaTestUtil;
|
|
import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase;
|
|
import com.intellij.codeInsight.intention.IntentionAction;
|
|
import com.intellij.codeInsight.intention.impl.preview.IntentionPreviewPopupUpdateProcessor;
|
|
import com.intellij.java.JavaBundle;
|
|
import com.intellij.openapi.projectRoots.Sdk;
|
|
import com.intellij.pom.java.JavaFeature;
|
|
import com.intellij.pom.java.LanguageLevel;
|
|
import com.intellij.testFramework.IdeaTestUtil;
|
|
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
|
|
import com.intellij.util.containers.ContainerUtil;
|
|
import com.intellij.util.lang.JavaVersion;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.util.List;
|
|
|
|
public abstract class IncreaseLanguageLevelFixTest extends LightDaemonAnalyzerTestCase {
|
|
public static class IncreaseLanguageLevel25FixTest extends IncreaseLanguageLevelFixTest {
|
|
@Override
|
|
protected Sdk getProjectJDK() {
|
|
return IdeaTestUtil.getMockJdk(JavaVersion.compose(25));
|
|
}
|
|
|
|
public void testStatementBeforeSuper() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_24, () -> doTest(LanguageLevel.JDK_25));
|
|
}
|
|
}
|
|
|
|
public static class IncreaseLanguageLevel23FixTest extends IncreaseLanguageLevelFixTest {
|
|
@Override
|
|
protected Sdk getProjectJDK() {
|
|
return IdeaTestUtil.getMockJdk(JavaVersion.compose(23));
|
|
}
|
|
|
|
public void testVarLocal() {
|
|
doTest(LanguageLevel.JDK_10);
|
|
}
|
|
|
|
public void testVarLambda() {
|
|
doTest(LanguageLevel.JDK_11);
|
|
}
|
|
|
|
public void testRecordTopLevel() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_15, () -> doTest(LanguageLevel.JDK_16));
|
|
}
|
|
|
|
public void testRecordInClass() {
|
|
doTest(LanguageLevel.JDK_16);
|
|
}
|
|
|
|
public void testRecordInMethod() {
|
|
doTest(LanguageLevel.JDK_16);
|
|
}
|
|
|
|
public void testSealedClasses() {
|
|
doTest(LanguageLevel.JDK_17);
|
|
}
|
|
|
|
public void testInstanceofWithPrimitives() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTest(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorBoolean() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTest(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorByte() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTestNotExpected(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorChar() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTestNotExpected(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorDouble() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTest(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorFloat() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTest(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorInt() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTestNotExpected(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorLong() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTest(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorShort() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTestNotExpected(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testDeconstructionWithPrimitives() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTest(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitivePattern() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTest(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
|
|
public void testSwitchWithPrimitiveSelectorAndPattern() {
|
|
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_21, () -> doTest(JavaFeature.PRIMITIVE_TYPES_IN_PATTERNS.getMinimumLevel()));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected @NotNull String getTestDataPath() {
|
|
return JavaTestUtil.getJavaTestDataPath() + "/codeInsight/daemonCodeAnalyzer/increaseLanguageLevel/";
|
|
}
|
|
|
|
@Override
|
|
protected LanguageLevel getLanguageLevel() {
|
|
return LanguageLevel.JDK_1_8;
|
|
}
|
|
|
|
protected void doTest(LanguageLevel level) {
|
|
doTest(level, true);
|
|
}
|
|
|
|
protected void doTestNotExpected(LanguageLevel level) {
|
|
doTest(level, false);
|
|
}
|
|
|
|
protected void doTest(LanguageLevel level, boolean expected) {
|
|
configureByFile(getTestName(false) + ".java");
|
|
doHighlighting();
|
|
List<IntentionAction> actions = CodeInsightTestFixtureImpl.getAvailableIntentions(getEditor(), getFile());
|
|
String message = JavaBundle.message("set.language.level.to.0", level.getPresentableText());
|
|
IntentionAction foundAction = ContainerUtil.find(actions, act -> act.getText().equals(message));
|
|
if (foundAction == null && expected) {
|
|
LanguageLevel foundLevel = ContainerUtil.find(
|
|
LanguageLevel.getEntries(),
|
|
l -> ContainerUtil.exists(
|
|
actions,
|
|
act -> act.getText().equals(JavaBundle.message("set.language.level.to.0", l.getPresentableText()))
|
|
));
|
|
if (foundLevel != null) {
|
|
fail("Expected level: " + level + "; actual: " + foundLevel);
|
|
}
|
|
else {
|
|
fail("Action " + message + " not found");
|
|
}
|
|
}
|
|
else if (foundAction != null && !expected) {
|
|
String actualPreview = IntentionPreviewPopupUpdateProcessor.getPreviewContent(getProject(), foundAction, getFile(), getEditor());
|
|
JavaVersion javaVersion = level.toJavaVersion();
|
|
String expectedPreview = JavaBundle.message("increase.language.level.preview.description", getModule().getName(), javaVersion);
|
|
if (!expectedPreview.equals(actualPreview)) {
|
|
failNotEquals(foundAction.getText(), expectedPreview, actualPreview);
|
|
}
|
|
}
|
|
}
|
|
}
|