From cf87f55085dbf95780a106fe22dbb08e8b433a15 Mon Sep 17 00:00:00 2001 From: Jack Zhou Date: Thu, 7 Feb 2013 10:46:37 -0500 Subject: [PATCH] Added quickfix for VARIANCE_ON_TYPE_PARAMETER_OF_FUNCTION_OR_PROPERTY. --- .../jet/plugin/quickfix/QuickFixes.java | 1 + .../plugin/quickfix/RemoveModifierFix.java | 30 +++++++++++++++++++ .../typeProjection/afterRemoveVariance.kt | 2 ++ .../typeProjection/beforeRemoveVariance.kt | 2 ++ .../quickfix/QuickFixTestGenerated.java | 5 ++++ 5 files changed, 40 insertions(+) create mode 100644 idea/testData/quickfix/typeProjection/afterRemoveVariance.kt create mode 100644 idea/testData/quickfix/typeProjection/beforeRemoveVariance.kt diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java index 94793e3fb57..bd59743ff08 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java @@ -104,6 +104,7 @@ public class QuickFixes { factories.put(TRAIT_CAN_NOT_BE_FINAL, removeFinalModifierFactory); factories.put(REDUNDANT_PROJECTION, RemoveModifierFix.createRemoveProjectionFactory()); factories.put(INCOMPATIBLE_MODIFIERS, RemoveModifierFix.createRemoveModifierFactory(false)); + factories.put(VARIANCE_ON_TYPE_PARAMETER_OF_FUNCTION_OR_PROPERTY, RemoveModifierFix.createRemoveVarianceFactory()); JetIntentionActionFactory removeOpenModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD); factories.put(NON_FINAL_MEMBER_IN_FINAL_CLASS, AddModifierFix.createFactory(OPEN_KEYWORD, JetClass.class)); diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveModifierFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveModifierFix.java index 79ac2f98899..20439d286cf 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveModifierFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/RemoveModifierFix.java @@ -29,7 +29,10 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.psi.JetModifierList; import org.jetbrains.jet.lang.psi.JetModifierListOwner; +import org.jetbrains.jet.lang.psi.JetTypeParameter; import org.jetbrains.jet.lang.psi.JetTypeProjection; +import org.jetbrains.jet.lang.psi.stubs.elements.JetTypeParameterElementType; +import org.jetbrains.jet.lang.types.Variance; import org.jetbrains.jet.lexer.JetKeywordToken; import org.jetbrains.jet.lexer.JetToken; import org.jetbrains.jet.lexer.JetTokens; @@ -153,4 +156,31 @@ public class RemoveModifierFix extends JetIntentionAction } }; } + + public static JetIntentionActionFactory createRemoveVarianceFactory() { + return new JetIntentionActionFactory() { + @Nullable + @Override + public JetIntentionAction createAction(Diagnostic diagnostic) { + JetModifierListOwner modifierListOwner = QuickFixUtil.getParentElementOfType(diagnostic, JetModifierListOwner.class); + if (modifierListOwner == null) return null; + PsiElement psiElement = diagnostic.getPsiElement(); + if (!(psiElement instanceof JetTypeParameter)) return null; + JetTypeParameter parameter = (JetTypeParameter) psiElement; + Variance variance = parameter.getVariance(); + JetKeywordToken modifier; + switch (variance) { + case IN_VARIANCE: + modifier = JetTokens.IN_KEYWORD; + break; + case OUT_VARIANCE: + modifier = JetTokens.OUT_KEYWORD; + break; + default: + return null; + } + return new RemoveModifierFix(modifierListOwner, modifier, false); + } + }; + } } diff --git a/idea/testData/quickfix/typeProjection/afterRemoveVariance.kt b/idea/testData/quickfix/typeProjection/afterRemoveVariance.kt new file mode 100644 index 00000000000..f78228ccd66 --- /dev/null +++ b/idea/testData/quickfix/typeProjection/afterRemoveVariance.kt @@ -0,0 +1,2 @@ +// "Remove 'out' modifier" "true" +fun foo() { } \ No newline at end of file diff --git a/idea/testData/quickfix/typeProjection/beforeRemoveVariance.kt b/idea/testData/quickfix/typeProjection/beforeRemoveVariance.kt new file mode 100644 index 00000000000..fde203cebcf --- /dev/null +++ b/idea/testData/quickfix/typeProjection/beforeRemoveVariance.kt @@ -0,0 +1,2 @@ +// "Remove 'out' modifier" "true" +fun foo String>() { } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java index 2b83444ab86..a91e52acd8d 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java @@ -683,6 +683,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest("idea/testData/quickfix/typeProjection/beforeRemoveRedundantProjection2.kt"); } + @TestMetadata("beforeRemoveVariance.kt") + public void testRemoveVariance() throws Exception { + doTest("idea/testData/quickfix/typeProjection/beforeRemoveVariance.kt"); + } + } @TestMetadata("idea/testData/quickfix/uselessImports")