diff --git a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java index 5c7a43bf0c4..9fa9e188a9e 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java @@ -50,6 +50,7 @@ import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.config.CompilerConfiguration; import org.jetbrains.jet.config.Services; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS; import org.jetbrains.k2js.config.*; @@ -148,9 +149,15 @@ public class K2JSCompiler extends CLICompiler { } MainCallParameters mainCallParameters = createMainCallParameters(arguments.main); - + BindingTraceContext trace = new BindingTraceContext(); + config.setTrace(trace); OutputFileCollection outputFiles = translate(mainCallParameters, config, sourcesFiles, outputFile, outputPrefixFile, outputPostfixFile); + Diagnostics diagnostics = trace.getBindingContext().getDiagnostics(); + if (AnalyzerWithCompilerReport.reportDiagnostics(diagnostics, messageCollector)) { + return ExitCode.COMPILATION_ERROR; + } + if (outputFile.isDirectory()) { messageCollector.report(CompilerMessageSeverity.ERROR, "Cannot open output file '" + outputFile.getPath() + "': is a directory", diff --git a/js/js.frontend/src/org/jetbrains/k2js/config/Config.java b/js/js.frontend/src/org/jetbrains/k2js/config/Config.java index 0d1c46fe193..33936f577c1 100644 --- a/js/js.frontend/src/org/jetbrains/k2js/config/Config.java +++ b/js/js.frontend/src/org/jetbrains/k2js/config/Config.java @@ -23,8 +23,13 @@ import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; +import org.jetbrains.jet.lang.diagnostics.DiagnosticSink; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.BindingTraceContext; +import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace; import java.util.Collection; import java.util.List; @@ -47,6 +52,9 @@ public abstract class Config { private final boolean sourcemap; + @NotNull + private DiagnosticSink trace = new BindingTraceContext(); + public Config( @NotNull Project project, @NotNull String moduleId, @@ -102,6 +110,15 @@ public abstract class Config { return null; } + @NotNull + public DiagnosticSink getTrace() { + return trace; + } + + public void setTrace(@NotNull DiagnosticSink trace) { + this.trace = trace; + } + @Nullable public ModuleDescriptor getLibraryModule() { return null; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java index d3df151326f..ff3f93ab4e0 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java @@ -24,9 +24,11 @@ import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.MemberDescriptor; import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; +import org.jetbrains.jet.lang.diagnostics.DiagnosticSink; import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.BindingTraceContext; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.k2js.config.Config; import org.jetbrains.k2js.translate.intrinsic.Intrinsics; @@ -163,6 +165,9 @@ public class TranslationContext { return staticContext.getBindingContext(); } + @NotNull + public DiagnosticSink getTrace() { return staticContext.getConfig().getTrace(); } + @NotNull public JsScope getScopeForDescriptor(@NotNull DeclarationDescriptor descriptor) { return staticContext.getScopeForDescriptor(descriptor);