From 1aadf98951ed6d073a9e3f3b0d74a93ce99e8af6 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 9 Mar 2012 17:35:29 +0400 Subject: [PATCH 1/2] Working around a problem with shallow analysis --- .../backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java index b38955b5878..2b09b3503df 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java @@ -225,6 +225,8 @@ public class ClosureAnnotator { public void visitFunctionLiteralExpression(JetFunctionLiteralExpression expression) { String name = recordAnonymousClass(expression.getFunctionLiteral()); FunctionDescriptor declarationDescriptor = (FunctionDescriptor) bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, expression); + // working around a problem with shallow analysis + if (declarationDescriptor == null) return; ClassDescriptor classDescriptor = classDescriptorForFunctionDescriptor(declarationDescriptor, name); recordName(classDescriptor, name); recordEnclosing(classDescriptor); From 97ec5b4344da588113f2ace0655e8c5b76d64d70 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 9 Mar 2012 17:48:11 +0400 Subject: [PATCH 2/2] Make JetLightClass analyze the whole project (with no caching, for now). This change is related to the following issues: KT-1474 Execption when running kotlin project KT-1501 Run script doesn't work in IDEA In seems that to fix the problem completely, we need to avoid importing Java's default package into every file, but the problems reported in these requests are gone now. #KT-1501 Fixed #KT-1474 Fixed --- .../org/jetbrains/jet/asJava/JetLightClass.java | 17 +++++++++-------- .../compiler/WholeProjectAnalyzerFacade.java | 0 2 files changed, 9 insertions(+), 8 deletions(-) rename {idea => compiler/jet.as.java.psi}/src/org/jetbrains/jet/plugin/compiler/WholeProjectAnalyzerFacade.java (100%) diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java index 6941433f8c1..1f483c08dad 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java @@ -45,18 +45,17 @@ import org.jetbrains.jet.codegen.ClassBuilder; import org.jetbrains.jet.codegen.ClassBuilderFactory; import org.jetbrains.jet.codegen.CompilationErrorHandler; import org.jetbrains.jet.codegen.GenerationState; -import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.JetJavaMirrorMarker; import org.jetbrains.jet.plugin.JetLanguage; +import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade; import org.jetbrains.jet.util.QualifiedNamesUtil; import javax.swing.*; import java.util.Collections; -import java.util.List; public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMarker { private static final Logger LOG = Logger.getInstance("#org.jetbrains.jet.asJava.JetLightClass"); @@ -184,12 +183,14 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa } } }; - - List files = Collections.singletonList(file); -//todo: -// final BindingContext context = AnalyzerFacadeForJVM.shallowAnalyzeFiles(files); - final BindingContext context = AnalyzerFacadeForJVM.analyzeOneFileWithJavaIntegration(file, JetControlFlowDataTraceFactory.EMPTY); - state.compileCorrectFiles(context, files, CompilationErrorHandler.THROW_EXCEPTION, true); + + + // The context must reflect _all files in the module_. not only the current file + // Otherwise, the analyzer gets confused and can't, for example, tell which files come as sources and which + // must be loaded from .class files + BindingContext context = AnalyzerFacadeForJVM.shallowAnalyzeFiles(WholeProjectAnalyzerFacade.WHOLE_PROJECT_DECLARATION_PROVIDER.fun(file)); + + state.compileCorrectFiles(context, Collections.singletonList(file), CompilationErrorHandler.THROW_EXCEPTION, true); state.getFactory().files(); return answer; diff --git a/idea/src/org/jetbrains/jet/plugin/compiler/WholeProjectAnalyzerFacade.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/plugin/compiler/WholeProjectAnalyzerFacade.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/compiler/WholeProjectAnalyzerFacade.java rename to compiler/jet.as.java.psi/src/org/jetbrains/jet/plugin/compiler/WholeProjectAnalyzerFacade.java