From a42edb9c8fa4ea7c26391bebfdd8c5da9b9e0694 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Sat, 27 Sep 2014 17:06:25 +0400 Subject: [PATCH] LTDA: Assert context was created for light class generation --- .../CliLightClassGenerationSupport.java | 34 +++++++++++++------ .../compiler/KotlinToJVMBytecodeCompiler.java | 2 +- .../jet/cli/jvm/repl/ReplInterpreter.java | 3 +- .../lang/resolve/java/JvmAnalyzerFacade.kt | 5 ++- .../lang/resolve/CodeAnalyzerInitializer.kt | 7 ++-- .../checkers/AbstractJetDiagnosticsTest.java | 2 +- .../jvm/compiler/AbstractLoadJavaTest.java | 2 +- .../AbstractSdkAnnotationsValidityTest.java | 3 +- .../jet/jvm/compiler/LoadDescriptorUtil.java | 4 +-- .../jet/lang/resolve/lazy/JvmResolveUtil.java | 3 +- .../resolve/lazy/LazyResolveTestUtil.java | 2 +- .../resolve/JetExpectedResolveDataUtil.java | 4 ++- .../AbstractConstraintSystemTest.kt | 2 +- .../jet/types/JetTypeCheckerTest.java | 5 +-- .../NoInternalVisibilityInStdLibTest.kt | 2 +- 15 files changed, 50 insertions(+), 30 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliLightClassGenerationSupport.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliLightClassGenerationSupport.java index 2fcac6590cf..717907df7c2 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliLightClassGenerationSupport.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliLightClassGenerationSupport.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.cli.jvm.compiler; import com.google.common.base.Predicate; import com.google.common.collect.Collections2; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; @@ -30,6 +29,7 @@ import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.asJava.KotlinLightClassForExplicitDeclaration; import org.jetbrains.jet.asJava.LightClassConstructionContext; import org.jetbrains.jet.asJava.LightClassGenerationSupport; @@ -79,12 +79,11 @@ public class CliLightClassGenerationSupport extends LightClassGenerationSupport this.bindingContext = trace.getBindingContext(); this.module = module; - if (trace instanceof CliBindingTrace) { - ((CliBindingTrace) trace).setKotlinCodeAnalyzer(analyzer); - } - else { - assert ApplicationManager.getApplication().isUnitTestMode(); + if (!(trace instanceof CliBindingTrace)) { + throw new IllegalArgumentException("Shared trace is expected to be subclass of " + CliBindingTrace.class.getSimpleName() + " class"); } + + ((CliBindingTrace) trace).setKotlinCodeAnalyzer(analyzer); } @NotNull @@ -217,13 +216,13 @@ public class CliLightClassGenerationSupport extends LightClassGenerationSupport return KotlinLightClassForExplicitDeclaration.create(classOrObject.getManager(), classOrObject); } - public static BindingTrace createTrace() { - return new CliBindingTrace(); + @NotNull + @Override + public BindingTraceContext createTrace() { + return new NoScopeRecordCliBindingTrace(); } - public static class CliBindingTrace extends BindingTraceContext { - private KotlinCodeAnalyzer kotlinCodeAnalyzer; - + public static class NoScopeRecordCliBindingTrace extends CliBindingTrace { @Override public void record(WritableSlice slice, K key, V value) { if (slice == BindingContext.RESOLUTION_SCOPE || slice == BindingContext.TYPE_RESOLUTION_SCOPE) { @@ -233,6 +232,19 @@ public class CliLightClassGenerationSupport extends LightClassGenerationSupport super.record(slice, key, value); } + @Override + public String toString() { + return NoScopeRecordCliBindingTrace.class.getName(); + } + } + + public static class CliBindingTrace extends BindingTraceContext { + private KotlinCodeAnalyzer kotlinCodeAnalyzer; + + @TestOnly + public CliBindingTrace() { + } + @Override public String toString() { return CliBindingTrace.class.getName(); diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index aaf0ed62b2b..a198d5b1799 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -291,7 +291,7 @@ public class KotlinToJVMBytecodeCompiler { @NotNull @Override public AnalysisResult invoke() { - BindingTrace sharedTrace = CliLightClassGenerationSupport.createTrace(); + BindingTrace sharedTrace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); ModuleDescriptorImpl analyzeModule = TopDownAnalyzerFacadeForJVM.createAnalyzeModule(); return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java index 27150e39a47..33286233acc 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java @@ -37,6 +37,7 @@ import org.jetbrains.jet.cli.common.messages.AnalyzerWithCompilerReport; import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.cli.common.messages.MessageCollectorToString; import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys; +import org.jetbrains.jet.cli.jvm.compiler.CliLightClassGenerationSupport; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.codegen.ClassBuilderFactories; import org.jetbrains.jet.codegen.CompilationErrorHandler; @@ -102,7 +103,7 @@ public class ReplInterpreter { JetCoreEnvironment environment = JetCoreEnvironment.createForProduction(disposable, configuration); Project project = environment.getProject(); this.psiFileFactory = (PsiFileFactoryImpl) PsiFileFactory.getInstance(project); - this.trace = new BindingTraceContext(); + this.trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); this.module = TopDownAnalyzerFacadeForJVM.createJavaModule(""); GlobalContextImpl context = ContextPackage.GlobalContext(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAnalyzerFacade.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAnalyzerFacade.kt index 5eab9dc3015..b6647c60ebd 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAnalyzerFacade.kt +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAnalyzerFacade.kt @@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.jet.analyzer.ModuleInfo import org.jetbrains.jet.analyzer.ModuleContent import org.jetbrains.jet.di.InjectorForLazyResolveWithJava +import org.jetbrains.jet.lang.resolve.CodeAnalyzerInitializer public class JvmResolverForModule( override val lazyResolveSession: ResolveSession, @@ -63,7 +64,9 @@ public object JvmAnalyzerFacade : AnalyzerFacade(project, javaClass())!! @@ -36,4 +35,6 @@ public class DummyCodeAnalyzerInitializer: CodeAnalyzerInitializer { public override fun initialize(trace: BindingTrace, module: ModuleDescriptor, codeAnalyzer: KotlinCodeAnalyzer?) { // Do nothing } + + public override fun createTrace(): BindingTrace = BindingTraceContext() } \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/AbstractJetDiagnosticsTest.java b/compiler/tests/org/jetbrains/jet/checkers/AbstractJetDiagnosticsTest.java index 9d0993c79e6..0417e7e21d8 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/AbstractJetDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/jet/checkers/AbstractJetDiagnosticsTest.java @@ -98,7 +98,7 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest { allJetFiles.addAll(jetFiles); ModuleDescriptorImpl module = modules.get(testModule); - BindingTrace moduleTrace = CliLightClassGenerationSupport.createTrace(); + BindingTrace moduleTrace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); moduleBindings.put(testModule, moduleTrace.getBindingContext()); diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java index 5a825fefd01..24cc2e69bcf 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java @@ -145,7 +145,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File("compiler/tests")); // for @ExpectLoadError annotation JetCoreEnvironment environment = JetCoreEnvironment.createForTests(getTestRootDisposable(), configuration); - BindingTrace trace = CliLightClassGenerationSupport.createTrace(); + BindingTrace trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); ModuleDescriptorImpl module = TopDownAnalyzerFacadeForJVM.createAnalyzeModule(); TopDownAnalysisParameters parameters = TopDownAnalysisParameters.create( diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractSdkAnnotationsValidityTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractSdkAnnotationsValidityTest.java index 27ac6be2b40..05706dc2e40 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractSdkAnnotationsValidityTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractSdkAnnotationsValidityTest.java @@ -21,6 +21,7 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.util.Disposer; import com.intellij.testFramework.UsefulTestCase; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.cli.jvm.compiler.CliLightClassGenerationSupport; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver; import org.jetbrains.jet.di.InjectorForJavaDescriptorResolverUtil; @@ -69,7 +70,7 @@ public abstract class AbstractSdkAnnotationsValidityTest extends UsefulTestCase try { JetCoreEnvironment commonEnvironment = createEnvironment(parentDisposable); - BindingTrace trace = new BindingTraceContext(); + BindingTrace trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); InjectorForJavaDescriptorResolver injector = InjectorForJavaDescriptorResolverUtil.create(commonEnvironment.getProject(), trace, false); diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadDescriptorUtil.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadDescriptorUtil.java index 20e1ab99115..ef1ec9e2624 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadDescriptorUtil.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadDescriptorUtil.java @@ -41,7 +41,7 @@ import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor; import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.BindingTraceContext; +import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.lazy.JvmResolveUtil; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -90,7 +90,7 @@ public final class LoadDescriptorUtil { new File("compiler/tests") // for @ExpectLoadError annotation ); JetCoreEnvironment jetCoreEnvironment = JetCoreEnvironment.createForTests(disposable, configuration); - BindingTraceContext trace = new BindingTraceContext(); + BindingTrace trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); InjectorForJavaDescriptorResolver injector = InjectorForJavaDescriptorResolverUtil.create(jetCoreEnvironment.getProject(), trace, true); ModuleDescriptorImpl module = injector.getModule(); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/JvmResolveUtil.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/JvmResolveUtil.java index 97857479f05..50a4de3946f 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/JvmResolveUtil.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/JvmResolveUtil.java @@ -80,8 +80,7 @@ public class JvmResolveUtil { module.addDependencyOnModule(KotlinBuiltIns.getInstance().getBuiltInsModule()); module.seal(); - CliLightClassGenerationSupport lightClassGenerationSupport = CliLightClassGenerationSupport.getInstanceForCli(project); - BindingTrace trace = lightClassGenerationSupport != null ? CliLightClassGenerationSupport.createTrace() : new BindingTraceContext(); + BindingTrace trace = new CliLightClassGenerationSupport.CliBindingTrace(); return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( project, files, trace, filesToAnalyzeCompletely, module, null, null); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java index c32f0c42a8c..40038d472b2 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java @@ -53,7 +53,7 @@ public class LazyResolveTestUtil { globalContext.getExceptionTracker(), Predicates.alwaysTrue(), false, false); - BindingTrace trace = CliLightClassGenerationSupport.createTrace(); + BindingTrace trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); ModuleDescriptorImpl sharedModule = TopDownAnalyzerFacadeForJVM.createAnalyzeModule(); TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( diff --git a/compiler/tests/org/jetbrains/jet/resolve/JetExpectedResolveDataUtil.java b/compiler/tests/org/jetbrains/jet/resolve/JetExpectedResolveDataUtil.java index 27f2a08865a..ccefc7d9738 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/JetExpectedResolveDataUtil.java +++ b/compiler/tests/org/jetbrains/jet/resolve/JetExpectedResolveDataUtil.java @@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.JetTestUtils; +import org.jetbrains.jet.cli.jvm.compiler.CliLightClassGenerationSupport; import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver; import org.jetbrains.jet.di.InjectorForJavaDescriptorResolverUtil; import org.jetbrains.jet.di.InjectorForTests; @@ -116,7 +117,8 @@ public class JetExpectedResolveDataUtil { @NotNull private static PsiClass findClass(String qualifiedName, Project project) { - InjectorForJavaDescriptorResolver injector = InjectorForJavaDescriptorResolverUtil.create(project, new BindingTraceContext(), false); + BindingTraceContext trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); + InjectorForJavaDescriptorResolver injector = InjectorForJavaDescriptorResolverUtil.create(project, trace, false); JavaClass javaClass = injector.getJavaClassFinder().findClass(ClassId.topLevel(new FqName(qualifiedName))); Assert.assertNotNull("Class wasn't found: " + qualifiedName, javaClass); assertInstanceOf(javaClass, JavaClassImpl.class); diff --git a/compiler/tests/org/jetbrains/jet/resolve/constraintSystem/AbstractConstraintSystemTest.kt b/compiler/tests/org/jetbrains/jet/resolve/constraintSystem/AbstractConstraintSystemTest.kt index 7f664ecab47..4cb3fde4fcb 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/constraintSystem/AbstractConstraintSystemTest.kt +++ b/compiler/tests/org/jetbrains/jet/resolve/constraintSystem/AbstractConstraintSystemTest.kt @@ -55,7 +55,7 @@ abstract public class AbstractConstraintSystemTest() : JetLiteFixture() { override fun setUp() { super.setUp() - val injector = InjectorForTests(getProject(), JetTestUtils.createEmptyModule()!!) + val injector = InjectorForTests(getProject(), JetTestUtils.createEmptyModule()) _typeResolver = injector.getTypeResolver()!! _myDeclarations = analyzeDeclarations() } diff --git a/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java b/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java index 6e644c9fd6e..7977688c531 100644 --- a/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java +++ b/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java @@ -24,6 +24,7 @@ import org.jetbrains.jet.ConfigurationKind; import org.jetbrains.jet.JetLiteFixture; import org.jetbrains.jet.JetTestCaseBuilder; import org.jetbrains.jet.JetTestUtils; +import org.jetbrains.jet.cli.jvm.compiler.CliLightClassGenerationSupport; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver; import org.jetbrains.jet.di.InjectorForJavaDescriptorResolverUtil; @@ -600,8 +601,8 @@ public class JetTypeCheckerTest extends JetLiteFixture { private WritableScopeImpl addImports(JetScope scope) { WritableScopeImpl writableScope = new WritableScopeImpl( scope, scope.getContainingDeclaration(), RedeclarationHandler.DO_NOTHING, "JetTypeCheckerTest.addImports"); - InjectorForJavaDescriptorResolver injector = - InjectorForJavaDescriptorResolverUtil.create(getProject(), new BindingTraceContext(), true); + BindingTraceContext trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); + InjectorForJavaDescriptorResolver injector = InjectorForJavaDescriptorResolverUtil.create(getProject(), trace, true); ModuleDescriptor module = injector.getModule(); for (ImportPath defaultImport : module.getDefaultImports()) { writableScope.importScope(module.getPackage(defaultImport.fqnPart()).getMemberScope()); diff --git a/libraries/stdlib/validator/src/test/kotlin/NoInternalVisibilityInStdLibTest.kt b/libraries/stdlib/validator/src/test/kotlin/NoInternalVisibilityInStdLibTest.kt index db02cefd233..938d29b643d 100644 --- a/libraries/stdlib/validator/src/test/kotlin/NoInternalVisibilityInStdLibTest.kt +++ b/libraries/stdlib/validator/src/test/kotlin/NoInternalVisibilityInStdLibTest.kt @@ -120,7 +120,7 @@ class NoInternalVisibilityInStdLibTest { TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( environment.getProject(), environment.getSourceFiles(), - BindingTraceContext(), + CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), { true }, module, null,