Quick-Fixes: Do not add 'abstract' modifier to anonymous objects

#KT-6656 Fixed
This commit is contained in:
Alexey Sedunov
2015-03-16 19:41:20 +03:00
parent 1ed2c82008
commit 16a4dbd692
3 changed files with 23 additions and 0 deletions
@@ -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<JetModifierListOwner> {
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);
}
};
@@ -0,0 +1,11 @@
// "Make 'object : T {}' abstract" "false"
// ACTION: Implement members
// ACTION: Split property declaration
// ERROR: <html>Object must be declared abstract or implement abstract member<br/><b>internal</b> <b>abstract</b> <b>fun</b> foo(): kotlin.Unit <i>defined in</i> T</html>
trait T {
fun foo()
}
fun test() {
val o = <caret>object : T {}
}
@@ -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)