Use lazy analysis for debug file
This commit is contained in:
@@ -21,15 +21,10 @@ import com.intellij.psi.PsiElement
|
|||||||
import com.intellij.debugger.SourcePosition
|
import com.intellij.debugger.SourcePosition
|
||||||
import com.intellij.debugger.engine.evaluation.*
|
import com.intellij.debugger.engine.evaluation.*
|
||||||
import com.intellij.debugger.engine.evaluation.expression.*
|
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.lang.resolve.AnalyzingUtils
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState
|
import org.jetbrains.jet.codegen.state.GenerationState
|
||||||
import org.jetbrains.jet.codegen.ClassBuilderFactories
|
import org.jetbrains.jet.codegen.ClassBuilderFactories
|
||||||
import java.util.Collections
|
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 org.jetbrains.jet.codegen.KotlinCodegenFacade
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.testFramework.LightVirtualFile
|
import com.intellij.testFramework.LightVirtualFile
|
||||||
@@ -48,13 +43,12 @@ import org.jetbrains.eval4j.jdi.asJdiValue
|
|||||||
import org.jetbrains.eval4j.jdi.makeInitialFrame
|
import org.jetbrains.eval4j.jdi.makeInitialFrame
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||||
import org.jetbrains.jet.plugin.caches.resolve.KotlinDeclarationsCache
|
|
||||||
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
|
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
|
||||||
import java.io.File
|
|
||||||
import org.jetbrains.jet.plugin.debugger.KotlinEditorTextProvider
|
import org.jetbrains.jet.plugin.debugger.KotlinEditorTextProvider
|
||||||
import org.jetbrains.jet.OutputFileCollection
|
import org.jetbrains.jet.OutputFileCollection
|
||||||
import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment
|
import org.jetbrains.jet.lang.psi.JetExpressionCodeFragment
|
||||||
import org.jetbrains.jet.lang.psi.JetExpressionCodeFragmentImpl
|
import org.jetbrains.jet.lang.psi.JetExpressionCodeFragmentImpl
|
||||||
|
import org.jetbrains.jet.plugin.caches.resolve.getAnalysisResults
|
||||||
|
|
||||||
object KotlinEvaluationBuilder: EvaluatorBuilder {
|
object KotlinEvaluationBuilder: EvaluatorBuilder {
|
||||||
override fun build(codeFragment: PsiElement, position: SourcePosition?): ExpressionEvaluator {
|
override fun build(codeFragment: PsiElement, position: SourcePosition?): ExpressionEvaluator {
|
||||||
@@ -85,13 +79,7 @@ class KotlinEvaluator(val codeFragment: PsiElement) : Evaluator {
|
|||||||
|
|
||||||
val file = createFileForDebugger(codeFragment)
|
val file = createFileForDebugger(codeFragment)
|
||||||
|
|
||||||
val analyzeExhaust = AnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationAndCheckForErrors(
|
val analyzeExhaust = file.getAnalysisResults()
|
||||||
file.getProject(),
|
|
||||||
Collections.singletonList(file),
|
|
||||||
Predicates.alwaysTrue())
|
|
||||||
//val analyzeExhaust = AnalyzerFacadeWithCache.analyzeFileWithCache(file)
|
|
||||||
//analyzeExhaust.forceResolveAll()
|
|
||||||
|
|
||||||
val bindingContext = analyzeExhaust.getBindingContext()
|
val bindingContext = analyzeExhaust.getBindingContext()
|
||||||
try {
|
try {
|
||||||
analyzeExhaust.throwIfError()
|
analyzeExhaust.throwIfError()
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package dependentOnFile
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
//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
|
||||||
|
|
||||||
+5
@@ -51,6 +51,11 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat
|
|||||||
doTest("idea/testData/debugger/tinyApp/src/evaluate/collections.kt");
|
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")
|
@TestMetadata("imports.kt")
|
||||||
public void testImports() throws Exception {
|
public void testImports() throws Exception {
|
||||||
doTest("idea/testData/debugger/tinyApp/src/evaluate/imports.kt");
|
doTest("idea/testData/debugger/tinyApp/src/evaluate/imports.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user