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