JS: made JsCodeErrorReporter class static

This commit is contained in:
Alexey Tsvetkov
2014-12-18 20:37:57 +03:00
parent 200e3afbe1
commit b431bf6fc9
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.js.translate.reference; package org.jetbrains.kotlin.js.translate.reference;
import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.backend.js.ast.metadata.MetadataPackage; import com.google.dart.compiler.backend.js.ast.metadata.MetadataPackage;
import com.google.dart.compiler.common.SourceInfoImpl; import com.google.dart.compiler.common.SourceInfoImpl;
@@ -32,9 +31,8 @@ import org.jetbrains.kotlin.builtins.InlineStrategy;
import org.jetbrains.kotlin.builtins.InlineUtil; import org.jetbrains.kotlin.builtins.InlineUtil;
import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory2; import org.jetbrains.kotlin.diagnostics.DiagnosticFactory2;
import org.jetbrains.kotlin.diagnostics.DiagnosticSink;
import org.jetbrains.kotlin.diagnostics.ParametrizedDiagnostic; import org.jetbrains.kotlin.diagnostics.ParametrizedDiagnostic;
import org.jetbrains.kotlin.js.descriptors.DescriptorPredicate;
import org.jetbrains.kotlin.js.descriptors.PatternBuilder;
import org.jetbrains.kotlin.js.resolve.diagnostics.ErrorsJs; import org.jetbrains.kotlin.js.resolve.diagnostics.ErrorsJs;
import org.jetbrains.kotlin.js.translate.callTranslator.CallTranslator; import org.jetbrains.kotlin.js.translate.callTranslator.CallTranslator;
import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.js.translate.context.TranslationContext;
@@ -140,7 +138,7 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl
return program().getEmptyExpression(); return program().getEmptyExpression();
} }
List<JsStatement> statements = parseJsCode(argumentExpression); List<JsStatement> statements = parseJsCode((JetStringTemplateExpression) argumentExpression);
int size = statements.size(); int size = statements.size();
if (size == 0) { if (size == 0) {
@@ -158,12 +156,12 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl
} }
@NotNull @NotNull
private List<JsStatement> parseJsCode(@NotNull JetExpression jsCodeExpression) { private List<JsStatement> parseJsCode(@NotNull JetStringTemplateExpression jsCodeExpression) {
Object jsCode = getCompileTimeValue(bindingContext(), jsCodeExpression); Object jsCode = getCompileTimeValue(bindingContext(), jsCodeExpression);
assert jsCode instanceof String: "jsCode must be compile time string"; assert jsCode instanceof String: "jsCode must be compile time string";
List<JsStatement> statements = new ArrayList<JsStatement>(); List<JsStatement> statements = new ArrayList<JsStatement>();
ErrorReporter errorReporter = new JsCodeErrorReporter(jsCodeExpression); ErrorReporter errorReporter = new JsCodeErrorReporter(jsCodeExpression, (String) jsCode, context().getTrace());
try { try {
SourceInfoImpl info = new SourceInfoImpl(null, 0, 0, 0, 0); SourceInfoImpl info = new SourceInfoImpl(null, 0, 0, 0, 0);
@@ -182,25 +180,37 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl
return statements; return statements;
} }
private class JsCodeErrorReporter implements ErrorReporter { private static class JsCodeErrorReporter implements ErrorReporter {
@NotNull @NotNull
private final JetExpression jsCodeExpression; private final JetExpression jsCodeExpression;
private JsCodeErrorReporter(@NotNull JetExpression expression) { @NotNull
jsCodeExpression = expression; private final String code;
@NotNull
private final DiagnosticSink trace;
JsCodeErrorReporter(@NotNull JetStringTemplateExpression jsCodeExpression,
@NotNull String code,
@NotNull DiagnosticSink trace
) {
this.jsCodeExpression = jsCodeExpression;
this.code = code;
this.trace = trace;
} }
@Override @Override
public void error(String message, String sourceName, int line, String lineSource, int lineOffset) { public void error(String message, String sourceName, int line, String lineSource, int lineOffset) {
ParametrizedDiagnostic<JetExpression> diagnostic = getDiagnostic(ErrorsJs.JSCODE_ERROR, message, line, lineOffset); ParametrizedDiagnostic<JetExpression> diagnostic = getDiagnostic(ErrorsJs.JSCODE_ERROR, message, line, lineOffset);
context().getTrace().report(diagnostic); trace.report(diagnostic);
throw new AbortParsingException(); throw new AbortParsingException();
} }
@Override @Override
public void warning(String message, String sourceName, int line, String lineSource, int lineOffset) { public void warning(String message, String sourceName, int line, String lineSource, int lineOffset) {
ParametrizedDiagnostic<JetExpression> diagnostic = getDiagnostic(ErrorsJs.JSCODE_WARNING, message, line, lineOffset); ParametrizedDiagnostic<JetExpression> diagnostic = getDiagnostic(ErrorsJs.JSCODE_WARNING, message, line, lineOffset);
context().getTrace().report(diagnostic); trace.report(diagnostic);
} }
/** /**
@@ -219,8 +229,7 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl
int line, int line,
int lineOffset int lineOffset
) { ) {
String text = (String) getCompileTimeValue(bindingContext(), jsCodeExpression); int offset = jsCodeExpression.getTextOffset() + offsetFromStart(code, line, lineOffset);
int offset = jsCodeExpression.getTextOffset() + offsetFromStart(text, line, lineOffset);
assert jsCodeExpression instanceof JetStringTemplateExpression: "js argument is expected to be compile-time string literal"; assert jsCodeExpression instanceof JetStringTemplateExpression: "js argument is expected to be compile-time string literal";
int quotesLength = jsCodeExpression.getFirstChild().getTextLength(); int quotesLength = jsCodeExpression.getFirstChild().getTextLength();
@@ -234,7 +243,7 @@ public final class CallExpressionTranslator extends AbstractCallExpressionTransl
* Calculates an offset from the start of a text for a position, * Calculates an offset from the start of a text for a position,
* defined by line and offset in that line. * defined by line and offset in that line.
*/ */
private int offsetFromStart(String text, int line, int offset) { private static int offsetFromStart(String text, int line, int offset) {
int i = 0; int i = 0;
int lineCount = 0; int lineCount = 0;
int offsetInLine = 0; int offsetInLine = 0;