diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/SpecifyTypeExplicitlyFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/SpecifyTypeExplicitlyFix.java index 7d64cf8895b..89353a89c06 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/SpecifyTypeExplicitlyFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/SpecifyTypeExplicitlyFix.java @@ -21,15 +21,30 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.psi.JetNamedDeclaration; -import org.jetbrains.jet.lang.psi.JetNamedFunction; -import org.jetbrains.jet.lang.psi.JetProperty; +import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.types.ErrorUtils; +import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.intentions.SpecifyTypeExplicitlyAction; @SuppressWarnings("IntentionDescriptionNotFoundInspection") public class SpecifyTypeExplicitlyFix extends SpecifyTypeExplicitlyAction { + @Override + public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement element) { + //noinspection unchecked + JetNamedDeclaration declaration = PsiTreeUtil.getParentOfType(element, JetProperty.class, JetNamedFunction.class); + JetType type = getTypeForDeclaration(declaration); + if (declaration instanceof JetProperty) { + addTypeAnnotation(project, (JetProperty) declaration, type); + } + else if (declaration instanceof JetNamedFunction) { + addTypeAnnotation(project, (JetNamedFunction) declaration, type); + } + else { + assert false : "Couldn't find property or function"; + } + } + @Override public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { //noinspection unchecked diff --git a/idea/testData/quickfix/typeAddition/afterPublicFunWithoutReturnTypeCaretOnParameter.kt b/idea/testData/quickfix/typeAddition/afterPublicFunWithoutReturnTypeCaretOnParameter.kt new file mode 100644 index 00000000000..157c5ea6d0a --- /dev/null +++ b/idea/testData/quickfix/typeAddition/afterPublicFunWithoutReturnTypeCaretOnParameter.kt @@ -0,0 +1,6 @@ +// "Specify return type explicitly" "true" +package a + +class A() { + public fun foo(p: String): String = "a" +} diff --git a/idea/testData/quickfix/typeAddition/afterPublicValWithoutReturnTypeCaretOnPublic.kt b/idea/testData/quickfix/typeAddition/afterPublicValWithoutReturnTypeCaretOnPublic.kt new file mode 100644 index 00000000000..ee05c5e0b8f --- /dev/null +++ b/idea/testData/quickfix/typeAddition/afterPublicValWithoutReturnTypeCaretOnPublic.kt @@ -0,0 +1,4 @@ +// "Specify type explicitly" "true" +package a + +public val l: List = java.util.Collections.emptyList() diff --git a/idea/testData/quickfix/typeAddition/beforePublicFunWithoutReturnTypeCaretOnParameter.kt b/idea/testData/quickfix/typeAddition/beforePublicFunWithoutReturnTypeCaretOnParameter.kt new file mode 100644 index 00000000000..9092c0010aa --- /dev/null +++ b/idea/testData/quickfix/typeAddition/beforePublicFunWithoutReturnTypeCaretOnParameter.kt @@ -0,0 +1,6 @@ +// "Specify return type explicitly" "true" +package a + +class A() { + public fun foo(p: String) = "a" +} diff --git a/idea/testData/quickfix/typeAddition/beforePublicValWithoutReturnTypeCaretOnPublic.kt b/idea/testData/quickfix/typeAddition/beforePublicValWithoutReturnTypeCaretOnPublic.kt new file mode 100644 index 00000000000..3f88fce44ed --- /dev/null +++ b/idea/testData/quickfix/typeAddition/beforePublicValWithoutReturnTypeCaretOnPublic.kt @@ -0,0 +1,4 @@ +// "Specify type explicitly" "true" +package a + +public val l = java.util.Collections.emptyList()