From d737932bc7d9aeb14ec4785358d5f6eba4359eb4 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 6 May 2014 15:54:43 +0400 Subject: [PATCH] Remove usages of CodegenBinding.initTrace This is a low level JVM back-end detail; clients should be using GenerationState instead --- .../jet/codegen/ClassBuilderFactories.java | 23 +++++++++++++++++++ .../jet/codegen/binding/CodegenBinding.java | 6 +---- .../codegen/binding/PsiCodegenPredictor.java | 5 ++-- .../plugin/debugger/JetPositionManager.java | 18 +++++++-------- .../debugger/JetPositionManagerTest.java | 11 ++------- 5 files changed, 37 insertions(+), 26 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilderFactories.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilderFactories.java index e251d1e07cc..7bc9c7e09bb 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilderFactories.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBuilderFactories.java @@ -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() { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java index 5547b04991f..ea3c014e44a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java @@ -65,10 +65,6 @@ public class CodegenBinding { private CodegenBinding() { } - public static void initTrace(BindingTrace bindingTrace, Collection files) { - initTrace(bindingTrace, files, GenerationState.GenerateClassFilter.GENERATE_ALL); - } - public static void initTrace(BindingTrace bindingTrace, Collection 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 allFilesInPackages(BindingContext bindingContext, Collection files) { + private static Collection allFilesInPackages(BindingContext bindingContext, Collection 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 diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java index f89b66ca808..fffbd45c742 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java @@ -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()); diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java b/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java index 8632bd7239e..8ef0bf6665f 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java +++ b/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java @@ -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(typeMapper, PsiModificationTracker.MODIFICATION_COUNT); + GenerationState state = new GenerationState(file.getProject(), ClassBuilderFactories.THROW_EXCEPTION, + analyzeExhaust.getBindingContext(), new ArrayList(packageFiles)); + state.beforeCompile(); + return new Result(state.getTypeMapper(), PsiModificationTracker.MODIFICATION_COUNT); } }, false); myTypeMappers.put(fqName, value); diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/JetPositionManagerTest.java b/idea/tests/org/jetbrains/jet/plugin/debugger/JetPositionManagerTest.java index 128dbbed446..9cc4d5733e0 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/JetPositionManagerTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/JetPositionManagerTest.java @@ -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;