Registered 'change variable mutability' fix for 'val reassignment' error
This commit is contained in:
@@ -143,7 +143,18 @@ public interface Errors {
|
||||
PsiElementOnlyDiagnosticFactory3<JetModifierListOwner, CallableMemberDescriptor, CallableMemberDescriptor, DeclarationDescriptor> VIRTUAL_MEMBER_HIDDEN = PsiElementOnlyDiagnosticFactory3.create(ERROR, "''{0}'' hides ''{1}'' in class {2} and needs 'override' modifier", DescriptorRenderer.TEXT);
|
||||
|
||||
PsiElementOnlyDiagnosticFactory1<JetSimpleNameExpression, DeclarationDescriptor> UNINITIALIZED_VARIABLE = PsiElementOnlyDiagnosticFactory1.create(ERROR, "Variable ''{0}'' must be initialized", NAME);
|
||||
PsiElementOnlyDiagnosticFactory1<JetSimpleNameExpression, DeclarationDescriptor> VAL_REASSIGNMENT = PsiElementOnlyDiagnosticFactory1.create(ERROR, "Val can not be reassigned", NAME);
|
||||
PsiElementOnlyDiagnosticFactory2<JetSimpleNameExpression, DeclarationDescriptor, JetProperty[]> VAL_REASSIGNMENT = new PsiElementOnlyDiagnosticFactory2<JetSimpleNameExpression, DeclarationDescriptor, JetProperty[]>(ERROR, "Val can not be reassigned", NAME) {
|
||||
@NotNull
|
||||
@Override
|
||||
public DiagnosticWithPsiElement<JetSimpleNameExpression> on(@NotNull JetSimpleNameExpression elementToBlame, @NotNull ASTNode nodeToMark, @NotNull DeclarationDescriptor declarationDescriptor, @NotNull JetProperty[] property) {
|
||||
DiagnosticWithPsiElement<JetSimpleNameExpression> diagnostic = super.on(elementToBlame, nodeToMark, declarationDescriptor, property);
|
||||
if (property.length == 1) {
|
||||
return diagnostic.add(DiagnosticParameters.PROPERTY, property[0]);
|
||||
}
|
||||
return diagnostic;
|
||||
}
|
||||
};
|
||||
|
||||
PsiElementOnlyDiagnosticFactory1<JetSimpleNameExpression, DeclarationDescriptor> INITIALIZATION_USING_BACKING_FIELD = PsiElementOnlyDiagnosticFactory1.create(ERROR, "Initialization using backing field required", NAME);
|
||||
|
||||
PsiElementOnlyDiagnosticFactory1<JetSimpleNameExpression, DeclarationDescriptor> FUNCTION_PARAMETERS_OF_INLINE_FUNCTION = PsiElementOnlyDiagnosticFactory1.create(ERROR, "Function parameters of inline function can only be invoked", NAME);
|
||||
|
||||
@@ -7,9 +7,14 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticParameters;
|
||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters;
|
||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithPsiElement;
|
||||
import org.jetbrains.jet.lang.psi.JetElement;
|
||||
import org.jetbrains.jet.lang.psi.JetProperty;
|
||||
import org.jetbrains.jet.lang.psi.JetPsiFactory;
|
||||
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
import org.jetbrains.jet.plugin.JetBundle;
|
||||
|
||||
@@ -55,6 +60,7 @@ public class ChangeVariableMutabilityFix extends JetIntentionAction<JetProperty>
|
||||
|
||||
public static JetIntentionActionFactory<JetProperty> createFactory() {
|
||||
return new JetIntentionActionFactory<JetProperty>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public JetIntentionAction<JetProperty> createAction(DiagnosticWithPsiElement diagnostic) {
|
||||
assert diagnostic.getPsiElement() instanceof JetProperty;
|
||||
@@ -62,4 +68,18 @@ public class ChangeVariableMutabilityFix extends JetIntentionAction<JetProperty>
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static JetIntentionActionFactory<JetElement> createFromSimpleNameFactory() {
|
||||
return new JetIntentionActionFactory<JetElement>() {
|
||||
@Override
|
||||
public JetIntentionAction<JetElement> createAction(DiagnosticWithPsiElement diagnostic) {
|
||||
DiagnosticWithParameters<PsiElement> diagnosticWithParameters = assertAndCastToDiagnosticWithParameters(diagnostic, DiagnosticParameters.PROPERTY);
|
||||
JetProperty property = diagnosticWithParameters.getParameter(DiagnosticParameters.PROPERTY);
|
||||
if (diagnostic.getPsiElement().getContainingFile() == property.getContainingFile()) {
|
||||
return (JetIntentionAction) new ChangeVariableMutabilityFix(property);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,6 +71,7 @@ public class QuickFixes {
|
||||
add(Errors.VIRTUAL_MEMBER_HIDDEN, AddModifierFix.createFactory(JetTokens.OVERRIDE_KEYWORD, new JetToken[] {JetTokens.OPEN_KEYWORD}));
|
||||
|
||||
add(Errors.VAL_WITH_SETTER, ChangeVariableMutabilityFix.createFactory());
|
||||
add(Errors.VAL_REASSIGNMENT, ChangeVariableMutabilityFix.createFromSimpleNameFactory());
|
||||
|
||||
add(Errors.USELESS_CAST_STATIC_ASSERT_IS_FINE, ReplaceOperationInBinaryExpressionFix.createChangeCastToStaticAssertFactory());
|
||||
add(Errors.USELESS_CAST, RemoveRightPartOfBinaryExpressionFix.createRemoveCastFactory());
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
// "Make variable mutable" "true"
|
||||
fun foo() {
|
||||
var a = 1
|
||||
<caret>a = 3
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// "Make variable mutable" "true"
|
||||
var a = 4
|
||||
|
||||
fun bar() {
|
||||
<caret>a = 5
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Make variable mutable" "true"
|
||||
class A() {
|
||||
var a = 1
|
||||
|
||||
fun foo() {
|
||||
<caret>a = 5
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// "Make variable mutable" "true"
|
||||
fun foo() {
|
||||
val a = 1
|
||||
<caret>a = 3
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// "Make variable mutable" "true"
|
||||
val a = 4
|
||||
|
||||
fun bar() {
|
||||
<caret>a = 5
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Make variable mutable" "true"
|
||||
class A() {
|
||||
val a = 1
|
||||
|
||||
fun foo() {
|
||||
<caret>a = 5
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user