From a887175f1a887b03a2a90366051523484a315088 Mon Sep 17 00:00:00 2001 From: Wojciech Lopata Date: Tue, 26 Feb 2013 12:59:05 +0100 Subject: [PATCH] Common fix for FINAL_SUPERTYPE and FINAL_UPPER_BOUND errors --- .../jetbrains/jet/plugin/JetBundle.properties | 3 +- .../jet/plugin/quickfix/AddModifierFix.java | 7 +- ...AddOpenModifierToClassDeclarationFix.java} | 57 ++++++---------- .../jet/plugin/quickfix/QuickFixes.java | 6 +- .../afterExplicitlyFinalSupertype.kt | 3 + .../afterExplicitlyFinalUpperBound.kt | 3 + .../afterFinalSupertype.kt | 3 + .../afterFinalUpperBound.kt | 3 + .../afterImplementTraitFinalSupertype.kt | 2 +- .../beforeEnumSupertype.kt | 2 +- .../beforeEnumUpperBound.kt | 3 + .../beforeExplicitlyFinalSupertype.kt | 3 + .../beforeExplicitlyFinalUpperBound.kt | 3 + .../beforeFinalLibrarySupertype.kt | 2 +- .../beforeFinalLibraryUpperBound.kt | 2 + .../beforeFinalSupertype.kt | 3 + .../beforeFinalUpperBound.kt | 3 + .../beforeImplementTraitFinalSupertype.kt | 2 +- .../FinalJavaSupertype.before.kt | 2 +- .../FinalJavaUpperBound.before.kt | 4 ++ .../javaCode/testPackage/JavaClass.java | 0 .../afterExplicitlyFinalSupertype.kt | 3 - .../finalSupertype/afterFinalSupertype.kt | 3 - .../beforeExplicitlyFinalSupertype.kt | 3 - .../finalSupertype/beforeFinalSupertype.kt | 3 - ...ava => AddOpenToClassDeclarationTest.java} | 16 +++-- .../QuickFixMultiFileTestGenerated.java | 38 +++++------ .../quickfix/QuickFixTestGenerated.java | 68 ++++++++++++------- 28 files changed, 142 insertions(+), 108 deletions(-) rename idea/src/org/jetbrains/jet/plugin/quickfix/{FinalSupertypeFix.java => AddOpenModifierToClassDeclarationFix.java} (52%) create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterExplicitlyFinalSupertype.kt create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterExplicitlyFinalUpperBound.kt create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterFinalSupertype.kt create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterFinalUpperBound.kt rename idea/testData/quickfix/modifiers/{finalSupertype => addOpenToClassDeclaration}/afterImplementTraitFinalSupertype.kt (60%) rename idea/testData/quickfix/modifiers/{finalSupertype => addOpenToClassDeclaration}/beforeEnumSupertype.kt (77%) create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumUpperBound.kt create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalSupertype.kt create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalUpperBound.kt rename idea/testData/quickfix/modifiers/{finalSupertype => addOpenToClassDeclaration}/beforeFinalLibrarySupertype.kt (66%) create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibraryUpperBound.kt create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalSupertype.kt create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalUpperBound.kt rename idea/testData/quickfix/modifiers/{finalSupertype => addOpenToClassDeclaration}/beforeImplementTraitFinalSupertype.kt (58%) rename idea/testData/quickfix/modifiers/{finalSupertype/finalJavaSupertype => addOpenToClassDeclaration/finalJavaClass}/FinalJavaSupertype.before.kt (71%) create mode 100644 idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/FinalJavaUpperBound.before.kt rename idea/testData/quickfix/modifiers/{finalSupertype/finalJavaSupertype => addOpenToClassDeclaration/finalJavaClass}/javaCode/testPackage/JavaClass.java (100%) delete mode 100644 idea/testData/quickfix/modifiers/finalSupertype/afterExplicitlyFinalSupertype.kt delete mode 100644 idea/testData/quickfix/modifiers/finalSupertype/afterFinalSupertype.kt delete mode 100644 idea/testData/quickfix/modifiers/finalSupertype/beforeExplicitlyFinalSupertype.kt delete mode 100644 idea/testData/quickfix/modifiers/finalSupertype/beforeFinalSupertype.kt rename idea/tests/org/jetbrains/jet/plugin/quickfix/{FinalJavaSupertypeTest.java => AddOpenToClassDeclarationTest.java} (81%) diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties index 93cd759287c..26de3c19c38 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -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}'' diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/AddModifierFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/AddModifierFix.java index 8a9fbc51eb7..3d6265c6e14 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/AddModifierFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/AddModifierFix.java @@ -77,7 +77,7 @@ public class AddModifierFix extends JetIntentionAction { @NotNull @Override public String getFamilyName() { - return "Add modifier"; + return JetBundle.message("add.modifier.family"); } @Override @@ -137,6 +137,11 @@ public class AddModifierFix extends JetIntentionAction { 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; diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/FinalSupertypeFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/AddOpenModifierToClassDeclarationFix.java similarity index 52% rename from idea/src/org/jetbrains/jet/plugin/quickfix/FinalSupertypeFix.java rename to idea/src/org/jetbrains/jet/plugin/quickfix/AddOpenModifierToClassDeclarationFix.java index 967bc2df356..979c4577fab 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/FinalSupertypeFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/AddOpenModifierToClassDeclarationFix.java @@ -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 { + private JetClass classDeclaration; -public class FinalSupertypeFix extends JetIntentionAction { - 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 { } 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 { @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); } }; } } - diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java index a535790c6af..48fb81b7c7a 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java @@ -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()); diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterExplicitlyFinalSupertype.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterExplicitlyFinalSupertype.kt new file mode 100644 index 00000000000..1aeebf3f9e8 --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterExplicitlyFinalSupertype.kt @@ -0,0 +1,3 @@ +// "Make A open" "true" +open class A {} +class B : A() {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterExplicitlyFinalUpperBound.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterExplicitlyFinalUpperBound.kt new file mode 100644 index 00000000000..d962ff70b4b --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterExplicitlyFinalUpperBound.kt @@ -0,0 +1,3 @@ +// "Make A open" "true" +open class A {} +class B> {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterFinalSupertype.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterFinalSupertype.kt new file mode 100644 index 00000000000..1aeebf3f9e8 --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterFinalSupertype.kt @@ -0,0 +1,3 @@ +// "Make A open" "true" +open class A {} +class B : A() {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterFinalUpperBound.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterFinalUpperBound.kt new file mode 100644 index 00000000000..d962ff70b4b --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterFinalUpperBound.kt @@ -0,0 +1,3 @@ +// "Make A open" "true" +open class A {} +class B> {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/afterImplementTraitFinalSupertype.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterImplementTraitFinalSupertype.kt similarity index 60% rename from idea/testData/quickfix/modifiers/finalSupertype/afterImplementTraitFinalSupertype.kt rename to idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterImplementTraitFinalSupertype.kt index 2220c574e10..43674ec3a1f 100644 --- a/idea/testData/quickfix/modifiers/finalSupertype/afterImplementTraitFinalSupertype.kt +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/afterImplementTraitFinalSupertype.kt @@ -1,4 +1,4 @@ -// "Add 'open' modifier to supertype" "true" +// "Make A open" "true" trait X {} trait Y {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/beforeEnumSupertype.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumSupertype.kt similarity index 77% rename from idea/testData/quickfix/modifiers/finalSupertype/beforeEnumSupertype.kt rename to idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumSupertype.kt index 4e78e7076c2..968a2ebf595 100644 --- a/idea/testData/quickfix/modifiers/finalSupertype/beforeEnumSupertype.kt +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumSupertype.kt @@ -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 '': it is 'private' in 'E' enum class E {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumUpperBound.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumUpperBound.kt new file mode 100644 index 00000000000..fb49ff2db01 --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeEnumUpperBound.kt @@ -0,0 +1,3 @@ +// "Make E open" "false" +enum class E {} +class A> {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalSupertype.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalSupertype.kt new file mode 100644 index 00000000000..2e7c157919f --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalSupertype.kt @@ -0,0 +1,3 @@ +// "Make A open" "true" +final class A {} +class B : A() {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalUpperBound.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalUpperBound.kt new file mode 100644 index 00000000000..1c298afb8b6 --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeExplicitlyFinalUpperBound.kt @@ -0,0 +1,3 @@ +// "Make A open" "true" +final class A {} +class B> {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/beforeFinalLibrarySupertype.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibrarySupertype.kt similarity index 66% rename from idea/testData/quickfix/modifiers/finalSupertype/beforeFinalLibrarySupertype.kt rename to idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibrarySupertype.kt index 745a7fd8da0..569379893a5 100644 --- a/idea/testData/quickfix/modifiers/finalSupertype/beforeFinalLibrarySupertype.kt +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibrarySupertype.kt @@ -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() {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibraryUpperBound.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibraryUpperBound.kt new file mode 100644 index 00000000000..bbc77e243b2 --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalLibraryUpperBound.kt @@ -0,0 +1,2 @@ +// "Make String open" "false" +class A> {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalSupertype.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalSupertype.kt new file mode 100644 index 00000000000..845d8ec4daf --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalSupertype.kt @@ -0,0 +1,3 @@ +// "Make A open" "true" +class A {} +class B : A() {} diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalUpperBound.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalUpperBound.kt new file mode 100644 index 00000000000..1c298afb8b6 --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeFinalUpperBound.kt @@ -0,0 +1,3 @@ +// "Make A open" "true" +final class A {} +class B> {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/beforeImplementTraitFinalSupertype.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeImplementTraitFinalSupertype.kt similarity index 58% rename from idea/testData/quickfix/modifiers/finalSupertype/beforeImplementTraitFinalSupertype.kt rename to idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeImplementTraitFinalSupertype.kt index 519703fbabf..f3f695af3a5 100644 --- a/idea/testData/quickfix/modifiers/finalSupertype/beforeImplementTraitFinalSupertype.kt +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/beforeImplementTraitFinalSupertype.kt @@ -1,4 +1,4 @@ -// "Add 'open' modifier to supertype" "true" +// "Make A open" "true" trait X {} trait Y {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/FinalJavaSupertype.before.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/FinalJavaSupertype.before.kt similarity index 71% rename from idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/FinalJavaSupertype.before.kt rename to idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/FinalJavaSupertype.before.kt index fb9ff69075c..ca73e8329a3 100644 --- a/idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/FinalJavaSupertype.before.kt +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/FinalJavaSupertype.before.kt @@ -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.* diff --git a/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/FinalJavaUpperBound.before.kt b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/FinalJavaUpperBound.before.kt new file mode 100644 index 00000000000..2c0c7044dd0 --- /dev/null +++ b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/FinalJavaUpperBound.before.kt @@ -0,0 +1,4 @@ +// "Make JavaClass open" "false" +import testPackage.* + +class foo() {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/javaCode/testPackage/JavaClass.java b/idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/javaCode/testPackage/JavaClass.java similarity index 100% rename from idea/testData/quickfix/modifiers/finalSupertype/finalJavaSupertype/javaCode/testPackage/JavaClass.java rename to idea/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaClass/javaCode/testPackage/JavaClass.java diff --git a/idea/testData/quickfix/modifiers/finalSupertype/afterExplicitlyFinalSupertype.kt b/idea/testData/quickfix/modifiers/finalSupertype/afterExplicitlyFinalSupertype.kt deleted file mode 100644 index 6687d20cab8..00000000000 --- a/idea/testData/quickfix/modifiers/finalSupertype/afterExplicitlyFinalSupertype.kt +++ /dev/null @@ -1,3 +0,0 @@ -// "Add 'open' modifier to supertype" "true" -open class A {} -class B : A() {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/afterFinalSupertype.kt b/idea/testData/quickfix/modifiers/finalSupertype/afterFinalSupertype.kt deleted file mode 100644 index 6687d20cab8..00000000000 --- a/idea/testData/quickfix/modifiers/finalSupertype/afterFinalSupertype.kt +++ /dev/null @@ -1,3 +0,0 @@ -// "Add 'open' modifier to supertype" "true" -open class A {} -class B : A() {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/beforeExplicitlyFinalSupertype.kt b/idea/testData/quickfix/modifiers/finalSupertype/beforeExplicitlyFinalSupertype.kt deleted file mode 100644 index bc8ea06b23a..00000000000 --- a/idea/testData/quickfix/modifiers/finalSupertype/beforeExplicitlyFinalSupertype.kt +++ /dev/null @@ -1,3 +0,0 @@ -// "Add 'open' modifier to supertype" "true" -final class A {} -class B : A() {} diff --git a/idea/testData/quickfix/modifiers/finalSupertype/beforeFinalSupertype.kt b/idea/testData/quickfix/modifiers/finalSupertype/beforeFinalSupertype.kt deleted file mode 100644 index 336711a5a18..00000000000 --- a/idea/testData/quickfix/modifiers/finalSupertype/beforeFinalSupertype.kt +++ /dev/null @@ -1,3 +0,0 @@ -// "Add 'open' modifier to supertype" "true" -class A {} -class B : A() {} diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/FinalJavaSupertypeTest.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/AddOpenToClassDeclarationTest.java similarity index 81% rename from idea/tests/org/jetbrains/jet/plugin/quickfix/FinalJavaSupertypeTest.java rename to idea/tests/org/jetbrains/jet/plugin/quickfix/AddOpenToClassDeclarationTest.java index d3a23ce73a9..a2987967f84 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/FinalJavaSupertypeTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/AddOpenToClassDeclarationTest.java @@ -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/"; } } diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixMultiFileTestGenerated.java index 9c161e861cd..4eea5d6553b 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixMultiFileTestGenerated.java @@ -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; } } diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java index 4c4305f12c4..7bf2a1bbc11 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java @@ -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; } }