LTDA: Assert context was created for light class generation

This commit is contained in:
Nikolay Krasko
2014-09-27 17:06:25 +04:00
parent 571f3c8524
commit a42edb9c8f
15 changed files with 50 additions and 30 deletions
@@ -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 <K, V> void record(WritableSlice<K, V> 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();
@@ -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(
@@ -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("<repl>");
GlobalContextImpl context = ContextPackage.GlobalContext();