diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/KotlinEditorTextProvider.kt b/idea/src/org/jetbrains/jet/plugin/debugger/KotlinEditorTextProvider.kt index 2cc9b0ad38b..59e41b8c7a4 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/KotlinEditorTextProvider.kt +++ b/idea/src/org/jetbrains/jet/plugin/debugger/KotlinEditorTextProvider.kt @@ -24,7 +24,6 @@ import com.intellij.openapi.util.Pair import com.intellij.debugger.engine.evaluation.TextWithImportsImpl import com.intellij.debugger.engine.evaluation.CodeFragmentKind import org.jetbrains.jet.plugin.JetFileType -import org.jetbrains.jet.lang.psi.JetFile import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.psi.JetQualifiedExpression import org.jetbrains.jet.lang.psi.JetElement @@ -33,9 +32,11 @@ import org.jetbrains.jet.lang.psi.JetThisExpression import org.jetbrains.jet.lang.psi.JetSimpleNameExpression import org.jetbrains.jet.lang.psi.JetOperationExpression import org.jetbrains.jet.lang.psi.JetExpression -import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment import org.jetbrains.jet.lang.psi.JetSuperExpression import org.jetbrains.jet.lang.psi.JetCodeFragment +import org.jetbrains.jet.lang.psi.JetUserType +import org.jetbrains.jet.lang.psi.JetImportDirective +import org.jetbrains.jet.lang.psi.JetPackageDirective class KotlinEditorTextProvider : EditorTextProvider { override fun getEditorText(elementAtCaret: PsiElement): TextWithImports? { @@ -51,6 +52,10 @@ class KotlinEditorTextProvider : EditorTextProvider { class object { fun findExpressionInner(element: PsiElement): JetExpression? { + if (PsiTreeUtil.getParentOfType(element, javaClass(), javaClass(), javaClass()) != null) { + return null + } + val jetElement = PsiTreeUtil.getParentOfType(element, javaClass()) if (jetElement == null) return null @@ -84,13 +89,12 @@ class KotlinEditorTextProvider : EditorTextProvider { else -> null } - if (newExpression is JetExpression) return newExpression - - if (jetElement is JetSimpleNameExpression) { - return jetElement + return when { + newExpression is JetExpression -> newExpression + jetElement is JetSimpleNameExpression -> jetElement + else -> null } - return null } } } diff --git a/idea/testData/debugger/selectExpression/annotation.kt b/idea/testData/debugger/selectExpression/annotation.kt new file mode 100644 index 00000000000..07dce46a789 --- /dev/null +++ b/idea/testData/debugger/selectExpression/annotation.kt @@ -0,0 +1,5 @@ +Ann fun foo() { } + +annotation class Ann + +// EXPECTED: null \ No newline at end of file diff --git a/idea/testData/debugger/selectExpression/imports.kt b/idea/testData/debugger/selectExpression/imports.kt new file mode 100644 index 00000000000..411404550c2 --- /dev/null +++ b/idea/testData/debugger/selectExpression/imports.kt @@ -0,0 +1,3 @@ +import java.util.List + +// EXPECTED: null \ No newline at end of file diff --git a/idea/testData/debugger/selectExpression/package.kt b/idea/testData/debugger/selectExpression/package.kt new file mode 100644 index 00000000000..efb783eabb7 --- /dev/null +++ b/idea/testData/debugger/selectExpression/package.kt @@ -0,0 +1,3 @@ +package foo.util + +// EXPECTED: null \ No newline at end of file diff --git a/idea/testData/debugger/selectExpression/userType.kt b/idea/testData/debugger/selectExpression/userType.kt new file mode 100644 index 00000000000..cf59b06fb29 --- /dev/null +++ b/idea/testData/debugger/selectExpression/userType.kt @@ -0,0 +1,3 @@ +fun foo(): Int { } + +// EXPECTED: null \ No newline at end of file diff --git a/idea/testData/debugger/selectExpression/userTypeGeneric.kt b/idea/testData/debugger/selectExpression/userTypeGeneric.kt new file mode 100644 index 00000000000..70b14e98350 --- /dev/null +++ b/idea/testData/debugger/selectExpression/userTypeGeneric.kt @@ -0,0 +1,3 @@ +fun foo(): List<Int> { } + +// EXPECTED: null \ No newline at end of file diff --git a/idea/testData/debugger/selectExpression/userTypeQualified.kt b/idea/testData/debugger/selectExpression/userTypeQualified.kt new file mode 100644 index 00000000000..39391d841ff --- /dev/null +++ b/idea/testData/debugger/selectExpression/userTypeQualified.kt @@ -0,0 +1,3 @@ +fun foo(): java.lang.Integer { } + +// EXPECTED: null \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java index f44d403bfc2..656593b4c26 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java @@ -36,6 +36,11 @@ public class SelectExpressionForDebuggerTestGenerated extends AbstractSelectExpr JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/debugger/selectExpression"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("annotation.kt") + public void testAnnotation() throws Exception { + doTest("idea/testData/debugger/selectExpression/annotation.kt"); + } + @TestMetadata("binaryExpression.kt") public void testBinaryExpression() throws Exception { doTest("idea/testData/debugger/selectExpression/binaryExpression.kt"); @@ -71,6 +76,11 @@ public class SelectExpressionForDebuggerTestGenerated extends AbstractSelectExpr doTest("idea/testData/debugger/selectExpression/getConvention.kt"); } + @TestMetadata("imports.kt") + public void testImports() throws Exception { + doTest("idea/testData/debugger/selectExpression/imports.kt"); + } + @TestMetadata("infixCall.kt") public void testInfixCall() throws Exception { doTest("idea/testData/debugger/selectExpression/infixCall.kt"); @@ -96,6 +106,11 @@ public class SelectExpressionForDebuggerTestGenerated extends AbstractSelectExpr doTest("idea/testData/debugger/selectExpression/modifier.kt"); } + @TestMetadata("package.kt") + public void testPackage() throws Exception { + doTest("idea/testData/debugger/selectExpression/package.kt"); + } + @TestMetadata("param.kt") public void testParam() throws Exception { doTest("idea/testData/debugger/selectExpression/param.kt"); @@ -146,4 +161,19 @@ public class SelectExpressionForDebuggerTestGenerated extends AbstractSelectExpr doTest("idea/testData/debugger/selectExpression/unaryExpression.kt"); } + @TestMetadata("userType.kt") + public void testUserType() throws Exception { + doTest("idea/testData/debugger/selectExpression/userType.kt"); + } + + @TestMetadata("userTypeGeneric.kt") + public void testUserTypeGeneric() throws Exception { + doTest("idea/testData/debugger/selectExpression/userTypeGeneric.kt"); + } + + @TestMetadata("userTypeQualified.kt") + public void testUserTypeQualified() throws Exception { + doTest("idea/testData/debugger/selectExpression/userTypeQualified.kt"); + } + }