Report errors in JS source maps as compiler warnings
This commit is contained in:
@@ -135,7 +135,7 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
||||
configuration.put(CommonConfigurationKeys.MODULE_NAME, FileUtil.getNameWithoutExtension(outputFile));
|
||||
|
||||
JsConfig config = new JsConfig(project, configuration);
|
||||
if (config.checkLibFilesAndReportErrors(new JsConfig.Reporter() {
|
||||
JsConfig.Reporter reporter = new JsConfig.Reporter() {
|
||||
@Override
|
||||
public void error(@NotNull String message) {
|
||||
messageCollector.report(ERROR, message, null);
|
||||
@@ -145,7 +145,8 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
||||
public void warning(@NotNull String message) {
|
||||
messageCollector.report(STRONG_WARNING, message, null);
|
||||
}
|
||||
})) {
|
||||
};
|
||||
if (config.checkLibFilesAndReportErrors(reporter)) {
|
||||
return COMPILATION_ERROR;
|
||||
}
|
||||
|
||||
@@ -184,7 +185,7 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
||||
K2JSTranslator translator = new K2JSTranslator(config);
|
||||
try {
|
||||
//noinspection unchecked
|
||||
translationResult = translator.translate(sourcesFiles, mainCallParameters, jsAnalysisResult);
|
||||
translationResult = translator.translate(reporter, sourcesFiles, mainCallParameters, jsAnalysisResult);
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw ExceptionUtilsKt.rethrow(e);
|
||||
|
||||
+2
-1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.hasError
|
||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
|
||||
import org.jetbrains.kotlin.js.config.JsConfig
|
||||
import org.jetbrains.kotlin.js.facade.K2JSTranslator
|
||||
import org.jetbrains.kotlin.js.facade.MainCallParameters
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
@@ -38,7 +39,7 @@ abstract class AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation : Abstra
|
||||
|
||||
if (!hasError(diagnostics)) {
|
||||
val translator = K2JSTranslator(config)
|
||||
translator.translate(files, MainCallParameters.noCall(), analysisResult)
|
||||
translator.translate(object : JsConfig.Reporter() {}, files, MainCallParameters.noCall(), analysisResult)
|
||||
}
|
||||
|
||||
return analysisResult
|
||||
|
||||
@@ -49,7 +49,12 @@ private val JS_IDENTIFIER="[$JS_IDENTIFIER_START][$JS_IDENTIFIER_PART]*"
|
||||
private val DEFINE_MODULE_PATTERN = ("($JS_IDENTIFIER)\\.defineModule\\(\\s*(['\"])([^'\"]+)\\2\\s*,\\s*(\\w+)\\s*\\)").toRegex().toPattern()
|
||||
private val DEFINE_MODULE_FIND_PATTERN = ".defineModule("
|
||||
|
||||
class FunctionReader(private val config: JsConfig, private val currentModuleName: JsName, fragments: List<JsProgramFragment>) {
|
||||
class FunctionReader(
|
||||
private val reporter: JsConfig.Reporter,
|
||||
private val config: JsConfig,
|
||||
private val currentModuleName: JsName,
|
||||
fragments: List<JsProgramFragment>
|
||||
) {
|
||||
/**
|
||||
* fileContent: .js file content, that contains this module definition.
|
||||
* One file can contain more than one module definition.
|
||||
@@ -98,7 +103,10 @@ class FunctionReader(private val config: JsConfig, private val currentModuleName
|
||||
val result = SourceMapParser.parse(StringReader(it))
|
||||
when (result) {
|
||||
is SourceMapSuccess -> result.value
|
||||
is SourceMapError -> throw RuntimeException("Error parsing source map file: ${result.message}\n$it")
|
||||
is SourceMapError -> {
|
||||
reporter.warning("Error parsing source map file for $path: ${result.message}")
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ public class JsInliner extends JsVisitorWithContextImpl {
|
||||
node -> node instanceof JsInvocation && hasToBeInlined((JsInvocation) node);
|
||||
|
||||
public static void process(
|
||||
@NotNull JsConfig.Reporter reporter,
|
||||
@NotNull JsConfig config,
|
||||
@NotNull DiagnosticSink trace,
|
||||
@NotNull JsName currentModuleName,
|
||||
@@ -76,7 +77,7 @@ public class JsInliner extends JsVisitorWithContextImpl {
|
||||
accessorInvocationTransformer.accept(fragment.getDeclarationBlock());
|
||||
accessorInvocationTransformer.accept(fragment.getInitializerBlock());
|
||||
}
|
||||
FunctionReader functionReader = new FunctionReader(config, currentModuleName, fragments);
|
||||
FunctionReader functionReader = new FunctionReader(reporter, config, currentModuleName, fragments);
|
||||
JsInliner inliner = new JsInliner(config, functions, accessors, functionReader, trace);
|
||||
for (JsProgramFragment fragment : fragmentsToProcess) {
|
||||
inliner.inliningContexts.push(inliner.new JsInliningContext());
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.js.facade.K2JSTranslator
|
||||
import org.jetbrains.kotlin.js.facade.MainCallParameters
|
||||
import org.jetbrains.kotlin.js.facade.TranslationResult
|
||||
import org.jetbrains.kotlin.js.facade.TranslationUnit
|
||||
import org.jetbrains.kotlin.js.test.utils.ExceptionThrowingReporter
|
||||
import org.jetbrains.kotlin.js.test.utils.LineCollector
|
||||
import org.jetbrains.kotlin.js.test.utils.LineOutputToStringVisitor
|
||||
import org.jetbrains.kotlin.js.util.TextOutputImpl
|
||||
@@ -69,7 +70,7 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
|
||||
|
||||
val translator = K2JSTranslator(createConfig(module, file, modules))
|
||||
val units = module.files.map { TranslationUnit.SourceFile(createPsiFile(it.fileName)) }
|
||||
val translationResult = translator.translateUnits(units, MainCallParameters.noCall())
|
||||
val translationResult = translator.translateUnits(ExceptionThrowingReporter, units, MainCallParameters.noCall())
|
||||
|
||||
if (translationResult !is TranslationResult.Success) {
|
||||
val outputStream = ByteArrayOutputStream()
|
||||
|
||||
@@ -331,7 +331,7 @@ abstract class BasicBoxTest(
|
||||
outputPostfixFile: File?,
|
||||
mainCallParameters: MainCallParameters) {
|
||||
val translator = K2JSTranslator(config)
|
||||
val translationResult = translator.translateUnits(units, mainCallParameters)
|
||||
val translationResult = translator.translateUnits(ExceptionThrowingReporter, units, mainCallParameters)
|
||||
|
||||
if (translationResult !is TranslationResult.Success) {
|
||||
val outputStream = ByteArrayOutputStream()
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2010-2017 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.test.utils
|
||||
|
||||
import org.jetbrains.kotlin.js.config.JsConfig
|
||||
|
||||
object ExceptionThrowingReporter : JsConfig.Reporter() {
|
||||
override fun error(message: String) {
|
||||
throw AssertionError("Error message reported: $message")
|
||||
}
|
||||
}
|
||||
@@ -66,40 +66,44 @@ public final class K2JSTranslator {
|
||||
|
||||
@NotNull
|
||||
public TranslationResult translate(
|
||||
@NotNull JsConfig.Reporter reporter,
|
||||
@NotNull List<KtFile> files,
|
||||
@NotNull MainCallParameters mainCallParameters
|
||||
) throws TranslationException {
|
||||
return translate(files, mainCallParameters, null);
|
||||
return translate(reporter, files, mainCallParameters, null);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public TranslationResult translate(
|
||||
@NotNull JsConfig.Reporter reporter,
|
||||
@NotNull List<KtFile> files,
|
||||
@NotNull MainCallParameters mainCallParameters,
|
||||
@Nullable JsAnalysisResult analysisResult
|
||||
) throws TranslationException {
|
||||
List<TranslationUnit> units = new ArrayList<TranslationUnit>();
|
||||
List<TranslationUnit> units = new ArrayList<>();
|
||||
for (KtFile file : files) {
|
||||
units.add(new TranslationUnit.SourceFile(file));
|
||||
}
|
||||
return translateUnits(units, mainCallParameters, analysisResult);
|
||||
return translateUnits(reporter, units, mainCallParameters, analysisResult);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public TranslationResult translateUnits(
|
||||
@NotNull JsConfig.Reporter reporter,
|
||||
@NotNull List<TranslationUnit> units,
|
||||
@NotNull MainCallParameters mainCallParameters
|
||||
) throws TranslationException {
|
||||
return translateUnits(units, mainCallParameters, null);
|
||||
return translateUnits(reporter, units, mainCallParameters, null);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public TranslationResult translateUnits(
|
||||
@NotNull JsConfig.Reporter reporter,
|
||||
@NotNull List<TranslationUnit> units,
|
||||
@NotNull MainCallParameters mainCallParameters,
|
||||
@Nullable JsAnalysisResult analysisResult
|
||||
) throws TranslationException {
|
||||
List<KtFile> files = new ArrayList<KtFile>();
|
||||
List<KtFile> files = new ArrayList<>();
|
||||
for (TranslationUnit unit : units) {
|
||||
if (unit instanceof TranslationUnit.SourceFile) {
|
||||
files.add(((TranslationUnit.SourceFile) unit).getFile());
|
||||
@@ -120,10 +124,11 @@ public final class K2JSTranslator {
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||
if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics);
|
||||
|
||||
List<JsProgramFragment> newFragments = new ArrayList<JsProgramFragment>(translationResult.getNewFragments());
|
||||
List<JsProgramFragment> allFragments = new ArrayList<JsProgramFragment>(translationResult.getFragments());
|
||||
List<JsProgramFragment> newFragments = new ArrayList<>(translationResult.getNewFragments());
|
||||
List<JsProgramFragment> allFragments = new ArrayList<>(translationResult.getFragments());
|
||||
|
||||
JsInliner.process(config, analysisResult.getBindingTrace(), translationResult.getInnerModuleName(), allFragments, newFragments);
|
||||
JsInliner.process(reporter, config, analysisResult.getBindingTrace(), translationResult.getInnerModuleName(),
|
||||
allFragments, newFragments);
|
||||
|
||||
LabeledBlockToDoWhileTransformation.INSTANCE.apply(newFragments);
|
||||
|
||||
@@ -139,7 +144,7 @@ public final class K2JSTranslator {
|
||||
ExpandIsCallsKt.expandIsCalls(newFragments);
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||
|
||||
Map<KtFile, FileTranslationResult> fileMap = new HashMap<KtFile, FileTranslationResult>();
|
||||
Map<KtFile, FileTranslationResult> fileMap = new HashMap<>();
|
||||
JsAstSerializer serializer = new JsAstSerializer();
|
||||
byte[] metadataHeader = null;
|
||||
boolean serializeFragments = config.getConfiguration().get(JSConfigurationKeys.SERIALIZE_FRAGMENTS, false);
|
||||
|
||||
Reference in New Issue
Block a user