JS: added @NotNull annotation to JsVisitorWithContext
This commit is contained in:
+94
-86
@@ -22,6 +22,8 @@ package com.google.dart.compiler.backend.js.ast;
|
|||||||
* file: dev/core/src/com/google/gwt/dev/js/ast/JsVisitor.java
|
* file: dev/core/src/com/google/gwt/dev/js/ast/JsVisitor.java
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,10 +33,14 @@ import java.util.List;
|
|||||||
public abstract class JsVisitorWithContext {
|
public abstract class JsVisitorWithContext {
|
||||||
|
|
||||||
public final <T extends JsNode> T accept(T node) {
|
public final <T extends JsNode> T accept(T node) {
|
||||||
|
if (node == null) return null;
|
||||||
|
|
||||||
return doAccept(node);
|
return doAccept(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JsExpression acceptLvalue(JsExpression expr) {
|
public JsExpression acceptLvalue(JsExpression expr) {
|
||||||
|
if (expr == null) return null;
|
||||||
|
|
||||||
return doAcceptLvalue(expr);
|
return doAcceptLvalue(expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,6 +49,8 @@ public abstract class JsVisitorWithContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final <T extends JsStatement> T acceptStatement(T statement) {
|
public final <T extends JsStatement> T acceptStatement(T statement) {
|
||||||
|
if (statement == null) return null;
|
||||||
|
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
return (T) doAcceptStatement(statement);
|
return (T) doAcceptStatement(statement);
|
||||||
}
|
}
|
||||||
@@ -51,304 +59,304 @@ public abstract class JsVisitorWithContext {
|
|||||||
doAcceptStatementList(statements);
|
doAcceptStatementList(statements);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsArrayAccess x, JsContext ctx) {
|
public void endVisit(@NotNull JsArrayAccess x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsArrayLiteral x, JsContext ctx) {
|
public void endVisit(@NotNull JsArrayLiteral x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsBinaryOperation x, JsContext ctx) {
|
public void endVisit(@NotNull JsBinaryOperation x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsBlock x, JsContext ctx) {
|
public void endVisit(@NotNull JsBlock x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsLiteral.JsBooleanLiteral x, JsContext ctx) {
|
public void endVisit(@NotNull JsLiteral.JsBooleanLiteral x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsBreak x, JsContext ctx) {
|
public void endVisit(@NotNull JsBreak x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsCase x, JsContext ctx) {
|
public void endVisit(@NotNull JsCase x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsCatch x, JsContext ctx) {
|
public void endVisit(@NotNull JsCatch x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsConditional x, JsContext ctx) {
|
public void endVisit(@NotNull JsConditional x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsContinue x, JsContext ctx) {
|
public void endVisit(@NotNull JsContinue x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsDebugger x, JsContext ctx) {
|
public void endVisit(@NotNull JsDebugger x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsDefault x, JsContext ctx) {
|
public void endVisit(@NotNull JsDefault x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsDoWhile x, JsContext ctx) {
|
public void endVisit(@NotNull JsDoWhile x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsEmpty x, JsContext ctx) {
|
public void endVisit(@NotNull JsEmpty x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsExpressionStatement x, JsContext ctx) {
|
public void endVisit(@NotNull JsExpressionStatement x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsFor x, JsContext ctx) {
|
public void endVisit(@NotNull JsFor x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsForIn x, JsContext ctx) {
|
public void endVisit(@NotNull JsForIn x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsFunction x, JsContext ctx) {
|
public void endVisit(@NotNull JsFunction x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsIf x, JsContext ctx) {
|
public void endVisit(@NotNull JsIf x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsInvocation x, JsContext ctx) {
|
public void endVisit(@NotNull JsInvocation x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsLabel x, JsContext ctx) {
|
public void endVisit(@NotNull JsLabel x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsName x, JsContext ctx) {
|
public void endVisit(@NotNull JsName x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsNameRef x, JsContext ctx) {
|
public void endVisit(@NotNull JsNameRef x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsNew x, JsContext ctx) {
|
public void endVisit(@NotNull JsNew x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsNullLiteral x, JsContext ctx) {
|
public void endVisit(@NotNull JsNullLiteral x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsNumberLiteral x, JsContext ctx) {
|
public void endVisit(@NotNull JsNumberLiteral x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsObjectLiteral x, JsContext ctx) {
|
public void endVisit(@NotNull JsObjectLiteral x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsParameter x, JsContext ctx) {
|
public void endVisit(@NotNull JsParameter x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsPostfixOperation x, JsContext ctx) {
|
public void endVisit(@NotNull JsPostfixOperation x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsPrefixOperation x, JsContext ctx) {
|
public void endVisit(@NotNull JsPrefixOperation x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsProgram x, JsContext ctx) {
|
public void endVisit(@NotNull JsProgram x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsProgramFragment x, JsContext ctx) {
|
public void endVisit(@NotNull JsProgramFragment x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsPropertyInitializer x, JsContext ctx) {
|
public void endVisit(@NotNull JsPropertyInitializer x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsRegExp x, JsContext ctx) {
|
public void endVisit(@NotNull JsRegExp x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsReturn x, JsContext ctx) {
|
public void endVisit(@NotNull JsReturn x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsStringLiteral x, JsContext ctx) {
|
public void endVisit(@NotNull JsStringLiteral x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsSwitch x, JsContext ctx) {
|
public void endVisit(@NotNull JsSwitch x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsLiteral.JsThisRef x, JsContext ctx) {
|
public void endVisit(@NotNull JsLiteral.JsThisRef x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsThrow x, JsContext ctx) {
|
public void endVisit(@NotNull JsThrow x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsTry x, JsContext ctx) {
|
public void endVisit(@NotNull JsTry x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsVars.JsVar x, JsContext ctx) {
|
public void endVisit(@NotNull JsVars.JsVar x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsVars x, JsContext ctx) {
|
public void endVisit(@NotNull JsVars x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endVisit(JsWhile x, JsContext ctx) {
|
public void endVisit(@NotNull JsWhile x, @NotNull JsContext ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsArrayAccess x, JsContext ctx) {
|
public boolean visit(@NotNull JsArrayAccess x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsArrayLiteral x, JsContext ctx) {
|
public boolean visit(@NotNull JsArrayLiteral x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsBinaryOperation x, JsContext ctx) {
|
public boolean visit(@NotNull JsBinaryOperation x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsBlock x, JsContext ctx) {
|
public boolean visit(@NotNull JsBlock x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsLiteral.JsBooleanLiteral x, JsContext ctx) {
|
public boolean visit(@NotNull JsLiteral.JsBooleanLiteral x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsBreak x, JsContext ctx) {
|
public boolean visit(@NotNull JsBreak x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsCase x, JsContext ctx) {
|
public boolean visit(@NotNull JsCase x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsCatch x, JsContext ctx) {
|
public boolean visit(@NotNull JsCatch x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsConditional x, JsContext ctx) {
|
public boolean visit(@NotNull JsConditional x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsContinue x, JsContext ctx) {
|
public boolean visit(@NotNull JsContinue x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsDebugger x, JsContext ctx) {
|
public boolean visit(@NotNull JsDebugger x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsDefault x, JsContext ctx) {
|
public boolean visit(@NotNull JsDefault x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsDoWhile x, JsContext ctx) {
|
public boolean visit(@NotNull JsDoWhile x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsEmpty x, JsContext ctx) {
|
public boolean visit(@NotNull JsEmpty x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsExpressionStatement x, JsContext ctx) {
|
public boolean visit(@NotNull JsExpressionStatement x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsFor x, JsContext ctx) {
|
public boolean visit(@NotNull JsFor x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsForIn x, JsContext ctx) {
|
public boolean visit(@NotNull JsForIn x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsFunction x, JsContext ctx) {
|
public boolean visit(@NotNull JsFunction x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsIf x, JsContext ctx) {
|
public boolean visit(@NotNull JsIf x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsInvocation x, JsContext ctx) {
|
public boolean visit(@NotNull JsInvocation x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsLabel x, JsContext ctx) {
|
public boolean visit(@NotNull JsLabel x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsName x, JsContext ctx) {
|
public boolean visit(@NotNull JsName x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsNameRef x, JsContext ctx) {
|
public boolean visit(@NotNull JsNameRef x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsNew x, JsContext ctx) {
|
public boolean visit(@NotNull JsNew x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsNullLiteral x, JsContext ctx) {
|
public boolean visit(@NotNull JsNullLiteral x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsNumberLiteral x, JsContext ctx) {
|
public boolean visit(@NotNull JsNumberLiteral x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsObjectLiteral x, JsContext ctx) {
|
public boolean visit(@NotNull JsObjectLiteral x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsParameter x, JsContext ctx) {
|
public boolean visit(@NotNull JsParameter x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsPostfixOperation x, JsContext ctx) {
|
public boolean visit(@NotNull JsPostfixOperation x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsPrefixOperation x, JsContext ctx) {
|
public boolean visit(@NotNull JsPrefixOperation x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsProgram x, JsContext ctx) {
|
public boolean visit(@NotNull JsProgram x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsProgramFragment x, JsContext ctx) {
|
public boolean visit(@NotNull JsProgramFragment x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsPropertyInitializer x, JsContext ctx) {
|
public boolean visit(@NotNull JsPropertyInitializer x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsRegExp x, JsContext ctx) {
|
public boolean visit(@NotNull JsRegExp x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsReturn x, JsContext ctx) {
|
public boolean visit(@NotNull JsReturn x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsStringLiteral x, JsContext ctx) {
|
public boolean visit(@NotNull JsStringLiteral x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsSwitch x, JsContext ctx) {
|
public boolean visit(@NotNull JsSwitch x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsLiteral.JsThisRef x, JsContext ctx) {
|
public boolean visit(@NotNull JsLiteral.JsThisRef x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsThrow x, JsContext ctx) {
|
public boolean visit(@NotNull JsThrow x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsTry x, JsContext ctx) {
|
public boolean visit(@NotNull JsTry x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsVars.JsVar x, JsContext ctx) {
|
public boolean visit(@NotNull JsVars.JsVar x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsVars x, JsContext ctx) {
|
public boolean visit(@NotNull JsVars x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean visit(JsWhile x, JsContext ctx) {
|
public boolean visit(@NotNull JsWhile x, @NotNull JsContext ctx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -149,9 +149,7 @@ private fun JsFunction.markInlineArguments(descriptor: CallableDescriptor) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val visitor = object: JsVisitorWithContextImpl() {
|
val visitor = object: JsVisitorWithContextImpl() {
|
||||||
override fun endVisit(x: JsInvocation?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsInvocation, ctx: JsContext<*>) {
|
||||||
if (x == null || ctx == null) return
|
|
||||||
|
|
||||||
val qualifier: JsExpression?
|
val qualifier: JsExpression?
|
||||||
val namesSet: Set<JsName>
|
val namesSet: Set<JsName>
|
||||||
|
|
||||||
@@ -180,11 +178,11 @@ private fun replaceExternalNames(function: JsFunction, externalReplacements: Map
|
|||||||
if (replacements.isEmpty()) return
|
if (replacements.isEmpty()) return
|
||||||
|
|
||||||
val visitor = object: JsVisitorWithContextImpl() {
|
val visitor = object: JsVisitorWithContextImpl() {
|
||||||
override fun endVisit(x: JsNameRef?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsNameRef, ctx: JsContext<*>) {
|
||||||
if (x == null || x.getQualifier() != null) return
|
if (x.getQualifier() != null) return
|
||||||
|
|
||||||
replacements[x.getIdent()]?.let {
|
replacements[x.getIdent()]?.let {
|
||||||
ctx?.replaceMe(it)
|
ctx.replaceMe(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public class JsInliner extends JsVisitorWithContextImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean visit(JsFunction function, JsContext context) {
|
public boolean visit(@NotNull JsFunction function, @NotNull JsContext context) {
|
||||||
inliningContexts.push(new JsInliningContext(function));
|
inliningContexts.push(new JsInliningContext(function));
|
||||||
assert !inProcessFunctions.contains(function): "Inliner has revisited function";
|
assert !inProcessFunctions.contains(function): "Inliner has revisited function";
|
||||||
inProcessFunctions.add(function);
|
inProcessFunctions.add(function);
|
||||||
@@ -81,7 +81,7 @@ public class JsInliner extends JsVisitorWithContextImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void endVisit(JsFunction function, JsContext context) {
|
public void endVisit(@NotNull JsFunction function, @NotNull JsContext context) {
|
||||||
super.endVisit(function, context);
|
super.endVisit(function, context);
|
||||||
refreshLabelNames(getInliningContext().newNamingContext(), function);
|
refreshLabelNames(getInliningContext().newNamingContext(), function);
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ public class JsInliner extends JsVisitorWithContextImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean visit(JsInvocation call, JsContext context) {
|
public boolean visit(@NotNull JsInvocation call, @NotNull JsContext context) {
|
||||||
if (shouldInline(call) && canInline(call)) {
|
if (shouldInline(call) && canInline(call)) {
|
||||||
JsFunction containingFunction = getCurrentNamedFunction();
|
JsFunction containingFunction = getCurrentNamedFunction();
|
||||||
if (containingFunction != null) {
|
if (containingFunction != null) {
|
||||||
@@ -124,7 +124,7 @@ public class JsInliner extends JsVisitorWithContextImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void endVisit(JsInvocation x, JsContext ctx) {
|
public void endVisit(@NotNull JsInvocation x, @NotNull JsContext ctx) {
|
||||||
JsCallInfo lastCallInfo = null;
|
JsCallInfo lastCallInfo = null;
|
||||||
|
|
||||||
if (!inlineCallInfos.isEmpty()) {
|
if (!inlineCallInfos.isEmpty()) {
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ import com.google.dart.compiler.backend.js.ast.JsContext
|
|||||||
|
|
||||||
private class NodeRemover<T>(val klass: Class<T>, val predicate: (T) -> Boolean): JsVisitorWithContextImpl() {
|
private class NodeRemover<T>(val klass: Class<T>, val predicate: (T) -> Boolean): JsVisitorWithContextImpl() {
|
||||||
|
|
||||||
override fun <T : JsNode?> doTraverse(node: T?, ctx: JsContext<*>?) {
|
override fun <T : JsNode> doTraverse(node: T, ctx: JsContext<*>) {
|
||||||
if (node == null || ctx == null) return
|
|
||||||
|
|
||||||
if (klass.isInstance(node)) {
|
if (klass.isInstance(node)) {
|
||||||
val instance = klass.cast(node)!!
|
val instance = klass.cast(node)!!
|
||||||
|
|
||||||
|
|||||||
+6
-8
@@ -66,8 +66,8 @@ private class UnusedLocalFunctionsCollector(functions: Map<JsName, JsFunction>)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visit(x: JsPropertyInitializer?, ctx: JsContext<*>?): Boolean {
|
override fun visit(x: JsPropertyInitializer, ctx: JsContext<*>): Boolean {
|
||||||
val value = x?.getValueExpr()
|
val value = x.getValueExpr()
|
||||||
|
|
||||||
return when (value) {
|
return when (value) {
|
||||||
is JsFunction -> !wasProcessed(value)
|
is JsFunction -> !wasProcessed(value)
|
||||||
@@ -75,18 +75,16 @@ private class UnusedLocalFunctionsCollector(functions: Map<JsName, JsFunction>)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visit(x: JsFunction?, ctx: JsContext<*>?): Boolean {
|
override fun visit(x: JsFunction, ctx: JsContext<*>): Boolean {
|
||||||
return !(wasProcessed(x))
|
return !(wasProcessed(x))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endVisit(x: JsFunction?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsFunction, ctx: JsContext<*>) {
|
||||||
if (x == null) return
|
|
||||||
|
|
||||||
processed.add(x)
|
processed.add(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endVisit(x: JsNameRef?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsNameRef, ctx: JsContext<*>) {
|
||||||
val name = x?.getName()
|
val name = x.getName()
|
||||||
if (isFunctionReference(x) && name != null) {
|
if (isFunctionReference(x) && name != null) {
|
||||||
tracker.markReachable(name)
|
tracker.markReachable(name)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -45,9 +45,7 @@ private class UnusedInstanceCollector : JsVisitorWithContextImpl() {
|
|||||||
public val removableDeclarations: List<JsStatement>
|
public val removableDeclarations: List<JsStatement>
|
||||||
get() = tracker.removable
|
get() = tracker.removable
|
||||||
|
|
||||||
override fun visit(x: JsVars.JsVar?, ctx: JsContext<*>?): Boolean {
|
override fun visit(x: JsVars.JsVar, ctx: JsContext<*>): Boolean {
|
||||||
if (x == null) return false
|
|
||||||
|
|
||||||
if (!isLocalFunctionDeclaration(x)) return super.visit(x, ctx)
|
if (!isLocalFunctionDeclaration(x)) return super.visit(x, ctx)
|
||||||
|
|
||||||
val name = x.getName()!!
|
val name = x.getName()!!
|
||||||
|
|||||||
+2
-2
@@ -28,8 +28,8 @@ class ReferenceNameCollector : JsVisitorWithContextImpl() {
|
|||||||
public val references: List<JsName>
|
public val references: List<JsName>
|
||||||
get() = referenceSet.toList()
|
get() = referenceSet.toList()
|
||||||
|
|
||||||
override fun endVisit(x: JsNameRef?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsNameRef, ctx: JsContext<*>) {
|
||||||
val name = x?.getName()
|
val name = x.getName()
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
referenceSet.add(name)
|
referenceSet.add(name)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -24,10 +24,10 @@ import com.google.dart.compiler.backend.js.ast.JsContext
|
|||||||
import com.google.dart.compiler.backend.js.ast.JsLabel
|
import com.google.dart.compiler.backend.js.ast.JsLabel
|
||||||
|
|
||||||
class LabelNameRefreshingVisitor(val context: NamingContext, val functionScope: JsFunctionScope) : JsVisitorWithContextImpl() {
|
class LabelNameRefreshingVisitor(val context: NamingContext, val functionScope: JsFunctionScope) : JsVisitorWithContextImpl() {
|
||||||
override fun visit(x: JsFunction?, ctx: JsContext<*>?): Boolean = false
|
override fun visit(x: JsFunction, ctx: JsContext<*>): Boolean = false
|
||||||
|
|
||||||
override fun visit(x: JsLabel?, ctx: JsContext<*>?): Boolean {
|
override fun visit(x: JsLabel, ctx: JsContext<*>): Boolean {
|
||||||
val labelName = x!!.getName()
|
val labelName = x.getName()
|
||||||
val freshName = functionScope.enterLabel(labelName.getIdent())
|
val freshName = functionScope.enterLabel(labelName.getIdent())
|
||||||
|
|
||||||
if (freshName.getIdent() != labelName.getIdent()) {
|
if (freshName.getIdent() != labelName.getIdent()) {
|
||||||
@@ -37,7 +37,7 @@ class LabelNameRefreshingVisitor(val context: NamingContext, val functionScope:
|
|||||||
return super.visit(x, ctx)
|
return super.visit(x, ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endVisit(x: JsLabel?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsLabel, ctx: JsContext<*>) {
|
||||||
super.endVisit(x, ctx)
|
super.endVisit(x, ctx)
|
||||||
functionScope.exitLabel()
|
functionScope.exitLabel()
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-9
@@ -27,18 +27,14 @@ import com.google.dart.compiler.backend.js.ast.JsLabel
|
|||||||
|
|
||||||
class NameReplacingVisitor(private val replaceMap: Map<JsName, JsExpression>) : JsVisitorWithContextImpl() {
|
class NameReplacingVisitor(private val replaceMap: Map<JsName, JsExpression>) : JsVisitorWithContextImpl() {
|
||||||
|
|
||||||
override fun endVisit(x: JsNameRef?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsNameRef, ctx: JsContext<*>) {
|
||||||
if (x == null || ctx == null) return
|
|
||||||
|
|
||||||
val replacement = replaceMap[x.getName()]
|
val replacement = replaceMap[x.getName()]
|
||||||
if (replacement == null) return
|
if (replacement == null) return
|
||||||
|
|
||||||
ctx.replaceMe(replacement)
|
ctx.replaceMe(replacement)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endVisit(x: JsVars.JsVar?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsVars.JsVar, ctx: JsContext<*>) {
|
||||||
if (x == null || ctx == null) return
|
|
||||||
|
|
||||||
val replacement = replaceMap[x.getName()]
|
val replacement = replaceMap[x.getName()]
|
||||||
if (replacement is HasName) {
|
if (replacement is HasName) {
|
||||||
val replacementVar = JsVars.JsVar(replacement.getName(), x.getInitExpression())
|
val replacementVar = JsVars.JsVar(replacement.getName(), x.getInitExpression())
|
||||||
@@ -46,9 +42,7 @@ class NameReplacingVisitor(private val replaceMap: Map<JsName, JsExpression>) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endVisit(x: JsLabel?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsLabel, ctx: JsContext<*>) {
|
||||||
if (x == null || ctx == null) return
|
|
||||||
|
|
||||||
val replacement = replaceMap[x.getName()]
|
val replacement = replaceMap[x.getName()]
|
||||||
if (replacement is HasName) {
|
if (replacement is HasName) {
|
||||||
val replacementLabel = JsLabel(replacement.getName(), x.getStatement())
|
val replacementLabel = JsLabel(replacement.getName(), x.getStatement())
|
||||||
|
|||||||
+3
-5
@@ -33,16 +33,14 @@ class ReturnReplacingVisitor(private val resultRef: JsNameRef?, private val brea
|
|||||||
/**
|
/**
|
||||||
* Prevents replacing returns in object literal
|
* Prevents replacing returns in object literal
|
||||||
*/
|
*/
|
||||||
override fun visit(x: JsObjectLiteral?, ctx: JsContext<*>?): Boolean = false
|
override fun visit(x: JsObjectLiteral, ctx: JsContext<*>): Boolean = false
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prevents replacing returns in inner function
|
* Prevents replacing returns in inner function
|
||||||
*/
|
*/
|
||||||
override fun visit(x: JsFunction?, ctx: JsContext<*>?): Boolean = false
|
override fun visit(x: JsFunction, ctx: JsContext<*>): Boolean = false
|
||||||
|
|
||||||
override fun endVisit(x: JsReturn?, ctx: JsContext<*>?) {
|
|
||||||
if (x == null || ctx == null) return
|
|
||||||
|
|
||||||
|
override fun endVisit(x: JsReturn, ctx: JsContext<*>) {
|
||||||
ctx.removeMe()
|
ctx.removeMe()
|
||||||
|
|
||||||
val returnReplacement = getReturnReplacement(x.getExpression())
|
val returnReplacement = getReturnReplacement(x.getExpression())
|
||||||
|
|||||||
+4
-4
@@ -24,11 +24,11 @@ import com.google.dart.compiler.backend.js.ast.JsObjectLiteral
|
|||||||
import com.google.dart.compiler.backend.js.ast.JsVisitorWithContextImpl
|
import com.google.dart.compiler.backend.js.ast.JsVisitorWithContextImpl
|
||||||
|
|
||||||
class ThisReplacingVisitor(private val thisReplacement: JsExpression) : JsVisitorWithContextImpl() {
|
class ThisReplacingVisitor(private val thisReplacement: JsExpression) : JsVisitorWithContextImpl() {
|
||||||
override fun endVisit(x: JsLiteral.JsThisRef?, ctx: JsContext<*>?) {
|
override fun endVisit(x: JsLiteral.JsThisRef, ctx: JsContext<*>) {
|
||||||
ctx?.replaceMe(thisReplacement)
|
ctx.replaceMe(thisReplacement)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visit(x: JsFunction?, ctx: JsContext<*>?) = false
|
override fun visit(x: JsFunction, ctx: JsContext<*>) = false
|
||||||
|
|
||||||
override fun visit(x: JsObjectLiteral?, ctx: JsContext<*>?) = false
|
override fun visit(x: JsObjectLiteral, ctx: JsContext<*>) = false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user