Common fix for FINAL_SUPERTYPE and FINAL_UPPER_BOUND errors

This commit is contained in:
Wojciech Lopata
2013-02-26 12:59:05 +01:00
committed by Evgeny Gerashchenko
parent 6e1e495397
commit a887175f1a
28 changed files with 142 additions and 108 deletions
@@ -11,8 +11,7 @@ change.variable.mutability.family=Change Variable Mutability
remove.function.body=Remove function body
make.element.modifier=Make {0} {1}
add.modifier=Add ''{0}'' modifier
add.supertype.modifier=Add ''{0}'' modifier to supertype
add.supertype.modifier.family=Add Modifier to Supertype
add.modifier.family=Add Modifier
make.class.annotation.class=Make ''{0}'' an annotation class
make.class.annotation.class.family=Make Class an Annotation Class
add.star.projections=Add ''{0}''
@@ -77,7 +77,7 @@ public class AddModifierFix extends JetIntentionAction<JetModifierListOwner> {
@NotNull
@Override
public String getFamilyName() {
return "Add modifier";
return JetBundle.message("add.modifier.family");
}
@Override
@@ -137,6 +137,11 @@ public class AddModifierFix extends JetIntentionAction<JetModifierListOwner> {
return newElement;
}
@NotNull
/*package*/ static JetModifierListOwner addModifierWithDefaultReplacement(@NotNull PsiElement element, @NotNull JetKeywordToken modifier, @NotNull Project project, boolean toBeginning) {
return addModifier(element, modifier, MODIFIERS_THAT_CAN_BE_REPLACED.get(modifier), project, toBeginning);
}
@Override
public boolean startInWriteAction() {
return true;
@@ -24,27 +24,22 @@ import com.intellij.psi.PsiFile;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetTypeReference;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lexer.JetKeywordToken;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.JetBundle;
import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManager;
import static org.jetbrains.jet.lexer.JetTokens.FINAL_KEYWORD;
import static org.jetbrains.jet.lexer.JetTokens.OPEN_KEYWORD;
public class AddOpenModifierToClassDeclarationFix extends JetIntentionAction<JetTypeReference> {
private JetClass classDeclaration;
public class FinalSupertypeFix extends JetIntentionAction<JetClass> {
private final JetClass childClass;
private JetClass superClass;
public FinalSupertypeFix(@NotNull JetClass childClass) {
super(childClass);
this.childClass = childClass;
public AddOpenModifierToClassDeclarationFix(@NotNull JetTypeReference typeReference) {
super(typeReference);
}
@Override
@@ -54,43 +49,32 @@ public class FinalSupertypeFix extends JetIntentionAction<JetClass> {
}
BindingContext context = KotlinCacheManager.getInstance(project).getDeclarationsFromProject().getBindingContext();
ClassDescriptor childClassDescriptor = context.get(BindingContext.CLASS, childClass);
if (childClassDescriptor == null) {
return false;
JetType type = context.get(BindingContext.TYPE, element);
if (type == null) return false;
DeclarationDescriptor typeDeclarationDescriptor = type.getConstructor().getDeclarationDescriptor();
if (typeDeclarationDescriptor == null) return false;
PsiElement typeDeclaration = BindingContextUtils.descriptorToDeclaration(context, typeDeclarationDescriptor);
if (typeDeclaration instanceof JetClass && typeDeclaration.isWritable()) {
this.classDeclaration = (JetClass) typeDeclaration;
}
for (JetType supertype: childClassDescriptor.getTypeConstructor().getSupertypes()) {
ClassDescriptor superClassDescriptor = (ClassDescriptor) supertype.getConstructor().getDeclarationDescriptor();
if (superClassDescriptor == null) {
continue;
}
PsiElement declaration = BindingContextUtils.descriptorToDeclaration(context, superClassDescriptor);
if (declaration instanceof JetClass) {
superClass = (JetClass) declaration;
if (!superClass.isTrait() && !superClass.isEnum() && superClass.getContainingFile().isWritable()) {
return true;
}
}
}
return false;
return classDeclaration != null && !classDeclaration.isEnum() && !classDeclaration.isTrait();
}
@NotNull
@Override
public String getText() {
return JetBundle.message("add.supertype.modifier", "open");
return JetBundle.message("make.element.modifier", classDeclaration.getName(), "open");
}
@NotNull
@Override
public String getFamilyName() {
return JetBundle.message("add.supertype.modifier.family");
return JetBundle.message("add.modifier.family");
}
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
assert superClass != null;
JetToken[] modifiersThanCanBeReplaced = new JetKeywordToken[] { FINAL_KEYWORD };
superClass.replace(AddModifierFix.addModifier(superClass, OPEN_KEYWORD, modifiersThanCanBeReplaced, project, false));
classDeclaration.replace(AddModifierFix.addModifierWithDefaultReplacement(classDeclaration, JetTokens.OPEN_KEYWORD, project, false));
}
@NotNull
@@ -99,10 +83,9 @@ public class FinalSupertypeFix extends JetIntentionAction<JetClass> {
@Nullable
@Override
public IntentionAction createAction(Diagnostic diagnostic) {
JetClass childClass = QuickFixUtil.getParentElementOfType(diagnostic, JetClass.class);
return childClass == null ? null : new FinalSupertypeFix(childClass);
JetTypeReference typeReference = QuickFixUtil.getParentElementOfType(diagnostic, JetTypeReference.class);
return typeReference == null ? null : new AddOpenModifierToClassDeclarationFix(typeReference);
}
};
}
}
@@ -182,8 +182,10 @@ public class QuickFixes {
factories.put(WRONG_NUMBER_OF_TYPE_ARGUMENTS, AddStarProjectionsFix.createFactoryForJavaClass());
factories.put(INACCESSIBLE_OUTER_CLASS_EXPRESSION, AddModifierFix.createFactory(INNER_KEYWORD, JetClass.class));
factories.put(FINAL_SUPERTYPE, FinalSupertypeFix.createFactory());
JetIntentionActionFactory addOpenModifierToClassDeclarationFix = AddOpenModifierToClassDeclarationFix.createFactory();
factories.put(FINAL_SUPERTYPE, addOpenModifierToClassDeclarationFix);
factories.put(FINAL_UPPER_BOUND, addOpenModifierToClassDeclarationFix);
factories.put(PARAMETER_NAME_CHANGED_ON_OVERRIDE, RenameParameterToMatchOverriddenMethodFix.createFactory());
@@ -0,0 +1,3 @@
// "Make A open" "true"
open class A {}
class B : A<caret>() {}
@@ -0,0 +1,3 @@
// "Make A open" "true"
open class A {}
class B<T : A<caret>> {}
@@ -0,0 +1,3 @@
// "Make A open" "true"
open class A {}
class B : A<caret>() {}
@@ -0,0 +1,3 @@
// "Make A open" "true"
open class A {}
class B<T : A<caret>> {}
@@ -1,4 +1,4 @@
// "Add 'open' modifier to supertype" "true"
// "Make A open" "true"
trait X {}
trait Y {}
@@ -1,4 +1,4 @@
// "Add 'open' modifier to supertype" "false"
// "Make E open" "false"
// ERROR: This type is final, so it cannot be inherited from
// ERROR: Cannot access '<init>': it is 'private' in 'E'
enum class E {}
@@ -0,0 +1,3 @@
// "Make E open" "false"
enum class E {}
class A<T : E<caret>> {}
@@ -0,0 +1,3 @@
// "Make A open" "true"
final class A {}
class B : A<caret>() {}
@@ -0,0 +1,3 @@
// "Make A open" "true"
final class A {}
class B<T : A<caret>> {}
@@ -1,3 +1,3 @@
// "Add 'open' modifier to supertype" "false"
// "Make String open" "false"
// ERROR: This type is final, so it cannot be inherited from
class A : String<caret>() {}
@@ -0,0 +1,2 @@
// "Make String open" "false"
class A<T : String<caret>> {}
@@ -0,0 +1,3 @@
// "Make A open" "true"
class A {}
class B : A<caret>() {}
@@ -0,0 +1,3 @@
// "Make A open" "true"
final class A {}
class B<T : A<caret>> {}
@@ -1,4 +1,4 @@
// "Add 'open' modifier to supertype" "true"
// "Make A open" "true"
trait X {}
trait Y {}
@@ -1,4 +1,4 @@
// "Add 'open' modifier to supertype" "false"
// "Make JavaClass open" "false"
// ERROR: This type is final, so it cannot be inherited from
import testPackage.*
@@ -0,0 +1,4 @@
// "Make JavaClass open" "false"
import testPackage.*
class foo<T : JavaClass>() {}
@@ -1,3 +0,0 @@
// "Add 'open' modifier to supertype" "true"
open class A {}
class B : A<caret>() {}
@@ -1,3 +0,0 @@
// "Add 'open' modifier to supertype" "true"
open class A {}
class B : A<caret>() {}
@@ -1,3 +0,0 @@
// "Add 'open' modifier to supertype" "true"
final class A {}
class B : A<caret>() {}
@@ -1,3 +0,0 @@
// "Add 'open' modifier to supertype" "true"
class A {}
class B : A<caret>() {}
@@ -22,24 +22,28 @@ import com.intellij.testFramework.PsiTestUtil;
import org.jetbrains.jet.plugin.PluginTestCaseBase;
import org.jetbrains.jet.testing.LocalFileSystemUtils;
public class FinalJavaSupertypeTest extends AbstractQuickFixMultiFileTest {
public class AddOpenToClassDeclarationTest extends AbstractQuickFixMultiFileTest {
@Override
protected void setUp() throws Exception {
super.setUp();
LocalFileSystemUtils.refreshPath(getTestDataPath());
}
public void testFinalJavaSupertype() throws Exception {
String path = getTestDataPath() + "javaCode/";
final VirtualFile rootDir = PsiTestUtil.createTestProjectStructure(myProject, myModule, path, myFilesToDelete, false);
addSourceContentToRoots(myModule, rootDir);
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
doTestWithoutExtraFile(getTestName(false) + ".before.kt");
}
public void testFinalJavaSupertype() throws Exception {
doTestWithoutExtraFile("FinalJavaSupertype.before.kt");
}
public void testFinalJavaUpperBound() throws Exception {
doTestWithoutExtraFile("FinalJavaUpperBound.before.kt");
}
@Override
protected String getTestDataPath() {
return PluginTestCaseBase.getTestDataPathBase() + "/quickfix/modifiers/finalSupertype/" + getTestName(true) + "/";
return PluginTestCaseBase.getTestDataPathBase() + "/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/";
}
}
@@ -120,31 +120,31 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
}
@TestMetadata("idea/testData/quickfix/modifiers")
@InnerTestClasses({Modifiers.FinalSupertype.class})
@InnerTestClasses({Modifiers.AddOpenToClassDeclaration.class})
public static class Modifiers extends AbstractQuickFixMultiFileTest {
public void testAllFilesPresentInModifiers() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers"), Pattern.compile("^(\\w+)\\.before\\.Main\\.kt$"), true);
}
@TestMetadata("idea/testData/quickfix/modifiers/finalSupertype")
@InnerTestClasses({FinalSupertype.FinalJavaSupertype.class})
public static class FinalSupertype extends AbstractQuickFixMultiFileTest {
public void testAllFilesPresentInFinalSupertype() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/finalSupertype"), Pattern.compile("^(\\w+)\\.before\\.Main\\.kt$"), true);
@TestMetadata("idea/testData/quickfix/modifiers/addOpenToClassDeclaration")
@InnerTestClasses({AddOpenToClassDeclaration.FinalJavaClass.class})
public static class AddOpenToClassDeclaration extends AbstractQuickFixMultiFileTest {
public void testAllFilesPresentInAddOpenToClassDeclaration() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/addOpenToClassDeclaration"), Pattern.compile("^(\\w+)\\.before\\.Main\\.kt$"), true);
}
@TestMetadata("idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype")
@InnerTestClasses({FinalJavaSupertype.JavaCode.class})
public static class FinalJavaSupertype extends AbstractQuickFixMultiFileTest {
public void testAllFilesPresentInFinalJavaSupertype() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype"), Pattern.compile("^(\\w+)\\.before\\.Main\\.kt$"), true);
@TestMetadata("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass")
@InnerTestClasses({FinalJavaClass.JavaCode.class})
public static class FinalJavaClass extends AbstractQuickFixMultiFileTest {
public void testAllFilesPresentInFinalJavaClass() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass"), Pattern.compile("^(\\w+)\\.before\\.Main\\.kt$"), true);
}
@TestMetadata("idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/javaCode")
@TestMetadata("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/javaCode")
@InnerTestClasses({})
public static class JavaCode extends AbstractQuickFixMultiFileTest {
public void testAllFilesPresentInJavaCode() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/javaCode"), Pattern.compile("^(\\w+)\\.before\\.Main\\.kt$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/javaCode"), Pattern.compile("^(\\w+)\\.before\\.Main\\.kt$"), true);
}
public static Test innerSuite() {
@@ -155,17 +155,17 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("FinalJavaSupertype");
suite.addTestSuite(FinalJavaSupertype.class);
TestSuite suite = new TestSuite("FinalJavaClass");
suite.addTestSuite(FinalJavaClass.class);
suite.addTest(JavaCode.innerSuite());
return suite;
}
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("FinalSupertype");
suite.addTestSuite(FinalSupertype.class);
suite.addTest(FinalJavaSupertype.innerSuite());
TestSuite suite = new TestSuite("AddOpenToClassDeclaration");
suite.addTestSuite(AddOpenToClassDeclaration.class);
suite.addTest(FinalJavaClass.innerSuite());
return suite;
}
}
@@ -173,7 +173,7 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
public static Test innerSuite() {
TestSuite suite = new TestSuite("Modifiers");
suite.addTestSuite(Modifiers.class);
suite.addTest(FinalSupertype.innerSuite());
suite.addTest(AddOpenToClassDeclaration.innerSuite());
return suite;
}
}
@@ -415,7 +415,7 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
}
@TestMetadata("idea/testData/quickfix/modifiers")
@InnerTestClasses({Modifiers.FinalSupertype.class})
@InnerTestClasses({Modifiers.AddOpenToClassDeclaration.class})
public static class Modifiers extends AbstractQuickFixTest {
@TestMetadata("beforeAddInnerModifier.kt")
public void testAddInnerModifier() throws Exception {
@@ -506,50 +506,70 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest("idea/testData/quickfix/modifiers/beforeVisibilityModiferParameter.kt");
}
@TestMetadata("idea/testData/quickfix/modifiers/finalSupertype")
@InnerTestClasses({FinalSupertype.FinalJavaSupertype.class})
public static class FinalSupertype extends AbstractQuickFixTest {
public void testAllFilesPresentInFinalSupertype() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/finalSupertype"), Pattern.compile("^before(\\w+)\\.kt$"), true);
@TestMetadata("idea/testData/quickfix/modifiers/addOpenToClassDeclaration")
@InnerTestClasses({AddOpenToClassDeclaration.FinalJavaClass.class})
public static class AddOpenToClassDeclaration extends AbstractQuickFixTest {
public void testAllFilesPresentInAddOpenToClassDeclaration() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/addOpenToClassDeclaration"), Pattern.compile("^before(\\w+)\\.kt$"), true);
}
@TestMetadata("beforeEnumSupertype.kt")
public void testEnumSupertype() throws Exception {
doTest("idea/testData/quickfix/modifiers/finalSupertype/beforeEnumSupertype.kt");
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumSupertype.kt");
}
@TestMetadata("beforeEnumUpperBound.kt")
public void testEnumUpperBound() throws Exception {
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumUpperBound.kt");
}
@TestMetadata("beforeExplicitlyFinalSupertype.kt")
public void testExplicitlyFinalSupertype() throws Exception {
doTest("idea/testData/quickfix/modifiers/finalSupertype/beforeExplicitlyFinalSupertype.kt");
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalSupertype.kt");
}
@TestMetadata("beforeExplicitlyFinalUpperBound.kt")
public void testExplicitlyFinalUpperBound() throws Exception {
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalUpperBound.kt");
}
@TestMetadata("beforeFinalLibrarySupertype.kt")
public void testFinalLibrarySupertype() throws Exception {
doTest("idea/testData/quickfix/modifiers/finalSupertype/beforeFinalLibrarySupertype.kt");
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibrarySupertype.kt");
}
@TestMetadata("beforeFinalLibraryUpperBound.kt")
public void testFinalLibraryUpperBound() throws Exception {
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibraryUpperBound.kt");
}
@TestMetadata("beforeFinalSupertype.kt")
public void testFinalSupertype() throws Exception {
doTest("idea/testData/quickfix/modifiers/finalSupertype/beforeFinalSupertype.kt");
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalSupertype.kt");
}
@TestMetadata("beforeFinalUpperBound.kt")
public void testFinalUpperBound() throws Exception {
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalUpperBound.kt");
}
@TestMetadata("beforeImplementTraitFinalSupertype.kt")
public void testImplementTraitFinalSupertype() throws Exception {
doTest("idea/testData/quickfix/modifiers/finalSupertype/beforeImplementTraitFinalSupertype.kt");
doTest("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeImplementTraitFinalSupertype.kt");
}
@TestMetadata("idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype")
@InnerTestClasses({FinalJavaSupertype.JavaCode.class})
public static class FinalJavaSupertype extends AbstractQuickFixTest {
public void testAllFilesPresentInFinalJavaSupertype() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype"), Pattern.compile("^before(\\w+)\\.kt$"), true);
@TestMetadata("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass")
@InnerTestClasses({FinalJavaClass.JavaCode.class})
public static class FinalJavaClass extends AbstractQuickFixTest {
public void testAllFilesPresentInFinalJavaClass() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass"), Pattern.compile("^before(\\w+)\\.kt$"), true);
}
@TestMetadata("idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/javaCode")
@TestMetadata("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/javaCode")
@InnerTestClasses({})
public static class JavaCode extends AbstractQuickFixTest {
public void testAllFilesPresentInJavaCode() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/javaCode"), Pattern.compile("^before(\\w+)\\.kt$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/javaCode"), Pattern.compile("^before(\\w+)\\.kt$"), true);
}
public static Test innerSuite() {
@@ -560,17 +580,17 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("FinalJavaSupertype");
suite.addTestSuite(FinalJavaSupertype.class);
TestSuite suite = new TestSuite("FinalJavaClass");
suite.addTestSuite(FinalJavaClass.class);
suite.addTest(JavaCode.innerSuite());
return suite;
}
}
public static Test innerSuite() {
TestSuite suite = new TestSuite("FinalSupertype");
suite.addTestSuite(FinalSupertype.class);
suite.addTest(FinalJavaSupertype.innerSuite());
TestSuite suite = new TestSuite("AddOpenToClassDeclaration");
suite.addTestSuite(AddOpenToClassDeclaration.class);
suite.addTest(FinalJavaClass.innerSuite());
return suite;
}
}
@@ -578,7 +598,7 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
public static Test innerSuite() {
TestSuite suite = new TestSuite("Modifiers");
suite.addTestSuite(Modifiers.class);
suite.addTest(FinalSupertype.innerSuite());
suite.addTest(AddOpenToClassDeclaration.innerSuite());
return suite;
}
}