Remove usages of CodegenBinding.initTrace

This is a low level JVM back-end detail; clients should be using
GenerationState instead
This commit is contained in:
Alexander Udalov
2014-05-06 15:54:43 +04:00
parent d42598a935
commit d737932bc7
5 changed files with 37 additions and 26 deletions
@@ -25,6 +25,29 @@ import java.io.StringWriter;
@SuppressWarnings("IOResourceOpenedButNotSafelyClosed")
public class ClassBuilderFactories {
@NotNull
public static ClassBuilderFactory THROW_EXCEPTION = new ClassBuilderFactory() {
@NotNull
@Override
public ClassBuilderMode getClassBuilderMode() {
return ClassBuilderMode.FULL;
}
@Override
public ClassBuilder newClassBuilder() {
throw new IllegalStateException();
}
@Override
public String asText(ClassBuilder builder) {
throw new IllegalStateException();
}
@Override
public byte[] asBytes(ClassBuilder builder) {
throw new IllegalStateException();
}
};
@NotNull
public static ClassBuilderFactory TEST = new ClassBuilderFactory() {
@@ -65,10 +65,6 @@ public class CodegenBinding {
private CodegenBinding() {
}
public static void initTrace(BindingTrace bindingTrace, Collection<JetFile> files) {
initTrace(bindingTrace, files, GenerationState.GenerateClassFilter.GENERATE_ALL);
}
public static void initTrace(BindingTrace bindingTrace, Collection<JetFile> files, GenerationState.GenerateClassFilter filter) {
CodegenAnnotatingVisitor visitor = new CodegenAnnotatingVisitor(bindingTrace, filter);
for (JetFile file : allFilesInPackages(bindingTrace.getBindingContext(), files)) {
@@ -239,7 +235,7 @@ public class CodegenBinding {
}
@NotNull
public static Collection<JetFile> allFilesInPackages(BindingContext bindingContext, Collection<JetFile> files) {
private static Collection<JetFile> allFilesInPackages(BindingContext bindingContext, Collection<JetFile> files) {
// todo: we use Set and add given files but ignoring other scripts because something non-clear kept in binding
// for scripts especially in case of REPL
@@ -21,8 +21,8 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.jet.codegen.PackageCodegen;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -34,6 +34,7 @@ import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.util.slicedmap.WritableSlice;
import org.jetbrains.org.objectweb.asm.Type;
import java.util.Collection;
@@ -160,7 +161,7 @@ public final class PsiCodegenPredictor {
}
};
CodegenBinding.initTrace(trace, allPackageFiles);
CodegenBinding.initTrace(trace, allPackageFiles, GenerationState.GenerateClassFilter.GENERATE_ALL);
return resultingDescriptor.isNull() ? null
: BindingContextUtils.getContainingFile(trace.getBindingContext(), resultingDescriptor.get());
@@ -34,18 +34,15 @@ import com.sun.jdi.request.ClassPrepareRequest;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.codegen.ClassBuilderMode;
import org.jetbrains.jet.codegen.ClassBuilderFactories;
import org.jetbrains.jet.codegen.PackageCodegen;
import org.jetbrains.jet.codegen.binding.CodegenBinding;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.JetTypeMapper;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument;
import org.jetbrains.jet.lang.resolve.extension.InlineAnalyzerExtension;
@@ -54,7 +51,9 @@ import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.types.lang.InlineStrategy;
import org.jetbrains.jet.lang.types.lang.InlineUtil;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
import org.jetbrains.jet.plugin.util.DebuggerUtils;
import org.jetbrains.org.objectweb.asm.Type;
import java.util.*;
@@ -201,11 +200,10 @@ public class JetPositionManager implements PositionManager {
AnalyzeExhaust analyzeExhaust = ResolvePackage.getAnalysisResultsForElements(packageFiles);
analyzeExhaust.throwIfError();
DelegatingBindingTrace bindingTrace = new DelegatingBindingTrace(analyzeExhaust.getBindingContext(), "trace created in JetPositionManager");
JetTypeMapper typeMapper = new JetTypeMapper(bindingTrace, ClassBuilderMode.FULL);
//noinspection unchecked
CodegenBinding.initTrace(bindingTrace, packageFiles);
return new Result<JetTypeMapper>(typeMapper, PsiModificationTracker.MODIFICATION_COUNT);
GenerationState state = new GenerationState(file.getProject(), ClassBuilderFactories.THROW_EXCEPTION,
analyzeExhaust.getBindingContext(), new ArrayList<JetFile>(packageFiles));
state.beforeCompile();
return new Result<JetTypeMapper>(state.getTypeMapper(), PsiModificationTracker.MODIFICATION_COUNT);
}
}, false);
myTypeMappers.put(fqName, value);
@@ -18,12 +18,8 @@ package org.jetbrains.jet.plugin.debugger;
import com.intellij.debugger.engine.DebugProcess;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.codegen.ClassBuilderMode;
import org.jetbrains.jet.codegen.binding.CodegenBinding;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.JetTypeMapper;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace;
import org.jetbrains.jet.plugin.PluginTestCaseBase;
import java.util.List;
@@ -37,6 +33,7 @@ public class JetPositionManagerTest extends PositionManagerTestCase {
return PluginTestCaseBase.getTestDataPathBase();
}
@NotNull
@Override
protected String getTestRoot() {
return "/debugger/";
@@ -48,12 +45,8 @@ public class JetPositionManagerTest extends PositionManagerTestCase {
JetPositionManager positionManager = (JetPositionManager) jetPositionManagerFactory.createPositionManager(process);
assertNotNull(positionManager);
DelegatingBindingTrace bindingTrace = new DelegatingBindingTrace(state.getBindingContext(), "trace created in JetPositionManagerTest");
JetTypeMapper typeMapper = new JetTypeMapper(bindingTrace, ClassBuilderMode.FULL);
//noinspection unchecked
CodegenBinding.initTrace(bindingTrace, files);
for (JetFile file : files) {
positionManager.addTypeMapper(file, typeMapper);
positionManager.addTypeMapper(file, state.getTypeMapper());
}
return positionManager;