From fa482bca8087812ca1501c590553fcc5aae6198b Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Fri, 11 Apr 2014 15:48:01 +0400 Subject: [PATCH] Use lazy analysis for debug file --- .../evaluate/KotlinEvaluationBuilder.kt | 16 +----- .../debugger/tinyApp/outs/dependentOnFile.out | 7 +++ .../tinyApp/src/evaluate/dependentOnFile.kt | 54 +++++++++++++++++++ ...KotlinEvaluateExpressionTestGenerated.java | 5 ++ 4 files changed, 68 insertions(+), 14 deletions(-) create mode 100644 idea/testData/debugger/tinyApp/outs/dependentOnFile.out create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/dependentOnFile.kt diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt index 86f2793ff63..1375025d76d 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt +++ b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt @@ -21,15 +21,10 @@ import com.intellij.psi.PsiElement import com.intellij.debugger.SourcePosition import com.intellij.debugger.engine.evaluation.* import com.intellij.debugger.engine.evaluation.expression.* -import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM -import com.google.common.base.Predicates import org.jetbrains.jet.lang.resolve.AnalyzingUtils import org.jetbrains.jet.codegen.state.GenerationState import org.jetbrains.jet.codegen.ClassBuilderFactories import java.util.Collections -import com.intellij.psi.PsiFile -import org.jetbrains.jet.codegen.state.Progress -import org.jetbrains.jet.codegen.CompilationErrorHandler import org.jetbrains.jet.codegen.KotlinCodegenFacade import com.intellij.openapi.application.ApplicationManager import com.intellij.testFramework.LightVirtualFile @@ -48,13 +43,12 @@ import org.jetbrains.eval4j.jdi.asJdiValue import org.jetbrains.eval4j.jdi.makeInitialFrame import org.jetbrains.jet.lang.resolve.java.PackageClassUtils import org.jetbrains.jet.lang.resolve.name.FqName -import org.jetbrains.jet.plugin.caches.resolve.KotlinDeclarationsCache import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache -import java.io.File import org.jetbrains.jet.plugin.debugger.KotlinEditorTextProvider import org.jetbrains.jet.OutputFileCollection import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment import org.jetbrains.jet.lang.psi.JetExpressionCodeFragmentImpl +import org.jetbrains.jet.plugin.caches.resolve.getAnalysisResults object KotlinEvaluationBuilder: EvaluatorBuilder { override fun build(codeFragment: PsiElement, position: SourcePosition?): ExpressionEvaluator { @@ -85,13 +79,7 @@ class KotlinEvaluator(val codeFragment: PsiElement) : Evaluator { val file = createFileForDebugger(codeFragment) - val analyzeExhaust = AnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationAndCheckForErrors( - file.getProject(), - Collections.singletonList(file), - Predicates.alwaysTrue()) - //val analyzeExhaust = AnalyzerFacadeWithCache.analyzeFileWithCache(file) - //analyzeExhaust.forceResolveAll() - + val analyzeExhaust = file.getAnalysisResults() val bindingContext = analyzeExhaust.getBindingContext() try { analyzeExhaust.throwIfError() diff --git a/idea/testData/debugger/tinyApp/outs/dependentOnFile.out b/idea/testData/debugger/tinyApp/outs/dependentOnFile.out new file mode 100644 index 00000000000..32f5a09bbfc --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/dependentOnFile.out @@ -0,0 +1,7 @@ +LineBreakpoint created at dependentOnFile.kt:5 +!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !APP_PATH!\classes;!KOTLIN_RUNTIME!;!RT_JAR! dependentOnFile.DependentOnFilePackage +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +dependentOnFile.kt:4 +Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' + +Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/evaluate/dependentOnFile.kt b/idea/testData/debugger/tinyApp/src/evaluate/dependentOnFile.kt new file mode 100644 index 00000000000..46cccb50ff0 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/dependentOnFile.kt @@ -0,0 +1,54 @@ +package dependentOnFile + +fun main(args: Array) { + //Breakpoint! + args.size +} + +class TestClass { + fun testFun() = 1 + + class object { + val p = 1 + } +} + +fun testFun() = 1 +fun Int.testExtFun() = 1 + +object TestObject { + val p = 1 +} + +val testVal = 1 +val Int.testExtVal = 1 +val testDelVal by Delegate() + +class Delegate { + fun get(a: Any?, b: PropertyMetadata) = 1 +} + +// EXPRESSION: TestClass().testFun() +// RESULT: 1: I + +// EXPRESSION: testFun() +// RESULT: 1: I + +// EXPRESSION: TestObject.p +// RESULT: 1: I + +// EXPRESSION: TestClass.p +// RESULT: 1: I + +// EXPRESSION: 1.testExtFun() +// RESULT: 1: I + +// EXPRESSION: testVal +// RESULT: 1: I + +// EXPRESSION: 1.testExtVal +// RESULT: 1: I +// +// EXPRESSION: testDelVal +// RESULT: 1: I + diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java index 099b5fd1000..62f36ce0982 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -51,6 +51,11 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doTest("idea/testData/debugger/tinyApp/src/evaluate/collections.kt"); } + @TestMetadata("dependentOnFile.kt") + public void testDependentOnFile() throws Exception { + doTest("idea/testData/debugger/tinyApp/src/evaluate/dependentOnFile.kt"); + } + @TestMetadata("imports.kt") public void testImports() throws Exception { doTest("idea/testData/debugger/tinyApp/src/evaluate/imports.kt");