Skip to content

Commit

Permalink
Create a VisitorState class in jssrc/ that contains many of the state…
Browse files Browse the repository at this point in the history
… objects/parameters shared by the various visitor and utility classes in the package (many of which are subclassed in idom). Move instantiation of visitors into this state object so that visitors are less responsible for instantiating other visitors and don't have to define fields just so they can instantiate other visitors that need those fields.

PiperOrigin-RevId: 716299435
  • Loading branch information
Jesse-Good authored and copybara-github committed Jan 16, 2025
1 parent 2e9350a commit 9722501
Show file tree
Hide file tree
Showing 24 changed files with 576 additions and 678 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@
import com.google.template.soy.jssrc.internal.GenCallCodeUtils;
import com.google.template.soy.jssrc.internal.GenJsCodeVisitorAssistantForMsgs;
import com.google.template.soy.jssrc.internal.GenJsExprsVisitor;
import com.google.template.soy.jssrc.internal.GenJsTemplateBodyVisitor;
import com.google.template.soy.jssrc.internal.IsComputableAsJsExprsVisitor;
import com.google.template.soy.jssrc.internal.OutputVarHandler;
import com.google.template.soy.jssrc.internal.TemplateAliases;
import com.google.template.soy.jssrc.internal.TranslationContext;
import com.google.template.soy.soytree.HtmlContext;
import com.google.template.soy.soytree.MsgFallbackGroupNode;
Expand Down Expand Up @@ -75,14 +75,13 @@ final class AssistantForHtmlMsgs extends GenJsCodeVisitorAssistantForMsgs {
private static final String PLACEHOLDER_REGEX = "/\\x01\\d+\\x01/g";

private final String staticDecl;
private final GenIncrementalDomTemplateBodyVisitor idomTemplateBodyVisitor;
private final GenJsTemplateBodyVisitor idomTemplateBodyVisitor;

AssistantForHtmlMsgs(
GenIncrementalDomTemplateBodyVisitor idomTemplateBodyVisitor,
GenJsTemplateBodyVisitor idomTemplateBodyVisitor,
SoyJsSrcOptions jsSrcOptions,
GenCallCodeUtils genCallCodeUtils,
IsComputableAsJsExprsVisitor isComputableAsJsExprsVisitor,
TemplateAliases functionAliases,
GenJsExprsVisitor genJsExprsVisitor,
TranslationContext translationContext,
ErrorReporter errorReporter,
Expand All @@ -93,7 +92,6 @@ final class AssistantForHtmlMsgs extends GenJsCodeVisitorAssistantForMsgs {
jsSrcOptions,
genCallCodeUtils,
isComputableAsJsExprsVisitor,
functionAliases,
genJsExprsVisitor,
translationContext,
errorReporter,
Expand Down Expand Up @@ -197,10 +195,18 @@ Statement generateMsgGroupCode(MsgFallbackGroupNode node) {
if (phNode.getParent() instanceof VeLogNode) {
VeLogNode parent = (VeLogNode) phNode.getParent();
if (parent.getChild(0) == phNode) {
value = Statements.of(idomTemplateBodyVisitor.openVeLogNode(parent), value);
value =
Statements.of(
((GenIncrementalDomTemplateBodyVisitor) idomTemplateBodyVisitor)
.openVeLogNode(parent),
value);
}
if (parent.getChild(parent.numChildren() - 1) == phNode) {
value = Statements.of(value, idomTemplateBodyVisitor.exitVeLogNode(parent));
value =
Statements.of(
value,
((GenIncrementalDomTemplateBodyVisitor) idomTemplateBodyVisitor)
.exitVeLogNode(parent));
}
}
switchBuilder.addCase(Expressions.stringLiteral(ph.getKey()), value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
import com.google.common.collect.ImmutableSet;
import com.google.template.soy.base.SourceLocation.ByteSpan;
import com.google.template.soy.base.internal.SanitizedContentKind;
import com.google.template.soy.incrementaldomsrc.GenIncrementalDomExprsVisitor.GenIncrementalDomExprsVisitorFactory;
import com.google.template.soy.jssrc.SoyJsSrcOptions;
import com.google.template.soy.jssrc.dsl.ClassExpression;
import com.google.template.soy.jssrc.dsl.ClassExpression.MethodDeclaration;
Expand All @@ -59,10 +58,13 @@
import com.google.template.soy.jssrc.dsl.Statements;
import com.google.template.soy.jssrc.dsl.VariableDeclaration;
import com.google.template.soy.jssrc.internal.CanInitOutputVarVisitor;
import com.google.template.soy.jssrc.internal.DelTemplateNamer;
import com.google.template.soy.jssrc.internal.GenJsCodeVisitor;
import com.google.template.soy.jssrc.internal.IsComputableAsJsExprsVisitor;
import com.google.template.soy.jssrc.internal.JavaScriptValueFactoryImpl;
import com.google.template.soy.jssrc.internal.JsRuntime;
import com.google.template.soy.jssrc.internal.JsType;
import com.google.template.soy.jssrc.internal.OutputVarHandler;
import com.google.template.soy.jssrc.internal.StandardNames;
import com.google.template.soy.jssrc.internal.TranslateExprNodeVisitor;
import com.google.template.soy.passes.ShouldEnsureDataIsDefinedVisitor;
Expand Down Expand Up @@ -98,23 +100,23 @@ public final class GenIncrementalDomCodeVisitor extends GenJsCodeVisitor {
private TemplateNode currentTemplateNode;

GenIncrementalDomCodeVisitor(
IdomVisitorsState state,
SoyJsSrcOptions jsSrcOptions,
JavaScriptValueFactoryImpl javaScriptValueFactory,
IncrementalDomDelTemplateNamer incrementalDomDelTemplateNamer,
IncrementalDomGenCallCodeUtils genCallCodeUtils,
IsComputableAsIncrementalDomExprsVisitor isComputableAsJsExprsVisitor,
DelTemplateNamer incrementalDomDelTemplateNamer,
IsComputableAsJsExprsVisitor isComputableAsJsExprsVisitor,
CanInitOutputVarVisitor canInitOutputVarVisitor,
GenIncrementalDomExprsVisitorFactory genIncrementalDomExprsVisitorFactory,
SoyTypeRegistry typeRegistry) {
SoyTypeRegistry typeRegistry,
OutputVarHandler outputVarHandler) {
super(
state,
jsSrcOptions,
javaScriptValueFactory,
incrementalDomDelTemplateNamer,
genCallCodeUtils,
isComputableAsJsExprsVisitor,
canInitOutputVarVisitor,
genIncrementalDomExprsVisitorFactory,
typeRegistry);
typeRegistry,
outputVarHandler);
contentKind = new ArrayDeque<>();
}

Expand Down Expand Up @@ -203,7 +205,7 @@ private void visitTemplateNodeInternal(TemplateNode node) {
getJsCodeBuilder()
.append(
Statements.assign(
id(alias + modifiableDefaultImplSuffix)
id(alias + MODIFIABLE_DEFAULT_IMPL_SUFFIX)
.castAs(
"!" + ELEMENT_LIB_IDOM.alias() + ".IdomFunction",
ImmutableSet.of(ELEMENT_LIB_IDOM))
Expand Down Expand Up @@ -538,25 +540,12 @@ private Statement generateIncrementalDomRenderCalls(
outputVars.pushOutputVar("output");
outputVars.setOutputVarInited();
}
var visitor =
new GenIncrementalDomTemplateBodyVisitor(
outputVars,
jsSrcOptions,
javaScriptValueFactory,
genCallCodeUtils,
isComputableAsJsExprsVisitor,
canInitOutputVarVisitor,
genJsExprsVisitor,
errorReporter,
templateTranslationContext,
templateAliases,
contentKind,
staticVarDeclarations,
generatePositionalParamsSignature,
fileSetMetadata,
alias,
jsTypeRegistry);
((IdomVisitorsState) state).enterCall(alias, contentKind);
GenIncrementalDomTemplateBodyVisitor visitor =
(GenIncrementalDomTemplateBodyVisitor) state.createTemplateBodyVisitor(genJsExprsVisitor);
Statement body = Statements.of(visitor.visitChildren(node));
staticVarDeclarations.addAll(visitor.getStaticVarDeclarations());
((IdomVisitorsState) state).exitCall();

if (isTextTemplate) {
VariableDeclaration declare =
Expand Down Expand Up @@ -853,13 +842,7 @@ private static Expression maybeCastAs(

@Override
protected TranslateExprNodeVisitor getExprTranslator() {
return new IncrementalDomTranslateExprNodeVisitor(
javaScriptValueFactory,
templateTranslationContext,
templateAliases,
errorReporter,
OPT_DATA,
jsTypeRegistry);
return state.createTranslateExprNodeVisitor();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,71 +18,35 @@

import com.google.template.soy.error.ErrorReporter;
import com.google.template.soy.jssrc.dsl.Expression;
import com.google.template.soy.jssrc.internal.GenCallCodeUtils;
import com.google.template.soy.jssrc.internal.GenJsCodeVisitor.ScopedJsTypeRegistry;
import com.google.template.soy.jssrc.internal.GenJsExprsVisitor;
import com.google.template.soy.jssrc.internal.GenJsExprsVisitor.GenJsExprsVisitorFactory;
import com.google.template.soy.jssrc.internal.JavaScriptValueFactoryImpl;
import com.google.template.soy.jssrc.internal.IsComputableAsJsExprsVisitor;
import com.google.template.soy.jssrc.internal.TemplateAliases;
import com.google.template.soy.jssrc.internal.TranslateExprNodeVisitor;
import com.google.template.soy.jssrc.internal.TranslationContext;
import com.google.template.soy.jssrc.internal.VisitorsState;
import com.google.template.soy.soytree.SoyNode;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

/** Overrides the base class to provide the correct helpers classes. */
public final class GenIncrementalDomExprsVisitor extends GenJsExprsVisitor {

/** Injectable factory for creating an instance of this class. */
public static final class GenIncrementalDomExprsVisitorFactory extends GenJsExprsVisitorFactory {

@SuppressWarnings("unchecked")
GenIncrementalDomExprsVisitorFactory(
JavaScriptValueFactoryImpl javaScriptValueFactory,
Supplier<IncrementalDomGenCallCodeUtils> genCallCodeUtils,
IsComputableAsIncrementalDomExprsVisitor isComputableAsJsExprsVisitor) {
super(javaScriptValueFactory, (Supplier) genCallCodeUtils, isComputableAsJsExprsVisitor);
}

@Override
public GenIncrementalDomExprsVisitor create(
TranslationContext translationContext,
TemplateAliases templateAliases,
ErrorReporter errorReporter,
Expression dataSource,
ScopedJsTypeRegistry jsTypeRegistry) {
return new GenIncrementalDomExprsVisitor(
javaScriptValueFactory,
(IncrementalDomGenCallCodeUtils) genCallCodeUtils.get(),
(IsComputableAsIncrementalDomExprsVisitor) isComputableAsJsExprsVisitor,
this,
translationContext,
errorReporter,
templateAliases,
dataSource,
jsTypeRegistry);
}
}

public GenIncrementalDomExprsVisitor(
JavaScriptValueFactoryImpl javaScriptValueFactory,
IncrementalDomGenCallCodeUtils genCallCodeUtils,
IsComputableAsIncrementalDomExprsVisitor isComputableAsJsExprsVisitor,
GenIncrementalDomExprsVisitorFactory genIncrementalDomExprsVisitorFactory,
VisitorsState state,
GenCallCodeUtils genCallCodeUtils,
IsComputableAsJsExprsVisitor isComputableAsJsExprsVisitor,
TranslationContext translationContext,
ErrorReporter errorReporter,
TemplateAliases templateAliases,
Expression dataSource,
ScopedJsTypeRegistry jsTypeRegistry) {
super(
javaScriptValueFactory,
state,
genCallCodeUtils,
isComputableAsJsExprsVisitor,
genIncrementalDomExprsVisitorFactory,
translationContext,
errorReporter,
templateAliases,
dataSource,
jsTypeRegistry);
}

Expand All @@ -92,15 +56,4 @@ public List<Expression> exec(SoyNode node) {
visit(node);
return chunks;
}

@Override
protected TranslateExprNodeVisitor getExprTranslator() {
return new IncrementalDomTranslateExprNodeVisitor(
javaScriptValueFactory,
translationContext,
templateAliases,
errorReporter,
dataSource,
jsTypeRegistry);
}
}
Loading

0 comments on commit 9722501

Please sign in to comment.