From 322578b7736f174b9b8e47914c87e9b77c1c1fd4 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 3 May 2012 01:45:58 +0400 Subject: [PATCH] Replaced AddReturnTypeFix with SpecifyTypeExplicitlyAction for properties. --- .../SpecifyTypeExplicitlyAction.java | 20 +++++++++++++++++-- .../jet/plugin/quickfix/AddReturnTypeFix.java | 5 +---- .../jet/plugin/quickfix/QuickFixes.java | 2 ++ .../afterPublicValWithoutReturnType.kt | 2 +- .../beforePublicValWithoutReturnType.kt | 2 +- .../typeImports/afterImportFromAnotherFile.kt | 2 +- .../afterNoImportFromTheSameFile.kt | 2 +- .../beforeImportFromAnotherFile.Main.kt | 2 +- .../beforeNoImportFromTheSameFile.kt | 2 +- 9 files changed, 27 insertions(+), 12 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/SpecifyTypeExplicitlyAction.java b/idea/src/org/jetbrains/jet/plugin/intentions/SpecifyTypeExplicitlyAction.java index f10680dddf5..ae3269014cf 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/SpecifyTypeExplicitlyAction.java +++ b/idea/src/org/jetbrains/jet/plugin/intentions/SpecifyTypeExplicitlyAction.java @@ -20,17 +20,17 @@ import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; -import com.intellij.psi.impl.source.tree.LeafPsiElement; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.VariableDescriptor; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; +import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetType; -import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.project.AnalyzeSingleFileUtil; import org.jetbrains.jet.plugin.refactoring.introduceVariable.JetChangePropertyActions; @@ -41,6 +41,15 @@ import org.jetbrains.jet.plugin.refactoring.introduceVariable.JetChangePropertyA */ public class SpecifyTypeExplicitlyAction extends PsiElementBaseIntentionAction { private JetType targetType; + private boolean disabledForError; + + public SpecifyTypeExplicitlyAction() { + this(true); + } + + public SpecifyTypeExplicitlyAction(boolean disabledForError) { + this.disabledForError = disabledForError; + } @NotNull @Override @@ -82,6 +91,13 @@ public class SpecifyTypeExplicitlyAction extends PsiElementBaseIntentionAction { if (ErrorUtils.isErrorType(targetType)) { return false; } + if (disabledForError) { + for (Diagnostic diagnostic : bindingContext.getDiagnostics()) { + if (Errors.PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE == diagnostic.getFactory() && property == diagnostic.getPsiElement()) { + return false; + } + } + } } return true; } diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/AddReturnTypeFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/AddReturnTypeFix.java index 6a55bbfd471..ec9a070deda 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/AddReturnTypeFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/AddReturnTypeFix.java @@ -52,7 +52,7 @@ public class AddReturnTypeFix extends JetIntentionAction { @Override public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { JetType type = QuickFixUtil.getDeclarationReturnType(element); - return super.isAvailable(project, editor, file) && type != null && !ErrorUtils.isErrorType(type); + return super.isAvailable(project, editor, file) && type != null && !ErrorUtils.isErrorType(type) && element instanceof JetFunction; } @Override @@ -61,9 +61,6 @@ public class AddReturnTypeFix extends JetIntentionAction { PsiElement newElement; JetType type = QuickFixUtil.getDeclarationReturnType(element); if (type == null) return; - if (element instanceof JetProperty) { - newElement = addPropertyType(project, (JetProperty) element, type); - } else { assert element instanceof JetFunction; newElement = addFunctionType(project, (JetFunction) element, type); diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java index dda1344366b..ebd50c228ed 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java @@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.diagnostics.AbstractDiagnosticFactory; import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.plugin.codeInsight.ImplementMethodsHandler; +import org.jetbrains.jet.plugin.intentions.SpecifyTypeExplicitlyAction; import java.util.Collection; @@ -137,5 +138,6 @@ public class QuickFixes { actions.put(UNNECESSARY_SAFE_CALL, new ReplaceCallFix(false)); actions.put(UNSAFE_CALL, new ReplaceCallFix(true)); + actions.put(PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE, new SpecifyTypeExplicitlyAction(false)); } } \ No newline at end of file diff --git a/idea/testData/quickfix/typeAddition/afterPublicValWithoutReturnType.kt b/idea/testData/quickfix/typeAddition/afterPublicValWithoutReturnType.kt index 9f661482552..d0796a7cd74 100644 --- a/idea/testData/quickfix/typeAddition/afterPublicValWithoutReturnType.kt +++ b/idea/testData/quickfix/typeAddition/afterPublicValWithoutReturnType.kt @@ -1,4 +1,4 @@ -// "Add return type declaration" "true" +// "Specify Type Explicitly" "true" package a import java.util.List diff --git a/idea/testData/quickfix/typeAddition/beforePublicValWithoutReturnType.kt b/idea/testData/quickfix/typeAddition/beforePublicValWithoutReturnType.kt index 5fb773845c1..6155ec71868 100644 --- a/idea/testData/quickfix/typeAddition/beforePublicValWithoutReturnType.kt +++ b/idea/testData/quickfix/typeAddition/beforePublicValWithoutReturnType.kt @@ -1,4 +1,4 @@ -// "Add return type declaration" "true" +// "Specify Type Explicitly" "true" package a public val l = java.util.Collections.emptyList() \ No newline at end of file diff --git a/idea/testData/quickfix/typeImports/afterImportFromAnotherFile.kt b/idea/testData/quickfix/typeImports/afterImportFromAnotherFile.kt index 40d4462c1fa..5794bf9f573 100644 --- a/idea/testData/quickfix/typeImports/afterImportFromAnotherFile.kt +++ b/idea/testData/quickfix/typeImports/afterImportFromAnotherFile.kt @@ -1,4 +1,4 @@ -// "Add return type declaration" "true" +// "Specify Type Explicitly" "true" package a diff --git a/idea/testData/quickfix/typeImports/afterNoImportFromTheSameFile.kt b/idea/testData/quickfix/typeImports/afterNoImportFromTheSameFile.kt index dbf8c11c53b..5acd2b8b7e5 100644 --- a/idea/testData/quickfix/typeImports/afterNoImportFromTheSameFile.kt +++ b/idea/testData/quickfix/typeImports/afterNoImportFromTheSameFile.kt @@ -1,4 +1,4 @@ -// "Add return type declaration" "true" +// "Specify Type Explicitly" "true" class A() {} diff --git a/idea/testData/quickfix/typeImports/beforeImportFromAnotherFile.Main.kt b/idea/testData/quickfix/typeImports/beforeImportFromAnotherFile.Main.kt index 66f32cb95a8..bc5de5d7d13 100644 --- a/idea/testData/quickfix/typeImports/beforeImportFromAnotherFile.Main.kt +++ b/idea/testData/quickfix/typeImports/beforeImportFromAnotherFile.Main.kt @@ -1,4 +1,4 @@ -// "Add return type declaration" "true" +// "Specify Type Explicitly" "true" package a diff --git a/idea/testData/quickfix/typeImports/beforeNoImportFromTheSameFile.kt b/idea/testData/quickfix/typeImports/beforeNoImportFromTheSameFile.kt index 2b6d8501e56..973d53507d7 100644 --- a/idea/testData/quickfix/typeImports/beforeNoImportFromTheSameFile.kt +++ b/idea/testData/quickfix/typeImports/beforeNoImportFromTheSameFile.kt @@ -1,4 +1,4 @@ -// "Add return type declaration" "true" +// "Specify Type Explicitly" "true" class A() {}