JS: use one BindingTrace for translation
This commit is contained in:
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||
import org.jetbrains.kotlin.di.InjectorForTopDownAnalyzerForJs;
|
||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
||||
import org.jetbrains.kotlin.js.config.Config;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
||||
@@ -61,7 +62,7 @@ public final class TopDownAnalyzerFacadeForJS {
|
||||
|
||||
//TODO: refactor
|
||||
@NotNull
|
||||
public static AnalysisResult analyzeFiles(
|
||||
public static JsAnalysisResult analyzeFiles(
|
||||
@NotNull Collection<JetFile> files,
|
||||
@NotNull Predicate<PsiFile> filesToAnalyzeCompletely,
|
||||
@NotNull Config config
|
||||
@@ -84,7 +85,7 @@ public final class TopDownAnalyzerFacadeForJS {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static AnalysisResult analyzeFilesWithGivenTrace(
|
||||
public static JsAnalysisResult analyzeFilesWithGivenTrace(
|
||||
@NotNull Collection<JetFile> files,
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull ModuleDescriptorImpl module,
|
||||
@@ -109,7 +110,7 @@ public final class TopDownAnalyzerFacadeForJS {
|
||||
try {
|
||||
injector.getLazyTopDownAnalyzerForTopLevel().analyzeFiles(topDownAnalysisParameters, allFiles,
|
||||
Collections.<PackageFragmentProvider>emptyList());
|
||||
return AnalysisResult.success(trace.getBindingContext(), module);
|
||||
return JsAnalysisResult.success(trace, module);
|
||||
}
|
||||
finally {
|
||||
injector.destroy();
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2010-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.js.analyzer
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.types.ErrorUtils
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
public class JsAnalysisResult(
|
||||
public val bindingTrace: BindingTrace,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
) : AnalysisResult(bindingTrace.getBindingContext(), moduleDescriptor) {
|
||||
|
||||
class object {
|
||||
platformStatic public fun success(trace: BindingTrace, module: ModuleDescriptor): JsAnalysisResult {
|
||||
return JsAnalysisResult(trace, module)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,9 +49,6 @@ public abstract class Config {
|
||||
|
||||
private final boolean sourcemap;
|
||||
|
||||
@NotNull
|
||||
private final BindingTrace trace = new BindingTraceContext();
|
||||
|
||||
public Config(
|
||||
@NotNull Project project,
|
||||
@NotNull String moduleId,
|
||||
@@ -107,11 +104,6 @@ public abstract class Config {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public BindingTrace getTrace() {
|
||||
return trace;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ModuleDescriptor getLibraryModule() {
|
||||
return null;
|
||||
|
||||
@@ -31,12 +31,12 @@ import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.analyzer.AnalysisResult;
|
||||
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
|
||||
import org.jetbrains.kotlin.backend.common.output.SimpleOutputFile;
|
||||
import org.jetbrains.kotlin.backend.common.output.SimpleOutputFileCollection;
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
||||
import org.jetbrains.kotlin.js.config.Config;
|
||||
import org.jetbrains.kotlin.js.facade.exceptions.TranslationException;
|
||||
import org.jetbrains.kotlin.js.inline.JsInliner;
|
||||
@@ -45,7 +45,7 @@ import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder;
|
||||
import org.jetbrains.kotlin.js.sourceMap.SourceMapBuilder;
|
||||
import org.jetbrains.kotlin.js.translate.general.Translation;
|
||||
import org.jetbrains.kotlin.psi.JetFile;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics;
|
||||
import org.jetbrains.kotlin.utils.fileUtils.FileUtilsPackage;
|
||||
|
||||
@@ -148,8 +148,12 @@ public final class K2JSTranslator {
|
||||
@Nullable SourceMapBuilder sourceMapBuilder,
|
||||
@NotNull Consumer<JsNode> astConsumer
|
||||
) throws TranslationException {
|
||||
JsProgram program = generateProgram(files, mainCallParameters);
|
||||
Diagnostics diagnostics = config.getTrace().getBindingContext().getDiagnostics();
|
||||
JsAnalysisResult analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(files, Predicates.<PsiFile>alwaysTrue(), config);
|
||||
BindingTrace bindingTrace = analysisResult.getBindingTrace();
|
||||
TopDownAnalyzerFacadeForJS.checkForErrors(Config.withJsLibAdded(files, config), bindingTrace.getBindingContext());
|
||||
ModuleDescriptor moduleDescriptor = analysisResult.getModuleDescriptor();
|
||||
JsProgram program = Translation.generateAst(bindingTrace, files, mainCallParameters, moduleDescriptor, config);
|
||||
Diagnostics diagnostics = bindingTrace.getBindingContext().getDiagnostics();
|
||||
|
||||
if (hasError(diagnostics)) return Status.fail();
|
||||
|
||||
@@ -160,17 +164,6 @@ public final class K2JSTranslator {
|
||||
return Status.success(output.toString());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JsProgram generateProgram(@NotNull List<JetFile> filesToTranslate,
|
||||
@NotNull MainCallParameters mainCallParameters)
|
||||
throws TranslationException {
|
||||
AnalysisResult analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(filesToTranslate, Predicates.<PsiFile>alwaysTrue(), config);
|
||||
BindingContext bindingContext = analysisResult.getBindingContext();
|
||||
TopDownAnalyzerFacadeForJS.checkForErrors(Config.withJsLibAdded(filesToTranslate, config), bindingContext);
|
||||
ModuleDescriptor moduleDescriptor = analysisResult.getModuleDescriptor();
|
||||
return Translation.generateAst(bindingContext, filesToTranslate, mainCallParameters, moduleDescriptor, config);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private Project getProject() {
|
||||
return config.getProject();
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.js.translate.intrinsic.Intrinsics;
|
||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.TasksPackage;
|
||||
import org.jetbrains.kotlin.types.reflect.ReflectionTypes;
|
||||
@@ -52,19 +53,19 @@ import static org.jetbrains.kotlin.resolve.DescriptorUtils.isExtension;
|
||||
*/
|
||||
public final class StaticContext {
|
||||
|
||||
public static StaticContext generateStaticContext(@NotNull BindingContext bindingContext, @NotNull Config config, @NotNull ModuleDescriptor moduleDescriptor) {
|
||||
public static StaticContext generateStaticContext(@NotNull BindingTrace bindingTrace, @NotNull Config config, @NotNull ModuleDescriptor moduleDescriptor) {
|
||||
JsProgram program = new JsProgram("main");
|
||||
Namer namer = Namer.newInstance(program.getRootScope());
|
||||
Intrinsics intrinsics = new Intrinsics();
|
||||
StandardClasses standardClasses = StandardClasses.bindImplementations(namer.getKotlinScope());
|
||||
return new StaticContext(program, bindingContext, namer, intrinsics, standardClasses, program.getRootScope(), config, moduleDescriptor);
|
||||
return new StaticContext(program, bindingTrace, namer, intrinsics, standardClasses, program.getRootScope(), config, moduleDescriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private final JsProgram program;
|
||||
|
||||
@NotNull
|
||||
private final BindingContext bindingContext;
|
||||
private final BindingTrace bindingTrace;
|
||||
@NotNull
|
||||
private final Namer namer;
|
||||
|
||||
@@ -101,11 +102,11 @@ public final class StaticContext {
|
||||
private final EcmaVersion ecmaVersion;
|
||||
|
||||
//TODO: too many parameters in constructor
|
||||
private StaticContext(@NotNull JsProgram program, @NotNull BindingContext bindingContext,
|
||||
private StaticContext(@NotNull JsProgram program, @NotNull BindingTrace bindingTrace,
|
||||
@NotNull Namer namer, @NotNull Intrinsics intrinsics,
|
||||
@NotNull StandardClasses standardClasses, @NotNull JsScope rootScope, @NotNull Config config, @NotNull ModuleDescriptor moduleDescriptor) {
|
||||
this.program = program;
|
||||
this.bindingContext = bindingContext;
|
||||
this.bindingTrace = bindingTrace;
|
||||
this.namer = namer;
|
||||
this.intrinsics = intrinsics;
|
||||
this.rootScope = rootScope;
|
||||
@@ -124,9 +125,14 @@ public final class StaticContext {
|
||||
return program;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public BindingTrace getBindingTrace() {
|
||||
return bindingTrace;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public BindingContext getBindingContext() {
|
||||
return bindingContext;
|
||||
return bindingTrace.getBindingContext();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+4
-1
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.js.translate.utils.TranslationUtils;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.psi.JetExpression;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||
import org.jetbrains.kotlin.types.reflect.ReflectionTypes;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -165,7 +166,9 @@ public class TranslationContext {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public DiagnosticSink getTrace() { return staticContext.getConfig().getTrace(); }
|
||||
public BindingTrace bindingTrace() {
|
||||
return staticContext.getBindingTrace();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JsScope getScopeForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
||||
|
||||
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.psi.JetExpression;
|
||||
import org.jetbrains.kotlin.psi.JetFile;
|
||||
import org.jetbrains.kotlin.psi.JetNamedFunction;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.BindingContextUtilPackage;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -161,13 +162,13 @@ public final class Translation {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsProgram generateAst(@NotNull BindingContext bindingContext,
|
||||
public static JsProgram generateAst(@NotNull BindingTrace bindingTrace,
|
||||
@NotNull Collection<JetFile> files, @NotNull MainCallParameters mainCallParameters,
|
||||
@NotNull ModuleDescriptor moduleDescriptor,
|
||||
@NotNull Config config)
|
||||
throws TranslationException {
|
||||
try {
|
||||
return doGenerateAst(bindingContext, files, mainCallParameters, moduleDescriptor, config);
|
||||
return doGenerateAst(bindingTrace, files, mainCallParameters, moduleDescriptor, config);
|
||||
}
|
||||
catch (UnsupportedOperationException e) {
|
||||
throw new UnsupportedFeatureException("Unsupported feature used.", e);
|
||||
@@ -178,11 +179,11 @@ public final class Translation {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JsProgram doGenerateAst(@NotNull BindingContext bindingContext, @NotNull Collection<JetFile> files,
|
||||
private static JsProgram doGenerateAst(@NotNull BindingTrace bindingTrace, @NotNull Collection<JetFile> files,
|
||||
@NotNull MainCallParameters mainCallParameters,
|
||||
@NotNull ModuleDescriptor moduleDescriptor,
|
||||
@NotNull Config config) throws MainFunctionNotFoundException {
|
||||
StaticContext staticContext = StaticContext.generateStaticContext(bindingContext, config, moduleDescriptor);
|
||||
StaticContext staticContext = StaticContext.generateStaticContext(bindingTrace, config, moduleDescriptor);
|
||||
JsProgram program = staticContext.getProgram();
|
||||
JsBlock block = program.getGlobalBlock();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user