Add(Remove)ParameterQuickFix is not available for unmodifiable files
This commit is contained in:
@@ -195,7 +195,10 @@ public class BindingContextUtils {
|
||||
}
|
||||
|
||||
@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) {
|
||||
CallableMemberDescriptor original = callable.getOriginal();
|
||||
if (original instanceof SynthesizedCallableMemberDescriptor<?>) {
|
||||
|
||||
@@ -16,17 +16,24 @@
|
||||
|
||||
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.PsiFile;
|
||||
import com.intellij.psi.PsiNameIdentifierOwner;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
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.DiagnosticWithParameters1;
|
||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters2;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
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.checker.JetTypeChecker;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
@@ -64,6 +71,27 @@ public abstract class ChangeFunctionSignatureFix extends JetIntentionAction<PsiE
|
||||
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) {
|
||||
JetValueArgumentName argumentName = argument.getArgumentName();
|
||||
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");
|
||||
}
|
||||
|
||||
@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")
|
||||
public void testAddParameterToFakeOverride() throws Exception {
|
||||
doTest("idea/testData/quickfix/changeSignature/beforeAddParameterToFakeOverride.kt");
|
||||
@@ -449,6 +459,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
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")
|
||||
public void testRemoveUnusedParameter() throws Exception {
|
||||
doTest("idea/testData/quickfix/changeSignature/beforeRemoveUnusedParameter.kt");
|
||||
|
||||
Reference in New Issue
Block a user