Add(Remove)ParameterQuickFix is not available for unmodifiable files
This commit is contained in:
@@ -195,7 +195,10 @@ public class BindingContextUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static List<PsiElement> callableDescriptorToDeclarations(@NotNull BindingContext context, @NotNull CallableMemberDescriptor callable) {
|
public static List<PsiElement> callableDescriptorToDeclarations(
|
||||||
|
@NotNull BindingContext context,
|
||||||
|
@NotNull CallableMemberDescriptor callable
|
||||||
|
) {
|
||||||
if (callable.getKind() == SYNTHESIZED) {
|
if (callable.getKind() == SYNTHESIZED) {
|
||||||
CallableMemberDescriptor original = callable.getOriginal();
|
CallableMemberDescriptor original = callable.getOriginal();
|
||||||
if (original instanceof SynthesizedCallableMemberDescriptor<?>) {
|
if (original instanceof SynthesizedCallableMemberDescriptor<?>) {
|
||||||
|
|||||||
@@ -16,17 +16,24 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.quickfix;
|
package org.jetbrains.jet.plugin.quickfix;
|
||||||
|
|
||||||
|
import com.intellij.openapi.editor.Editor;
|
||||||
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.PsiNameIdentifierOwner;
|
import com.intellij.psi.PsiNameIdentifierOwner;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
|
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
|
||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters1;
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters1;
|
||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters2;
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters2;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
@@ -64,6 +71,27 @@ public abstract class ChangeFunctionSignatureFix extends JetIntentionAction<PsiE
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
|
||||||
|
if (!super.isAvailable(project, editor, file)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BindingContext bindingContext = AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) file).getBindingContext();
|
||||||
|
List<PsiElement> declarations = BindingContextUtils.callableDescriptorToDeclarations(bindingContext, functionDescriptor);
|
||||||
|
if (declarations.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (PsiElement declaration : declarations) {
|
||||||
|
if (!QuickFixUtil.canModifyElement(declaration)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected static String getNewArgumentName(ValueArgument argument, JetNameValidator validator) {
|
protected static String getNewArgumentName(ValueArgument argument, JetNameValidator validator) {
|
||||||
JetValueArgumentName argumentName = argument.getArgumentName();
|
JetValueArgumentName argumentName = argument.getArgumentName();
|
||||||
JetExpression expression = argument.getArgumentExpression();
|
JetExpression expression = argument.getArgumentExpression();
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// "Add parameter to function 'equals'" "false"
|
||||||
|
// ERROR: Too many arguments for public fun jet.Any?.equals(other: jet.Any?): jet.Boolean defined in jet
|
||||||
|
|
||||||
|
fun f(d: Any) {
|
||||||
|
d.equals("a", <caret>"b")
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// "Add parameter to function 'equals'" "false"
|
||||||
|
// ERROR: Too many arguments for public open fun equals(p0: jet.Any?): jet.Boolean defined in java.lang.Object
|
||||||
|
|
||||||
|
fun f(d: java.lang.Object) {
|
||||||
|
d.equals("a", <caret>"b")
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// "Remove parameter 'other'" "false"
|
||||||
|
// ERROR: No value passed for parameter other
|
||||||
|
|
||||||
|
fun f(d: Boolean) {
|
||||||
|
d.or(<caret>)
|
||||||
|
}
|
||||||
@@ -375,6 +375,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest("idea/testData/quickfix/changeSignature/beforeAddFunctionParameterAndChangeTypes.kt");
|
doTest("idea/testData/quickfix/changeSignature/beforeAddFunctionParameterAndChangeTypes.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("beforeAddParameterNotAvailableForBuiltins.kt")
|
||||||
|
public void testAddParameterNotAvailableForBuiltins() throws Exception {
|
||||||
|
doTest("idea/testData/quickfix/changeSignature/beforeAddParameterNotAvailableForBuiltins.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("beforeAddParameterNotAvailableForLibrary.kt")
|
||||||
|
public void testAddParameterNotAvailableForLibrary() throws Exception {
|
||||||
|
doTest("idea/testData/quickfix/changeSignature/beforeAddParameterNotAvailableForLibrary.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("beforeAddParameterToFakeOverride.kt")
|
@TestMetadata("beforeAddParameterToFakeOverride.kt")
|
||||||
public void testAddParameterToFakeOverride() throws Exception {
|
public void testAddParameterToFakeOverride() throws Exception {
|
||||||
doTest("idea/testData/quickfix/changeSignature/beforeAddParameterToFakeOverride.kt");
|
doTest("idea/testData/quickfix/changeSignature/beforeAddParameterToFakeOverride.kt");
|
||||||
@@ -449,6 +459,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest("idea/testData/quickfix/changeSignature/beforeRemoveParameterFromFakeOverride.kt");
|
doTest("idea/testData/quickfix/changeSignature/beforeRemoveParameterFromFakeOverride.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("beforeRemoveParameterNotAvailableForBuiltins.kt")
|
||||||
|
public void testRemoveParameterNotAvailableForBuiltins() throws Exception {
|
||||||
|
doTest("idea/testData/quickfix/changeSignature/beforeRemoveParameterNotAvailableForBuiltins.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("beforeRemoveUnusedParameter.kt")
|
@TestMetadata("beforeRemoveUnusedParameter.kt")
|
||||||
public void testRemoveUnusedParameter() throws Exception {
|
public void testRemoveUnusedParameter() throws Exception {
|
||||||
doTest("idea/testData/quickfix/changeSignature/beforeRemoveUnusedParameter.kt");
|
doTest("idea/testData/quickfix/changeSignature/beforeRemoveUnusedParameter.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user