Added quickfix for VARIANCE_ON_TYPE_PARAMETER_OF_FUNCTION_OR_PROPERTY.

This commit is contained in:
Jack Zhou
2013-02-07 10:46:37 -05:00
committed by Andrey Breslav
parent e96d8ef475
commit cf87f55085
5 changed files with 40 additions and 0 deletions
@@ -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));
@@ -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<JetModifierListOwner>
}
};
}
public static JetIntentionActionFactory createRemoveVarianceFactory() {
return new JetIntentionActionFactory() {
@Nullable
@Override
public JetIntentionAction<JetModifierListOwner> 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);
}
};
}
}
@@ -0,0 +1,2 @@
// "Remove 'out' modifier" "true"
fun foo<String>() { }
@@ -0,0 +1,2 @@
// "Remove 'out' modifier" "true"
fun foo<out<caret> String>() { }
@@ -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")