JS: fixed nullability issues after conversion

This commit is contained in:
Alexey Tsvetkov
2015-03-26 13:56:38 +03:00
parent 1f705eb77a
commit 24aa19bd49
14 changed files with 110 additions and 104 deletions
@@ -5,6 +5,7 @@
package com.google.dart.compiler.backend.js; package com.google.dart.compiler.backend.js;
import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.backend.js.ast.*;
import org.jetbrains.annotations.NotNull;
/** /**
* Searches for method invocations in constructor expressions that would not * Searches for method invocations in constructor expressions that would not
@@ -29,7 +30,7 @@ public class JsConstructExpressionVisitor extends RecursiveJsVisitor {
* We only look at the array expression since the index has its own scope. * We only look at the array expression since the index has its own scope.
*/ */
@Override @Override
public void visitArrayAccess(JsArrayAccess x) { public void visitArrayAccess(@NotNull JsArrayAccess x) {
accept(x.getArrayExpression()); accept(x.getArrayExpression());
} }
@@ -37,23 +38,23 @@ public class JsConstructExpressionVisitor extends RecursiveJsVisitor {
* Array literals have their own scoping. * Array literals have their own scoping.
*/ */
@Override @Override
public void visitArray(JsArrayLiteral x) { public void visitArray(@NotNull JsArrayLiteral x) {
} }
/** /**
* Functions have their own scoping. * Functions have their own scoping.
*/ */
@Override @Override
public void visitFunction(JsFunction x) { public void visitFunction(@NotNull JsFunction x) {
} }
@Override @Override
public void visitInvocation(JsInvocation invocation) { public void visitInvocation(@NotNull JsInvocation invocation) {
containsInvocation = true; containsInvocation = true;
} }
@Override @Override
public void visitNameRef(JsNameRef nameRef) { public void visitNameRef(@NotNull JsNameRef nameRef) {
if (!nameRef.isLeaf()) { if (!nameRef.isLeaf()) {
accept(nameRef.getQualifier()); accept(nameRef.getQualifier());
} }
@@ -63,14 +64,14 @@ public class JsConstructExpressionVisitor extends RecursiveJsVisitor {
* New constructs bind to the nearest set of parentheses. * New constructs bind to the nearest set of parentheses.
*/ */
@Override @Override
public void visitNew(JsNew x) { public void visitNew(@NotNull JsNew x) {
} }
/** /**
* Object literals have their own scope. * Object literals have their own scope.
*/ */
@Override @Override
public void visitObjectLiteral(JsObjectLiteral x) { public void visitObjectLiteral(@NotNull JsObjectLiteral x) {
} }
/** /**
@@ -6,6 +6,7 @@ package com.google.dart.compiler.backend.js;
import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.backend.js.ast.JsExpressionStatement; import com.google.dart.compiler.backend.js.ast.JsExpressionStatement;
import org.jetbrains.annotations.NotNull;
/** /**
* Determines if an expression statement needs to be surrounded by parentheses. * Determines if an expression statement needs to be surrounded by parentheses.
@@ -49,56 +50,56 @@ public class JsFirstExpressionVisitor extends RecursiveJsVisitor {
} }
@Override @Override
public void visitArrayAccess(JsArrayAccess x) { public void visitArrayAccess(@NotNull JsArrayAccess x) {
accept(x.getArrayExpression()); accept(x.getArrayExpression());
} }
@Override @Override
public void visitArray(JsArrayLiteral x) { public void visitArray(@NotNull JsArrayLiteral x) {
} }
@Override @Override
public void visitBinaryExpression(JsBinaryOperation x) { public void visitBinaryExpression(@NotNull JsBinaryOperation x) {
accept(x.getArg1()); accept(x.getArg1());
} }
@Override @Override
public void visitConditional(JsConditional x) { public void visitConditional(@NotNull JsConditional x) {
accept(x.getTestExpression()); accept(x.getTestExpression());
} }
@Override @Override
public void visitFunction(JsFunction x) { public void visitFunction(@NotNull JsFunction x) {
needsParentheses = true; needsParentheses = true;
} }
@Override @Override
public void visitInvocation(JsInvocation invocation) { public void visitInvocation(@NotNull JsInvocation invocation) {
accept(invocation.getQualifier()); accept(invocation.getQualifier());
} }
@Override @Override
public void visitNameRef(JsNameRef nameRef) { public void visitNameRef(@NotNull JsNameRef nameRef) {
if (!nameRef.isLeaf()) { if (!nameRef.isLeaf()) {
accept(nameRef.getQualifier()); accept(nameRef.getQualifier());
} }
} }
@Override @Override
public void visitNew(JsNew x) { public void visitNew(@NotNull JsNew x) {
} }
@Override @Override
public void visitObjectLiteral(JsObjectLiteral x) { public void visitObjectLiteral(@NotNull JsObjectLiteral x) {
needsParentheses = true; needsParentheses = true;
} }
@Override @Override
public void visitPostfixOperation(JsPostfixOperation x) { public void visitPostfixOperation(@NotNull JsPostfixOperation x) {
accept(x.getArg()); accept(x.getArg());
} }
@Override @Override
public void visitPrefixOperation(JsPrefixOperation x) { public void visitPrefixOperation(@NotNull JsPrefixOperation x) {
} }
} }
@@ -5,6 +5,7 @@
package com.google.dart.compiler.backend.js; package com.google.dart.compiler.backend.js;
import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.backend.js.ast.*;
import org.jetbrains.annotations.NotNull;
/** /**
* Precedence indices from "JavaScript - The Definitive Guide" 4th Edition (page * Precedence indices from "JavaScript - The Definitive Guide" 4th Edition (page
@@ -45,42 +46,42 @@ class JsPrecedenceVisitor extends JsVisitor {
} }
@Override @Override
public void visitArrayAccess(JsArrayAccess x) { public void visitArrayAccess(@NotNull JsArrayAccess x) {
answer = 16; answer = 16;
} }
@Override @Override
public void visitArray(JsArrayLiteral x) { public void visitArray(@NotNull JsArrayLiteral x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitBinaryExpression(JsBinaryOperation x) { public void visitBinaryExpression(@NotNull JsBinaryOperation x) {
answer = x.getOperator().getPrecedence(); answer = x.getOperator().getPrecedence();
} }
@Override @Override
public void visitBoolean(JsLiteral.JsBooleanLiteral x) { public void visitBoolean(@NotNull JsLiteral.JsBooleanLiteral x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitConditional(JsConditional x) { public void visitConditional(@NotNull JsConditional x) {
answer = 3; answer = 3;
} }
@Override @Override
public void visitFunction(JsFunction x) { public void visitFunction(@NotNull JsFunction x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitInvocation(JsInvocation invocation) { public void visitInvocation(@NotNull JsInvocation invocation) {
answer = 16; answer = 16;
} }
@Override @Override
public void visitNameRef(JsNameRef nameRef) { public void visitNameRef(@NotNull JsNameRef nameRef) {
if (nameRef.isLeaf()) { if (nameRef.isLeaf()) {
answer = 17; // primary answer = 17; // primary
} }
@@ -90,62 +91,62 @@ class JsPrecedenceVisitor extends JsVisitor {
} }
@Override @Override
public void visitNew(JsNew x) { public void visitNew(@NotNull JsNew x) {
answer = PRECEDENCE_NEW; answer = PRECEDENCE_NEW;
} }
@Override @Override
public void visitNull(JsNullLiteral x) { public void visitNull(@NotNull JsNullLiteral x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitInt(JsNumberLiteral.JsIntLiteral x) { public void visitInt(@NotNull JsNumberLiteral.JsIntLiteral x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitDouble(JsNumberLiteral.JsDoubleLiteral x) { public void visitDouble(@NotNull JsNumberLiteral.JsDoubleLiteral x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitObjectLiteral(JsObjectLiteral x) { public void visitObjectLiteral(@NotNull JsObjectLiteral x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitPostfixOperation(JsPostfixOperation x) { public void visitPostfixOperation(@NotNull JsPostfixOperation x) {
answer = x.getOperator().getPrecedence(); answer = x.getOperator().getPrecedence();
} }
@Override @Override
public void visitPrefixOperation(JsPrefixOperation x) { public void visitPrefixOperation(@NotNull JsPrefixOperation x) {
answer = x.getOperator().getPrecedence(); answer = x.getOperator().getPrecedence();
} }
@Override @Override
public void visitPropertyInitializer(JsPropertyInitializer x) { public void visitPropertyInitializer(@NotNull JsPropertyInitializer x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitRegExp(JsRegExp x) { public void visitRegExp(@NotNull JsRegExp x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitString(JsStringLiteral x) { public void visitString(@NotNull JsStringLiteral x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
public void visitThis(JsLiteral.JsThisRef x) { public void visitThis(@NotNull JsLiteral.JsThisRef x) {
answer = 17; // primary answer = 17; // primary
} }
@Override @Override
protected void visitElement(JsNode node) { protected void visitElement(@NotNull JsNode node) {
throw new RuntimeException("Only expressions have precedence."); throw new RuntimeException("Only expressions have precedence.");
} }
} }
@@ -5,6 +5,7 @@
package com.google.dart.compiler.backend.js; package com.google.dart.compiler.backend.js;
import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.backend.js.ast.*;
import org.jetbrains.annotations.NotNull;
/** /**
* Determines if a statement at the end of a block requires a semicolon. * Determines if a statement at the end of a block requires a semicolon.
@@ -34,21 +35,21 @@ public class JsRequiresSemiVisitor extends JsVisitor {
} }
@Override @Override
public void visitFor(JsFor x) { public void visitFor(@NotNull JsFor x) {
if (x.getBody() instanceof JsEmpty) { if (x.getBody() instanceof JsEmpty) {
needsSemicolon = true; needsSemicolon = true;
} }
} }
@Override @Override
public void visitForIn(JsForIn x) { public void visitForIn(@NotNull JsForIn x) {
if (x.getBody() instanceof JsEmpty) { if (x.getBody() instanceof JsEmpty) {
needsSemicolon = true; needsSemicolon = true;
} }
} }
@Override @Override
public void visitIf(JsIf x) { public void visitIf(@NotNull JsIf x) {
JsStatement thenStmt = x.getThenStatement(); JsStatement thenStmt = x.getThenStatement();
JsStatement elseStmt = x.getElseStatement(); JsStatement elseStmt = x.getElseStatement();
JsStatement toCheck = thenStmt; JsStatement toCheck = thenStmt;
@@ -65,14 +66,14 @@ public class JsRequiresSemiVisitor extends JsVisitor {
} }
@Override @Override
public void visitLabel(JsLabel x) { public void visitLabel(@NotNull JsLabel x) {
if (x.getStatement() instanceof JsEmpty) { if (x.getStatement() instanceof JsEmpty) {
needsSemicolon = true; needsSemicolon = true;
} }
} }
@Override @Override
public void visitWhile(JsWhile x) { public void visitWhile(@NotNull JsWhile x) {
if (x.getBody() instanceof JsEmpty) { if (x.getBody() instanceof JsEmpty) {
needsSemicolon = true; needsSemicolon = true;
} }
@@ -8,6 +8,7 @@ import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.backend.js.ast.JsVars.JsVar; import com.google.dart.compiler.backend.js.ast.JsVars.JsVar;
import com.google.dart.compiler.util.TextOutput; import com.google.dart.compiler.util.TextOutput;
import gnu.trove.THashSet; import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -200,7 +201,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitArrayAccess(JsArrayAccess x) { public void visitArrayAccess(@NotNull JsArrayAccess x) {
printPair(x, x.getArrayExpression()); printPair(x, x.getArrayExpression());
leftSquare(); leftSquare();
accept(x.getIndexExpression()); accept(x.getIndexExpression());
@@ -208,7 +209,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitArray(JsArrayLiteral x) { public void visitArray(@NotNull JsArrayLiteral x) {
leftSquare(); leftSquare();
printExpressions(x.getExpressions()); printExpressions(x.getExpressions());
rightSquare(); rightSquare();
@@ -227,7 +228,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitBinaryExpression(JsBinaryOperation binaryOperation) { public void visitBinaryExpression(@NotNull JsBinaryOperation binaryOperation) {
JsBinaryOperator operator = binaryOperation.getOperator(); JsBinaryOperator operator = binaryOperation.getOperator();
JsExpression arg1 = binaryOperation.getArg1(); JsExpression arg1 = binaryOperation.getArg1();
boolean isExpressionEnclosed = parenPush(binaryOperation, arg1, !operator.isLeftAssociative()); boolean isExpressionEnclosed = parenPush(binaryOperation, arg1, !operator.isLeftAssociative());
@@ -272,12 +273,12 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitBlock(JsBlock x) { public void visitBlock(@NotNull JsBlock x) {
printJsBlock(x, true); printJsBlock(x, true);
} }
@Override @Override
public void visitBoolean(JsLiteral.JsBooleanLiteral x) { public void visitBoolean(@NotNull JsLiteral.JsBooleanLiteral x) {
if (x.getValue()) { if (x.getValue()) {
p.print(CHARS_TRUE); p.print(CHARS_TRUE);
} }
@@ -287,13 +288,13 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitBreak(JsBreak x) { public void visitBreak(@NotNull JsBreak x) {
p.print(CHARS_BREAK); p.print(CHARS_BREAK);
continueOrBreakLabel(x); continueOrBreakLabel(x);
} }
@Override @Override
public void visitContinue(JsContinue x) { public void visitContinue(@NotNull JsContinue x) {
p.print(CHARS_CONTINUE); p.print(CHARS_CONTINUE);
continueOrBreakLabel(x); continueOrBreakLabel(x);
} }
@@ -307,7 +308,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitCase(JsCase x) { public void visitCase(@NotNull JsCase x) {
p.print(CHARS_CASE); p.print(CHARS_CASE);
space(); space();
accept(x.getCaseExpression()); accept(x.getCaseExpression());
@@ -332,7 +333,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitCatch(JsCatch x) { public void visitCatch(@NotNull JsCatch x) {
spaceOpt(); spaceOpt();
p.print(CHARS_CATCH); p.print(CHARS_CATCH);
spaceOpt(); spaceOpt();
@@ -355,7 +356,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitConditional(JsConditional x) { public void visitConditional(@NotNull JsConditional x) {
// Associativity: for the then and else branches, it is safe to insert // Associativity: for the then and else branches, it is safe to insert
// another // another
// ternary expression, but if the test expression is a ternary, it should // ternary expression, but if the test expression is a ternary, it should
@@ -387,12 +388,12 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitDebugger(JsDebugger x) { public void visitDebugger(@NotNull JsDebugger x) {
p.print(CHARS_DEBUGGER); p.print(CHARS_DEBUGGER);
} }
@Override @Override
public void visitDefault(JsDefault x) { public void visitDefault(@NotNull JsDefault x) {
p.print(CHARS_DEFAULT); p.print(CHARS_DEFAULT);
_colon(); _colon();
@@ -400,7 +401,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitWhile(JsWhile x) { public void visitWhile(@NotNull JsWhile x) {
_while(); _while();
spaceOpt(); spaceOpt();
leftParen(); leftParen();
@@ -412,7 +413,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitDoWhile(JsDoWhile x) { public void visitDoWhile(@NotNull JsDoWhile x) {
p.print(CHARS_DO); p.print(CHARS_DO);
nestedPush(x.getBody()); nestedPush(x.getBody());
accept(x.getBody()); accept(x.getBody());
@@ -433,11 +434,11 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitEmpty(JsEmpty x) { public void visitEmpty(@NotNull JsEmpty x) {
} }
@Override @Override
public void visitExpressionStatement(JsExpressionStatement x) { public void visitExpressionStatement(@NotNull JsExpressionStatement x) {
boolean surroundWithParentheses = JsFirstExpressionVisitor.exec(x); boolean surroundWithParentheses = JsFirstExpressionVisitor.exec(x);
if (surroundWithParentheses) { if (surroundWithParentheses) {
leftParen(); leftParen();
@@ -449,7 +450,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitFor(JsFor x) { public void visitFor(@NotNull JsFor x) {
_for(); _for();
spaceOpt(); spaceOpt();
leftParen(); leftParen();
@@ -488,7 +489,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitForIn(JsForIn x) { public void visitForIn(@NotNull JsForIn x) {
_for(); _for();
spaceOpt(); spaceOpt();
leftParen(); leftParen();
@@ -523,7 +524,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitFunction(JsFunction x) { public void visitFunction(@NotNull JsFunction x) {
p.print(CHARS_FUNCTION); p.print(CHARS_FUNCTION);
space(); space();
if (x.getName() != null) { if (x.getName() != null) {
@@ -546,7 +547,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitIf(JsIf x) { public void visitIf(@NotNull JsIf x) {
_if(); _if();
spaceOpt(); spaceOpt();
leftParen(); leftParen();
@@ -585,7 +586,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitInvocation(JsInvocation invocation) { public void visitInvocation(@NotNull JsInvocation invocation) {
printPair(invocation, invocation.getQualifier()); printPair(invocation, invocation.getQualifier());
leftParen(); leftParen();
@@ -594,7 +595,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitLabel(JsLabel x) { public void visitLabel(@NotNull JsLabel x) {
nameOf(x); nameOf(x);
_colon(); _colon();
spaceOpt(); spaceOpt();
@@ -602,7 +603,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitNameRef(JsNameRef nameRef) { public void visitNameRef(@NotNull JsNameRef nameRef) {
JsExpression qualifier = nameRef.getQualifier(); JsExpression qualifier = nameRef.getQualifier();
if (qualifier != null) { if (qualifier != null) {
final boolean enclose; final boolean enclose;
@@ -633,7 +634,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitNew(JsNew x) { public void visitNew(@NotNull JsNew x) {
p.print(CHARS_NEW); p.print(CHARS_NEW);
space(); space();
@@ -653,22 +654,22 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitNull(JsNullLiteral x) { public void visitNull(@NotNull JsNullLiteral x) {
p.print(CHARS_NULL); p.print(CHARS_NULL);
} }
@Override @Override
public void visitInt(JsIntLiteral x) { public void visitInt(@NotNull JsIntLiteral x) {
p.print(x.value); p.print(x.value);
} }
@Override @Override
public void visitDouble(JsDoubleLiteral x) { public void visitDouble(@NotNull JsDoubleLiteral x) {
p.print(x.value); p.print(x.value);
} }
@Override @Override
public void visitObjectLiteral(JsObjectLiteral objectLiteral) { public void visitObjectLiteral(@NotNull JsObjectLiteral objectLiteral) {
p.print('{'); p.print('{');
if (objectLiteral.isMultiline()) { if (objectLiteral.isMultiline()) {
p.indentIn(); p.indentIn();
@@ -720,12 +721,12 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitParameter(JsParameter x) { public void visitParameter(@NotNull JsParameter x) {
nameOf(x); nameOf(x);
} }
@Override @Override
public void visitPostfixOperation(JsPostfixOperation x) { public void visitPostfixOperation(@NotNull JsPostfixOperation x) {
JsUnaryOperator op = x.getOperator(); JsUnaryOperator op = x.getOperator();
JsExpression arg = x.getArg(); JsExpression arg = x.getArg();
// unary operators always associate correctly (I think) // unary operators always associate correctly (I think)
@@ -734,7 +735,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitPrefixOperation(JsPrefixOperation x) { public void visitPrefixOperation(@NotNull JsPrefixOperation x) {
JsUnaryOperator op = x.getOperator(); JsUnaryOperator op = x.getOperator();
p.print(op.getSymbol()); p.print(op.getSymbol());
JsExpression arg = x.getArg(); JsExpression arg = x.getArg();
@@ -746,17 +747,17 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitProgram(JsProgram x) { public void visitProgram(@NotNull JsProgram x) {
p.print("<JsProgram>"); p.print("<JsProgram>");
} }
@Override @Override
public void visitProgramFragment(JsProgramFragment x) { public void visitProgramFragment(@NotNull JsProgramFragment x) {
p.print("<JsProgramFragment>"); p.print("<JsProgramFragment>");
} }
@Override @Override
public void visitRegExp(JsRegExp x) { public void visitRegExp(@NotNull JsRegExp x) {
slash(); slash();
p.print(x.getPattern()); p.print(x.getPattern());
slash(); slash();
@@ -767,7 +768,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitReturn(JsReturn x) { public void visitReturn(@NotNull JsReturn x) {
p.print(CHARS_RETURN); p.print(CHARS_RETURN);
JsExpression expr = x.getExpression(); JsExpression expr = x.getExpression();
if (expr != null) { if (expr != null) {
@@ -777,12 +778,12 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitString(JsStringLiteral x) { public void visitString(@NotNull JsStringLiteral x) {
p.print(javaScriptString(x.getValue())); p.print(javaScriptString(x.getValue()));
} }
@Override @Override
public void visit(JsSwitch x) { public void visit(@NotNull JsSwitch x) {
p.print(CHARS_SWITCH); p.print(CHARS_SWITCH);
spaceOpt(); spaceOpt();
leftParen(); leftParen();
@@ -795,19 +796,19 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitThis(JsLiteral.JsThisRef x) { public void visitThis(@NotNull JsLiteral.JsThisRef x) {
p.print(CHARS_THIS); p.print(CHARS_THIS);
} }
@Override @Override
public void visitThrow(JsThrow x) { public void visitThrow(@NotNull JsThrow x) {
p.print(CHARS_THROW); p.print(CHARS_THROW);
space(); space();
accept(x.getExpression()); accept(x.getExpression());
} }
@Override @Override
public void visitTry(JsTry x) { public void visitTry(@NotNull JsTry x) {
p.print(CHARS_TRY); p.print(CHARS_TRY);
spaceOpt(); spaceOpt();
accept(x.getTryBlock()); accept(x.getTryBlock());
@@ -823,7 +824,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visit(JsVar var) { public void visit(@NotNull JsVar var) {
nameOf(var); nameOf(var);
JsExpression initExpr = var.getInitExpression(); JsExpression initExpr = var.getInitExpression();
if (initExpr != null) { if (initExpr != null) {
@@ -839,7 +840,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitVars(JsVars vars) { public void visitVars(@NotNull JsVars vars) {
var(); var();
space(); space();
boolean sep = false; boolean sep = false;
@@ -860,7 +861,7 @@ public class JsToStringGenerationVisitor extends JsVisitor {
} }
@Override @Override
public void visitDocComment(JsDocComment comment) { public void visitDocComment(@NotNull JsDocComment comment) {
boolean asSingleLine = comment.getTags().size() == 1; boolean asSingleLine = comment.getTags().size() == 1;
if (!asSingleLine) { if (!asSingleLine) {
newlineOpt(); newlineOpt();
@@ -7,8 +7,8 @@ package com.google.dart.compiler.backend.js.ast
import com.google.dart.compiler.backend.js.ast.JsVars.JsVar import com.google.dart.compiler.backend.js.ast.JsVars.JsVar
public abstract class JsVisitor { public abstract class JsVisitor {
public open fun <T : JsNode> accept(node: T) { public open fun <T : JsNode?> accept(node: T) {
node.accept(this) node?.accept(this)
} }
public fun <T : JsNode> acceptList(collection: List<T>) { public fun <T : JsNode> acceptList(collection: List<T>) {
@@ -1,8 +1,10 @@
package com.google.dart.compiler.backend.js.ast; package com.google.dart.compiler.backend.js.ast;
import org.jetbrains.annotations.NotNull;
public abstract class RecursiveJsVisitor extends JsVisitor { public abstract class RecursiveJsVisitor extends JsVisitor {
@Override @Override
protected void visitElement(JsNode node) { protected void visitElement(@NotNull JsNode node) {
node.acceptChildren(this); node.acceptChildren(this);
} }
} }
@@ -23,7 +23,7 @@ import java.util.ArrayList
class InstanceCollector<T : JsNode>(val klass: Class<T>) : RecursiveJsVisitor() { class InstanceCollector<T : JsNode>(val klass: Class<T>) : RecursiveJsVisitor() {
public val collected: MutableList<T> = ArrayList() public val collected: MutableList<T> = ArrayList()
override fun visitElement(node: JsNode?) { override fun visitElement(node: JsNode) {
if (klass.isInstance(node)) { if (klass.isInstance(node)) {
collected.add(klass.cast(node)!!) collected.add(klass.cast(node)!!)
} }
@@ -28,12 +28,12 @@ import java.util.HashMap
class NameCollector(private val scope: JsScope) : RecursiveJsVisitor() { class NameCollector(private val scope: JsScope) : RecursiveJsVisitor() {
public val names: MutableMap<String, JsName> = HashMap() public val names: MutableMap<String, JsName> = HashMap()
override fun visit(x: JsVars.JsVar?) { override fun visit(x: JsVars.JsVar) {
super.visit(x) super.visit(x)
addNameIfNeeded(x) addNameIfNeeded(x)
} }
override fun visitFunction(x: JsFunction?) { } override fun visitFunction(x: JsFunction) { }
private fun addNameIfNeeded(hasName: HasName?) { private fun addNameIfNeeded(hasName: HasName?) {
val name = hasName?.getName() val name = hasName?.getName()
@@ -24,14 +24,14 @@ import java.util.IdentityHashMap
class PropertyCollector : RecursiveJsVisitor() { class PropertyCollector : RecursiveJsVisitor() {
public val properties: IdentityHashMap<JsName, JsExpression> = IdentityHashMap() public val properties: IdentityHashMap<JsName, JsExpression> = IdentityHashMap()
override fun visitPropertyInitializer(x: JsPropertyInitializer?) { override fun visitPropertyInitializer(x: JsPropertyInitializer) {
super.visitPropertyInitializer(x) super.visitPropertyInitializer(x)
val label = x?.getLabelExpr() as? JsNameRef val label = x.getLabelExpr() as? JsNameRef
val name = label?.getName() val name = label?.getName()
if (name == null) return if (name == null) return
val value = x?.getValueExpr() val value = x.getValueExpr()
properties[name] = value properties[name] = value
} }
} }
@@ -46,7 +46,7 @@ private open class SideEffectVisitor() : RecursiveJsVisitor() {
public var sideEffectFree: Boolean = true public var sideEffectFree: Boolean = true
protected set protected set
override fun visitElement(node: JsNode?) { override fun visitElement(node: JsNode) {
sideEffectFree = sideEffectFree && isSideEffectFree(node) sideEffectFree = sideEffectFree && isSideEffectFree(node)
if (sideEffectFree) { if (sideEffectFree) {
@@ -54,7 +54,7 @@ private open class SideEffectVisitor() : RecursiveJsVisitor() {
} }
} }
protected open fun isSideEffectFree(node: JsNode?): Boolean = protected open fun isSideEffectFree(node: JsNode): Boolean =
when (node) { when (node) {
is JsValueLiteral, is JsValueLiteral,
is JsConditional, is JsConditional,
@@ -70,7 +70,7 @@ private open class SideEffectVisitor() : RecursiveJsVisitor() {
} }
private class NeedToAliasVisitor() : SideEffectVisitor() { private class NeedToAliasVisitor() : SideEffectVisitor() {
override fun isSideEffectFree(node: JsNode?): Boolean = override fun isSideEffectFree(node: JsNode): Boolean =
when (node) { when (node) {
is JsThisRef, is JsThisRef,
is JsConditional, is JsConditional,
@@ -56,7 +56,7 @@ public class CallCounter extends RecursiveJsVisitor {
} }
@Override @Override
public void visitInvocation(JsInvocation invocation) { public void visitInvocation(@NotNull JsInvocation invocation) {
super.visitInvocation(invocation); super.visitInvocation(invocation);
JsExpression qualifier = invocation.getQualifier(); JsExpression qualifier = invocation.getQualifier();
@@ -20,6 +20,7 @@ import com.google.dart.compiler.backend.js.JsToStringGenerationVisitor;
import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.TextOutput; import com.google.dart.compiler.util.TextOutput;
import com.intellij.util.SmartList; import com.intellij.util.SmartList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.List; import java.util.List;
@@ -37,7 +38,7 @@ public class JsSourceGenerationVisitor extends JsToStringGenerationVisitor imple
} }
@Override @Override
public void visitProgramFragment(JsProgramFragment x) { public void visitProgramFragment(@NotNull JsProgramFragment x) {
x.acceptChildren(this); x.acceptChildren(this);
} }
@@ -87,7 +88,7 @@ public class JsSourceGenerationVisitor extends JsToStringGenerationVisitor imple
} }
@Override @Override
public void visitProgram(JsProgram program) { public void visitProgram(@NotNull JsProgram program) {
program.acceptChildren(this); program.acceptChildren(this);
if (sourceMapBuilder != null) { if (sourceMapBuilder != null) {
sourceMapBuilder.addLink(); sourceMapBuilder.addLink();
@@ -51,9 +51,7 @@ fun setInlineCallMetadata(
val name = context.aliasedName(descriptor) val name = context.aliasedName(descriptor)
val visitor = object : RecursiveJsVisitor() { val visitor = object : RecursiveJsVisitor() {
override fun visitInvocation(invocation: JsInvocation?) { override fun visitInvocation(invocation: JsInvocation) {
if (invocation == null) return
super.visitInvocation(invocation) super.visitInvocation(invocation)
if (name == invocation.name) { if (name == invocation.name) {