From 16a4dbd692b09b3b448e78221a8b1705f9ebe4de Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 16 Mar 2015 19:41:20 +0300 Subject: [PATCH] Quick-Fixes: Do not add 'abstract' modifier to anonymous objects #KT-6656 Fixed --- .../kotlin/idea/quickfix/AddModifierFix.java | 6 ++++++ idea/testData/quickfix/beforeAnonymousObject.kt | 11 +++++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 3 files changed, 23 insertions(+) create mode 100644 idea/testData/quickfix/beforeAnonymousObject.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.java index 7861a7d726c..c9ac3e74b30 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.java @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.lexer.JetModifierKeywordToken; import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.psi.JetModifierListOwner; +import org.jetbrains.kotlin.psi.JetObjectDeclaration; import org.jetbrains.kotlin.psi.JetPropertyAccessor; import static org.jetbrains.kotlin.lexer.JetTokens.ABSTRACT_KEYWORD; @@ -90,6 +91,11 @@ public class AddModifierFix extends JetIntentionAction { public IntentionAction createAction(Diagnostic diagnostic) { JetModifierListOwner modifierListOwner = QuickFixUtil.getParentElementOfType(diagnostic, modifierOwnerClass); if (modifierListOwner == null) return null; + + if (modifier == JetTokens.ABSTRACT_KEYWORD && + modifierListOwner instanceof JetObjectDeclaration && + ((JetObjectDeclaration) modifierListOwner).isObjectLiteral()) return null; + return new AddModifierFix(modifierListOwner, modifier); } }; diff --git a/idea/testData/quickfix/beforeAnonymousObject.kt b/idea/testData/quickfix/beforeAnonymousObject.kt new file mode 100644 index 00000000000..ba2400ae917 --- /dev/null +++ b/idea/testData/quickfix/beforeAnonymousObject.kt @@ -0,0 +1,11 @@ +// "Make 'object : T {}' abstract" "false" +// ACTION: Implement members +// ACTION: Split property declaration +// ERROR: Object must be declared abstract or implement abstract member
internal abstract fun foo(): kotlin.Unit defined in T +trait T { + fun foo() +} + +fun test() { + val o = object : T {} +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 404c9f45c50..af84077dad4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -62,6 +62,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix"), Pattern.compile("^before(\\w+)\\.kt$"), true); } + @TestMetadata("beforeAnonymousObject.kt") + public void testAnonymousObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/beforeAnonymousObject.kt"); + doTest(fileName); + } + @TestMetadata("idea/testData/quickfix/abstract") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)