Revision: 4172
Author: mikesamuel
Date: Mon Jul 12 16:56:22 2010
Log: Cleanup Jobs and AncestorChains.
http://codereview.appspot.com/1684042
Gets rid of unneeded complexity in AncestorChains and replaces
AncestorChains with ParseTreeNodes as the roots of jobs to make
jobs easier to cache.
[email protected]
http://code.google.com/p/google-caja/source/detail?r=4172
Modified:
/trunk/src/com/google/caja/opensocial/DefaultGadgetRewriter.java
/trunk/src/com/google/caja/parser/AncestorChain.java
/trunk/src/com/google/caja/plugin/BuildServiceImplementation.java
/trunk/src/com/google/caja/plugin/Job.java
/trunk/src/com/google/caja/plugin/PluginCompiler.java
/trunk/src/com/google/caja/plugin/PluginCompilerMain.java
/trunk/src/com/google/caja/plugin/stages/CompileHtmlStage.java
/trunk/src/com/google/caja/plugin/stages/ConsolidateCodeStage.java
/trunk/src/com/google/caja/plugin/stages/DebuggingSymbolsStage.java
/trunk/src/com/google/caja/plugin/stages/HtmlToBundleStage.java
/trunk/src/com/google/caja/plugin/stages/HtmlToJsStage.java
/trunk/src/com/google/caja/plugin/stages/InferFilePositionsStage.java
/trunk/src/com/google/caja/plugin/stages/InlineCssImportsStage.java
/trunk/src/com/google/caja/plugin/stages/JobCache.java
/trunk/src/com/google/caja/plugin/stages/LegacyNamespaceFixupStage.java
/trunk/src/com/google/caja/plugin/stages/OpenTemplateStage.java
/trunk/src/com/google/caja/plugin/stages/ResolveUriStage.java
/trunk/src/com/google/caja/plugin/stages/RewriteCssStage.java
/trunk/src/com/google/caja/plugin/stages/RewriteHtmlStage.java
/trunk/src/com/google/caja/plugin/stages/SanitizeHtmlStage.java
/trunk/src/com/google/caja/plugin/stages/ValidateCssStage.java
/trunk/src/com/google/caja/plugin/stages/ValidateJavascriptStage.java
/trunk/src/com/google/caja/service/HtmlHandler.java
/trunk/tests/com/google/caja/demos/benchmarks/BenchmarkRunner.java
/trunk/tests/com/google/caja/demos/benchmarks/BenchmarkSize.java
/trunk/tests/com/google/caja/parser/js/ParserTest.java
/trunk/tests/com/google/caja/plugin/HtmlCompiledPluginTest.java
/trunk/tests/com/google/caja/plugin/stages/DebuggingSymbolsStageTest.java
/trunk/tests/com/google/caja/plugin/stages/LegacyNamespaceFixupStageTest.java
/trunk/tests/com/google/caja/plugin/stages/OpenTemplateStageTest.java
/trunk/tests/com/google/caja/plugin/stages/PipelineStageTestCase.java
/trunk/tests/com/google/caja/plugin/stages/RewriteHtmlStageTest.java
=======================================
--- /trunk/src/com/google/caja/opensocial/DefaultGadgetRewriter.java Tue
Jun 1 16:47:13 2010
+++ /trunk/src/com/google/caja/opensocial/DefaultGadgetRewriter.java Mon
Jul 12 16:56:22 2010
@@ -22,7 +22,6 @@
import com.google.caja.lexer.InputSource;
import com.google.caja.lexer.ParseException;
import com.google.caja.lexer.TokenConsumer;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.html.Dom;
import com.google.caja.parser.html.DomParser;
import com.google.caja.parser.html.Namespaces;
@@ -217,7 +216,7 @@
compiler.setPreconditions(preconditions);
compiler.setGoals(goals);
- compiler.addInput(AncestorChain.instance(new Dom(content)), baseUri);
+ compiler.addInput(new Dom(content), baseUri);
if (!compiler.run()) {
throw new GadgetRewriteException("Gadget has compile errors");
=======================================
--- /trunk/src/com/google/caja/parser/AncestorChain.java Thu Oct 15
15:42:13 2009
+++ /trunk/src/com/google/caja/parser/AncestorChain.java Mon Jul 12
16:56:22 2010
@@ -33,36 +33,6 @@
public <C extends ParseTreeNode> AncestorChain<C> child(C child) {
return instance(this, child);
}
-
- /** True if node is the first in its parent's child list, or is the
root. */
- public boolean isFirstSibling() {
- return parent == null || parent.node.children().get(0) == node;
- }
-
- /** True if node is the last in its parent's child list, or is the root.
*/
- public boolean isLastSibling() {
- return parent == null || parent.node.children().get(
- parent.node.children().size() - 1) == node;
- }
-
- /** The previous sibling of parent or null. */
- public ParseTreeNode getPrevSibling() {
- int idx = indexInParent() - 1;
- if (idx < 0) { return null; }
- return parent.node.children().get(idx);
- }
-
- /** The next sibling of parent or null. */
- public ParseTreeNode getNextSibling() {
- int idx = indexInParent() + 1;
- if (idx <= 0 || idx >= parent.node.children().size()) { return null; }
- return parent.node.children().get(idx);
- }
-
- /** The index such that if node in its parent's children list or -1. */
- public int indexInParent() {
- return parent == null ? -1 : parent.node.children().indexOf(node);
- }
public ParseTreeNode getParentNode() {
return parent != null ? parent.node : null;
=======================================
--- /trunk/src/com/google/caja/plugin/BuildServiceImplementation.java Tue
Jun 15 20:33:47 2010
+++ /trunk/src/com/google/caja/plugin/BuildServiceImplementation.java Mon
Jul 12 16:56:22 2010
@@ -24,7 +24,6 @@
import com.google.caja.lexer.ParseException;
import com.google.caja.lexer.TokenConsumer;
import com.google.caja.lexer.escaping.UriUtil;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.html.DomParser;
import com.google.caja.parser.html.Namespaces;
@@ -169,8 +168,7 @@
for (File f : inputs) {
try {
URI fileUri = f.getCanonicalFile().toURI();
- AncestorChain<?> parsedInput = parseInput(
- new InputSource(fileUri), mq);
+ ParseTreeNode parsedInput = parseInput(new InputSource(fileUri),
mq);
if (parsedInput == null) {
passed = false;
} else {
@@ -195,10 +193,10 @@
if (f.getName().endsWith(".env.json")) {
loadEnvJsonFile(f, optimizer, mq);
} else {
- AncestorChain<?> parsedInput = parseInput(
+ ParseTreeNode parsedInput = parseInput(
new InputSource(f.getCanonicalFile().toURI()), mq);
if (parsedInput != null) {
- optimizer.addInput(parsedInput.cast(Statement.class).node);
+ optimizer.addInput((Statement) parsedInput);
}
}
} catch (IOException ex) {
@@ -308,14 +306,11 @@
return content;
}
- private AncestorChain<?> parseInput(InputSource is, MessageQueue mq)
+ private ParseTreeNode parseInput(InputSource is, MessageQueue mq)
throws IOException {
- CharProducer cp = CharProducer.Factory.fromString(
- getSourceContent(is), is);
+ CharProducer cp =
CharProducer.Factory.fromString(getSourceContent(is), is);
try {
- ParseTreeNode input = PluginCompilerMain.parseInput(is, cp, mq);
- if (input == null) { return null; }
- return AncestorChain.instance(input);
+ return PluginCompilerMain.parseInput(is, cp, mq);
} catch (ParseException ex) {
ex.toMessageQueue(mq);
return null;
=======================================
--- /trunk/src/com/google/caja/plugin/Job.java Thu Feb 25 15:55:35 2010
+++ /trunk/src/com/google/caja/plugin/Job.java Mon Jul 12 16:56:22 2010
@@ -15,7 +15,6 @@
package com.google.caja.plugin;
import com.google.caja.SomethingWidgyHappenedError;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.css.CssTree;
import com.google.caja.parser.html.Dom;
@@ -32,15 +31,14 @@
* A parse tree that is awaiting rewriting, compiling, or rendering.
*/
public final class Job {
- private final AncestorChain<?> root;
+ private final ParseTreeNode root;
private final ContentType type;
private final URI baseUri;
private final JobCache.Keys keys;
public static Job job(
- JobCache.Keys keys, AncestorChain<?> root, URI baseUri) {
+ JobCache.Keys keys, ParseTreeNode rootNode, URI baseUri) {
ContentType type;
- ParseTreeNode rootNode = root.node;
if (rootNode instanceof Statement
|| rootNode instanceof Expression
|| rootNode instanceof UncajoledModule
@@ -55,47 +53,39 @@
} else {
throw new SomethingWidgyHappenedError("Unknown input type " +
rootNode);
}
- return new Job(keys, root, type, baseUri);
+ return new Job(keys, rootNode, type, baseUri);
}
- public static Job jsJob(
- JobCache.Keys keys, AncestorChain<? extends Statement> root,
- URI baseUri) {
+ public static Job jsJob(JobCache.Keys keys, Statement root, URI baseUri)
{
return new Job(keys, root, ContentType.JS, baseUri);
}
- public static Job exprJob(
- JobCache.Keys keys, AncestorChain<? extends Expression> root,
- URI baseUri) {
+ public static Job exprJob(JobCache.Keys keys, Expression root, URI
baseUri) {
return new Job(keys, root, ContentType.JS, baseUri);
}
public static Job moduleJob(
- JobCache.Keys keys, AncestorChain<? extends UncajoledModule> root,
- URI baseUri) {
+ JobCache.Keys keys, UncajoledModule root, URI baseUri) {
return new Job(keys, root, ContentType.JS, baseUri);
}
- public static Job cajoledJob(
- JobCache.Keys keys, AncestorChain<? extends CajoledModule> root) {
+ public static Job cajoledJob(JobCache.Keys keys, CajoledModule root) {
return new Job(keys, root, ContentType.JS, null);
}
- public static Job domJob(
- JobCache.Keys keys, AncestorChain<? extends Dom> root, URI baseUri) {
+ public static Job domJob(JobCache.Keys keys, Dom root, URI baseUri) {
assert baseUri != null;
return new Job(keys, root, ContentType.HTML, baseUri);
}
public static Job cssJob(
- JobCache.Keys keys, AncestorChain<? extends CssTree.StyleSheet> root,
- URI baseUri) {
+ JobCache.Keys keys, CssTree.StyleSheet root, URI baseUri) {
assert baseUri != null;
return new Job(keys, root, ContentType.CSS, baseUri);
}
private Job(
- JobCache.Keys keys, AncestorChain<?> root, ContentType type,
+ JobCache.Keys keys, ParseTreeNode root, ContentType type,
URI baseUri) {
assert root != null;
this.root = root;
@@ -104,7 +94,7 @@
this.keys = keys == null ? JobCache.none() : keys;
}
- public AncestorChain<?> getRoot() { return root; }
+ public ParseTreeNode getRoot() { return root; }
public ContentType getType() { return type; }
=======================================
--- /trunk/src/com/google/caja/plugin/PluginCompiler.java Fri Jun 11
11:02:06 2010
+++ /trunk/src/com/google/caja/plugin/PluginCompiler.java Mon Jul 12
16:56:22 2010
@@ -96,10 +96,14 @@
this.compilationPipeline = null;
}
- public void addInput(AncestorChain<?> input, URI baseUri) {
+ public void addInput(ParseTreeNode input, URI baseUri) {
jobs.getJobs().add(Job.job(null, input, baseUri));
- jobs.getMessageContext().addInputSource(
- input.node.getFilePosition().source());
+
jobs.getMessageContext().addInputSource(input.getFilePosition().source());
+ }
+
+ @Deprecated
+ public void addInput(AncestorChain<?> input, URI baseUri) {
+ addInput(input.node, baseUri);
}
@Deprecated
@@ -159,7 +163,7 @@
}
});
return soleHtmlJob != null
- ? soleHtmlJob.getRoot().cast(Dom.class).node.getValue() : null;
+ ? ((Dom) soleHtmlJob.getRoot()).getValue() : null;
}
/**
@@ -173,7 +177,7 @@
return job.getType() == ContentType.JS;
}
});
- return soleJsJob != null ? (CajoledModule) soleJsJob.getRoot().node :
null;
+ return soleJsJob != null ? (CajoledModule) soleJsJob.getRoot() : null;
}
private Job getConsolidatedOutput(Criterion<Job> filter) {
=======================================
--- /trunk/src/com/google/caja/plugin/PluginCompilerMain.java Thu Jun 17
11:19:37 2010
+++ /trunk/src/com/google/caja/plugin/PluginCompilerMain.java Mon Jul 12
16:56:22 2010
@@ -24,7 +24,6 @@
import com.google.caja.lexer.ParseException;
import com.google.caja.lexer.TokenConsumer;
import com.google.caja.lexer.TokenQueue;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.css.CssParser;
import com.google.caja.parser.html.Dom;
@@ -177,9 +176,7 @@
for (URI input : inputs) {
try {
ParseTreeNode parseTree = parseInput(input);
- if (null != parseTree) {
- pluginc.addInput(AncestorChain.instance(parseTree), input);
- }
+ if (null != parseTree) { pluginc.addInput(parseTree, input); }
} catch (ParseException ex) {
ex.toMessageQueue(mq);
parsePassed = false;
=======================================
--- /trunk/src/com/google/caja/plugin/stages/CompileHtmlStage.java Thu Feb
25 15:55:35 2010
+++ /trunk/src/com/google/caja/plugin/stages/CompileHtmlStage.java Mon Jul
12 16:56:22 2010
@@ -17,7 +17,7 @@
import com.google.caja.SomethingWidgyHappenedError;
import com.google.caja.lang.css.CssSchema;
import com.google.caja.lang.html.HtmlSchema;
-import com.google.caja.parser.AncestorChain;
+import com.google.caja.lexer.InputSource;
import com.google.caja.parser.css.CssTree;
import com.google.caja.parser.html.Dom;
import com.google.caja.parser.html.DomParser;
@@ -70,6 +70,7 @@
}
for (JobCache.Keys cacheKeys : byKey.keySet()) {
+ URI baseUri = null;
List<Pair<Node, URI>> ihtmlRoots = Lists.newArrayList();
List<CssTree.StyleSheet> stylesheets = Lists.newArrayList();
for (Job job : byKey.get(cacheKeys)) {
@@ -81,15 +82,16 @@
// maintain this behavior, regardless of whatever complexity
that
// might entail.
ihtmlRoots.add(Pair.pair(
- job.getRoot().cast(Dom.class).node.getValue(),
- job.getBaseUri()));
+ ((Dom) job.getRoot()).getValue(), job.getBaseUri()));
+ if (baseUri == null) { baseUri = job.getBaseUri(); }
break;
case CSS:
-
stylesheets.add(job.getRoot().cast(CssTree.StyleSheet.class).node);
+ stylesheets.add((CssTree.StyleSheet) job.getRoot());
break;
default: throw new
SomethingWidgyHappenedError(job.getType().name());
}
}
+ if (baseUri == null) { baseUri = InputSource.UNKNOWN.getUri(); }
MessageQueue mq = jobs.getMessageQueue();
@@ -101,19 +103,16 @@
Pair<Node, List<Block>> htmlAndJs = tc.getSafeHtml(
DomParser.makeDocument(null, null));
- Job outJob = makeJobFromHtml(cacheKeys, htmlAndJs.a);
+ Job outJob = makeJobFromHtml(cacheKeys, htmlAndJs.a, baseUri);
jobs.getJobs().add(outJob);
for (Block bl : htmlAndJs.b) {
- jobs.getJobs().add(Job.jsJob(
- cacheKeys, AncestorChain.instance(bl),
- // TODO(mikesamuel): propagate base URI from ihtmlRoot.
- bl.getFilePosition().source().getUri()));
+ jobs.getJobs().add(Job.jsJob(cacheKeys, bl, baseUri));
}
}
return jobs.hasNoFatalErrors();
}
- abstract Job makeJobFromHtml(JobCache.Keys keys, Node html);
-}
+ abstract Job makeJobFromHtml(JobCache.Keys keys, Node html, URI baseUri);
+}
=======================================
--- /trunk/src/com/google/caja/plugin/stages/ConsolidateCodeStage.java Fri
Jun 11 11:02:06 2010
+++ /trunk/src/com/google/caja/plugin/stages/ConsolidateCodeStage.java Mon
Jul 12 16:56:22 2010
@@ -14,7 +14,6 @@
package com.google.caja.plugin.stages;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.js.CajoledModule;
import com.google.caja.parser.quasiliteral.CajitaModuleRewriter;
import com.google.caja.parser.quasiliteral.ModuleManager;
@@ -41,7 +40,7 @@
List<Job> jsJobs = jobs.getJobsByType(ContentType.JS);
List<CajoledModule> modules = Lists.newArrayList();
for (Job job : jsJobs) {
- CajoledModule module = (CajoledModule) job.getRoot().node;
+ CajoledModule module = (CajoledModule) job.getRoot();
if (module.getSrc() == null) {
// Is top level. Not a loaded module from ValidateJavaScriptStage.
modules.add(module);
@@ -49,8 +48,7 @@
}
jobs.getJobs().removeAll(jsJobs);
CajitaModuleRewriter rw = new CajitaModuleRewriter(mgr);
- jobs.getJobs().add(Job.cajoledJob(
- null, AncestorChain.instance(rw.rewrite(modules))));
+ jobs.getJobs().add(Job.cajoledJob(null, rw.rewrite(modules)));
return jobs.hasNoFatalErrors();
}
}
=======================================
--- /trunk/src/com/google/caja/plugin/stages/DebuggingSymbolsStage.java Mon
Feb 22 08:26:46 2010
+++ /trunk/src/com/google/caja/plugin/stages/DebuggingSymbolsStage.java Mon
Jul 12 16:56:22 2010
@@ -15,7 +15,6 @@
package com.google.caja.plugin.stages;
import com.google.caja.lexer.FilePosition;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.ParseTreeNodeContainer;
import com.google.caja.parser.js.CajoledModule;
@@ -74,27 +73,26 @@
Job job = it.next();
if (job.getType() != ContentType.JS
// May occur if the cajita rewriter does not run due to errors.
- || !(job.getRoot().node instanceof CajoledModule)) {
+ || !(job.getRoot() instanceof CajoledModule)) {
continue;
}
if (DEBUG) {
System.err.println(
"\n\nPre\n===\n"
- +
(job.getRoot().cast(CajoledModule.class).node.toStringDeep(1))
+ + ((CajoledModule) job.getRoot()).toStringDeep(1)
+ "\n\n");
}
DebuggingSymbols symbols = new DebuggingSymbols();
CajoledModule js = addSymbols(
- job.getRoot().cast(CajoledModule.class), symbols, mq);
+ (CajoledModule) job.getRoot(), symbols, mq);
if (!symbols.isEmpty()) {
if (DEBUG) {
System.err.println("\n\nPost\n===\n" + js.toStringDeep()
+ "\n\n");
}
it.set(Job.cajoledJob(
- job.getCacheKeys(),
- AncestorChain.instance(attachSymbols(symbols, js, mq))));
+ job.getCacheKeys(), attachSymbols(symbols, js, mq)));
}
}
return jobs.hasNoFatalErrors();
@@ -108,10 +106,9 @@
* @return rewritten JS.
*/
private CajoledModule addSymbols(
- AncestorChain<CajoledModule> js, DebuggingSymbols symbols,
- MessageQueue mq) {
+ CajoledModule js, DebuggingSymbols symbols, MessageQueue mq) {
return (CajoledModule) new CajaRuntimeDebuggingRewriter(symbols, mq)
- .expand(js.node);
+ .expand(js);
}
/**
=======================================
--- /trunk/src/com/google/caja/plugin/stages/HtmlToBundleStage.java Mon Feb
22 08:26:46 2010
+++ /trunk/src/com/google/caja/plugin/stages/HtmlToBundleStage.java Mon Jul
12 16:56:22 2010
@@ -16,11 +16,11 @@
import com.google.caja.lang.css.CssSchema;
import com.google.caja.lang.html.HtmlSchema;
-import com.google.caja.lexer.InputSource;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.html.Dom;
import com.google.caja.plugin.Job;
+import java.net.URI;
+
import org.w3c.dom.Node;
/**
@@ -35,9 +35,7 @@
}
@Override
- Job makeJobFromHtml(JobCache.Keys cacheKeys, Node html) {
- return Job.domJob(
- cacheKeys, AncestorChain.instance(new Dom(html)),
- InputSource.UNKNOWN.getUri());
+ Job makeJobFromHtml(JobCache.Keys cacheKeys, Node html, URI baseUri) {
+ return Job.domJob(cacheKeys, new Dom(html), baseUri);
}
}
=======================================
--- /trunk/src/com/google/caja/plugin/stages/HtmlToJsStage.java Fri Jun 11
11:02:06 2010
+++ /trunk/src/com/google/caja/plugin/stages/HtmlToJsStage.java Mon Jul 12
16:56:22 2010
@@ -18,7 +18,6 @@
import com.google.caja.lang.html.HtmlSchema;
import com.google.caja.lexer.FilePosition;
import com.google.caja.lexer.TokenConsumer;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.html.Nodes;
import com.google.caja.parser.js.Block;
import com.google.caja.parser.js.Expression;
@@ -31,6 +30,8 @@
import com.google.caja.render.Concatenator;
import com.google.caja.reporting.RenderContext;
+import java.net.URI;
+
import org.w3c.dom.Node;
import java.util.Collections;
@@ -47,9 +48,8 @@
}
@Override
- Job makeJobFromHtml(JobCache.Keys keys, Node html) {
- return Job.jsJob(
- keys, AncestorChain.instance(makeEmitStaticStmt(html)), null);
+ Job makeJobFromHtml(JobCache.Keys keys, Node html, URI baseUri) {
+ return Job.jsJob(keys, makeEmitStaticStmt(html), baseUri);
}
private static Statement makeEmitStaticStmt(Node node) {
=======================================
--- /trunk/src/com/google/caja/plugin/stages/InferFilePositionsStage.java
Tue May 19 14:55:02 2009
+++ /trunk/src/com/google/caja/plugin/stages/InferFilePositionsStage.java
Mon Jul 12 16:56:22 2010
@@ -50,8 +50,8 @@
public class InferFilePositionsStage implements Pipeline.Stage<Jobs> {
public boolean apply(Jobs jobs) {
for (Job job : jobs.getJobs()) {
- inferFilePositions(job.getRoot().cast(ParseTreeNode.class).node);
- inferFilePositions(job.getRoot().cast(ParseTreeNode.class).node);
+ inferFilePositions(job.getRoot());
+ inferFilePositions(job.getRoot());
}
return true;
}
=======================================
--- /trunk/src/com/google/caja/plugin/stages/InlineCssImportsStage.java Mon
Jul 12 13:39:16 2010
+++ /trunk/src/com/google/caja/plugin/stages/InlineCssImportsStage.java Mon
Jul 12 16:56:22 2010
@@ -86,7 +86,7 @@
public class InlineCssImportsStage implements Pipeline.Stage<Jobs> {
public boolean apply(Jobs jobs) {
for (Job job : jobs.getJobsByType(ContentType.CSS)) {
- inlineImports(job.getRoot().cast(CssTree.StyleSheet.class).node,
+ inlineImports((CssTree.StyleSheet) job.getRoot(),
job.getBaseUri(), MAXIMUM_IMPORT_DEPTH,
jobs.getPluginMeta().getUriFetcher(),
jobs.getMessageQueue());
=======================================
--- /trunk/src/com/google/caja/plugin/stages/JobCache.java Mon Feb 22
08:26:46 2010
+++ /trunk/src/com/google/caja/plugin/stages/JobCache.java Mon Jul 12
16:56:22 2010
@@ -27,6 +27,10 @@
*/
public abstract class JobCache {
public abstract Key forJob(Job j);
+ /**
+ * @return null to indicate nothing in cache which is distinct from the
empty
+ * list.
+ */
public abstract List<Job> fetch(Key k);
public abstract void store(Key k, List<Job> derivatives);
=======================================
--- /trunk/src/com/google/caja/plugin/stages/LegacyNamespaceFixupStage.java
Mon Feb 22 08:26:46 2010
+++ /trunk/src/com/google/caja/plugin/stages/LegacyNamespaceFixupStage.java
Mon Jul 12 16:56:22 2010
@@ -54,7 +54,7 @@
Fixer(MessageQueue mq) { this.mq = mq; }
void fix(Job job) {
- fix(job.getRoot().cast(Dom.class).node.getValue());
+ fix(((Dom) job.getRoot()).getValue());
}
private void fix(Node node) {
=======================================
--- /trunk/src/com/google/caja/plugin/stages/OpenTemplateStage.java Tue Dec
29 09:33:01 2009
+++ /trunk/src/com/google/caja/plugin/stages/OpenTemplateStage.java Mon Jul
12 16:56:22 2010
@@ -57,7 +57,7 @@
public final class OpenTemplateStage implements Pipeline.Stage<Jobs> {
public boolean apply(Jobs jobs) {
for (Job job : jobs.getJobsByType(ContentType.JS)) {
- optimizeOpenTemplate(job.getRoot(), jobs);
+ optimizeOpenTemplate(AncestorChain.instance(job.getRoot()), jobs);
}
return jobs.hasNoFatalErrors();
}
=======================================
--- /trunk/src/com/google/caja/plugin/stages/ResolveUriStage.java Mon Jul
12 13:39:16 2010
+++ /trunk/src/com/google/caja/plugin/stages/ResolveUriStage.java Mon Jul
12 16:56:22 2010
@@ -18,7 +18,6 @@
import com.google.caja.lang.html.HtmlSchema;
import com.google.caja.lexer.FilePosition;
import com.google.caja.lexer.escaping.UriUtil;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.html.AttribKey;
import com.google.caja.parser.html.Dom;
import com.google.caja.parser.html.ElKey;
@@ -115,13 +114,12 @@
while (it.hasNext()) {
Job job = it.next();
if (job.getType() != ContentType.HTML) { continue; }
- AncestorChain<Dom> root = job.getRoot().cast(Dom.class);
- Dom dom = job.getRoot().cast(Dom.class).node;
+ Dom dom = (Dom) job.getRoot();
Node node = dom.getValue();
URI baseUri = baseUri(node, job.getBaseUri(), dom.getFilePosition());
if (baseUri != null) {
resolveRelativeUrls(node, baseUri, mq);
- it.set(Job.domJob(job.getCacheKeys(), root, baseUri));
+ it.set(Job.domJob(job.getCacheKeys(), dom, baseUri));
}
}
return true;
=======================================
--- /trunk/src/com/google/caja/plugin/stages/RewriteCssStage.java Tue Dec
29 09:33:01 2009
+++ /trunk/src/com/google/caja/plugin/stages/RewriteCssStage.java Mon Jul
12 16:56:22 2010
@@ -37,7 +37,7 @@
if (job.getType() != ContentType.CSS) { continue; }
new CssRuleRewriter(jobs.getPluginMeta()).rewriteCss(
- job.getRoot().cast(CssTree.StyleSheet.class).node);
+ (CssTree.StyleSheet) job.getRoot());
}
return jobs.hasNoFatalErrors();
}
=======================================
--- /trunk/src/com/google/caja/plugin/stages/RewriteHtmlStage.java Tue Jun
15 18:36:36 2010
+++ /trunk/src/com/google/caja/plugin/stages/RewriteHtmlStage.java Mon Jul
12 16:56:22 2010
@@ -90,7 +90,7 @@
MessageQueue mq = jobs.getMessageQueue();
MessageContext mc = jobs.getMessageContext();
for (Job job : jobs.getJobsByType(ContentType.HTML)) {
- Node root = ((Dom) job.getRoot().node).getValue();
+ Node root = ((Dom) job.getRoot()).getValue();
extractBodyInfo(root, job.getCacheKeys(), job.getBaseUri(), jobs);
HtmlEmbeddedContentFinder finder = new HtmlEmbeddedContentFinder(
htmlSchema, job.getBaseUri(), mq, mc);
@@ -249,8 +249,7 @@
}
}
- jobs.getJobs().add(Job.cssJob(
- keys, AncestorChain.instance(stylesheet), c.getBaseUri()));
+ jobs.getJobs().add(Job.cssJob(keys, stylesheet, c.getBaseUri()));
}
/**
@@ -327,8 +326,7 @@
+ "IMPORTS___.htmlEmitter___"
+ " ./*...@synthetic*/addBodyClasses(@idents);",
"idents", e));
- jobs.getJobs().add(Job.jsJob(
- keys, AncestorChain.instance(s), base));
+ jobs.getJobs().add(Job.jsJob(keys, s, base));
}
}
}
=======================================
--- /trunk/src/com/google/caja/plugin/stages/SanitizeHtmlStage.java Mon Feb
22 08:26:46 2010
+++ /trunk/src/com/google/caja/plugin/stages/SanitizeHtmlStage.java Mon Jul
12 16:56:22 2010
@@ -44,7 +44,7 @@
boolean valid = true;
for (Job job : jobs.getJobsByType(ContentType.HTML)) {
- if (!s.sanitize(job.getRoot().cast(Dom.class).node.getValue())) {
+ if (!s.sanitize(((Dom) job.getRoot()).getValue())) {
valid = false;
// Keep going so that we can display error messages for all inputs.
}
=======================================
--- /trunk/src/com/google/caja/plugin/stages/ValidateCssStage.java Fri Jun
11 11:02:06 2010
+++ /trunk/src/com/google/caja/plugin/stages/ValidateCssStage.java Mon Jul
12 16:56:22 2010
@@ -60,14 +60,13 @@
v.withInvalidNodeMessageLevel(MessageLevel.WARNING);
rw.withInvalidNodeMessageLevel(MessageLevel.WARNING);
for (Job job : jobs.getJobsByType(ContentType.CSS)) {
- validate(v, rw, job.getRoot().cast(CssTree.class));
+ validate(v, rw, AncestorChain.instance((CssTree) job.getRoot()));
}
v.withInvalidNodeMessageLevel(MessageLevel.ERROR);
rw.withInvalidNodeMessageLevel(MessageLevel.ERROR);
- /* TODO: why are we not revalidating? */
for (Job job : jobs.getJobsByType(ContentType.CSS)) {
- validate(v, rw, job.getRoot().cast(CssTree.class));
+ validate(v, rw, AncestorChain.instance((CssTree) job.getRoot()));
}
return jobs.hasNoFatalErrors();
=======================================
--- /trunk/src/com/google/caja/plugin/stages/ValidateJavascriptStage.java
Fri Jun 11 11:02:06 2010
+++ /trunk/src/com/google/caja/plugin/stages/ValidateJavascriptStage.java
Mon Jul 12 16:56:22 2010
@@ -14,7 +14,6 @@
package com.google.caja.plugin.stages;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.js.ArrayConstructor;
import com.google.caja.parser.js.Block;
@@ -57,8 +56,9 @@
JobCache.Keys cacheKeys = job.getCacheKeys();
URI baseUri = job.getBaseUri();
+ Statement s = (Statement) job.getRoot();
ParseTreeNode result = new ExpressionSanitizerCaja(mgr, baseUri)
- .sanitize(uncajoledModule(job.getRoot().cast(Statement.class).node));
+ .sanitize(uncajoledModule(s));
if (!(result instanceof CajoledModule)) {
// Rewriter failed to rewrite so returned its input.
// There should be details on the message queue.
@@ -66,7 +66,7 @@
continue;
}
CajoledModule validated = (CajoledModule) result;
- it.set(Job.cajoledJob(cacheKeys, AncestorChain.instance(validated)));
+ it.set(Job.cajoledJob(cacheKeys, validated));
if (cacheKeys.iterator().hasNext()) {
ArrayConstructor deps = validated.getInlinedModules();
@@ -87,8 +87,7 @@
// show up in the appropriate caches.
for (CajoledModule module : mgr.getModuleMap()) {
String src = module.getSrc();
- jobs.getJobs().add(Job.cajoledJob(
- keys.get(src), AncestorChain.instance(module)));
+ jobs.getJobs().add(Job.cajoledJob(keys.get(src), module));
}
return jobs.hasNoFatalErrors();
=======================================
--- /trunk/src/com/google/caja/service/HtmlHandler.java Tue Jun 29 09:55:34
2010
+++ /trunk/src/com/google/caja/service/HtmlHandler.java Mon Jul 12 16:56:22
2010
@@ -33,7 +33,6 @@
import com.google.caja.lexer.InputSource;
import com.google.caja.lexer.ParseException;
import com.google.caja.lexer.escaping.UriUtil;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.html.Dom;
import com.google.caja.parser.html.DomParser;
import com.google.caja.parser.html.Namespaces;
@@ -149,7 +148,7 @@
compiler.getGoals().without(PipelineMaker.HTML_SAFE_STATIC));
}
- compiler.addInput(AncestorChain.instance(html), inputUri);
+ compiler.addInput(html, inputUri);
if (okToContinue) {
okToContinue &= compiler.run();
}
=======================================
--- /trunk/tests/com/google/caja/demos/benchmarks/BenchmarkRunner.java Tue
Dec 29 09:33:01 2009
+++ /trunk/tests/com/google/caja/demos/benchmarks/BenchmarkRunner.java Mon
Jul 12 16:56:22 2010
@@ -15,7 +15,6 @@
package com.google.caja.demos.benchmarks;
import com.google.caja.lexer.CharProducer;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.plugin.PluginCompiler;
import com.google.caja.plugin.PluginMeta;
import com.google.caja.reporting.MessageQueue;
@@ -136,9 +135,9 @@
CharProducer src = wrapGlobals ?
fromString(wrapGlobals(plain(fromResource(filename)))):
fromString(plain(fromResource(filename)));
- pc.addInput(AncestorChain.instance(valija
- ? BenchmarkUtils.addUseCajitaDirective(js(src))
- : js(src)), is.getUri());
+ pc.addInput(
+ valija ? BenchmarkUtils.addUseCajitaDirective(js(src)) : js(src),
+ is.getUri());
if (!pc.run()) {
return -1;
}
=======================================
--- /trunk/tests/com/google/caja/demos/benchmarks/BenchmarkSize.java Fri
Jun 11 11:02:06 2010
+++ /trunk/tests/com/google/caja/demos/benchmarks/BenchmarkSize.java Mon
Jul 12 16:56:22 2010
@@ -15,7 +15,6 @@
package com.google.caja.demos.benchmarks;
import com.google.caja.lexer.ParseException;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.js.Block;
import com.google.caja.parser.js.CajoledModule;
import com.google.caja.plugin.PluginCompiler;
@@ -174,7 +173,7 @@
if (!valija) { js = BenchmarkUtils.addUseCajitaDirective(js); }
PluginCompiler pc = new PluginCompiler(
TestBuildInfo.getInstance(), meta, mq);
- pc.addInput(AncestorChain.instance(js), null);
+ pc.addInput(js, null);
if (pc.run()) {
result = pc.getJavascript();
(valija ? vMemo : cMemo).put(js, result);
=======================================
--- /trunk/tests/com/google/caja/parser/js/ParserTest.java Tue May 25
12:11:32 2010
+++ /trunk/tests/com/google/caja/parser/js/ParserTest.java Mon Jul 12
16:56:22 2010
@@ -645,7 +645,10 @@
String msg = n + " : " + n.getFilePosition();
try {
// require that n start on or after its previous sibling
- ParseTreeNode prev = nChain.getPrevSibling();
+ int indexInParent = nChain.parent != null
+ ? nChain.parent.node.children().indexOf(nChain.node) : -1;
+ ParseTreeNode prev = indexInParent > 0
+ ? nChain.parent.node.children().get(indexInParent - 1) : null;
if (prev != null) {
if (prev instanceof Identifier && n instanceof FunctionConstructor
&& nChain.parent != null
=======================================
--- /trunk/tests/com/google/caja/plugin/HtmlCompiledPluginTest.java Fri Jun
11 11:02:06 2010
+++ /trunk/tests/com/google/caja/plugin/HtmlCompiledPluginTest.java Mon Jul
12 16:56:22 2010
@@ -15,7 +15,6 @@
package com.google.caja.plugin;
import com.google.caja.lexer.FilePosition;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.quasiliteral.CajitaRewriter;
import com.google.caja.parser.html.Dom;
@@ -231,7 +230,7 @@
TestBuildInfo.getInstance(), meta, mq);
compiler.setMessageContext(mc);
Dom html = new Dom(htmlFragment(fromString("<script>{</script>")));
- compiler.addInput(AncestorChain.instance(html), is.getUri());
+ compiler.addInput(html, is.getUri());
boolean passed = compiler.run();
assertFalse(passed);
@@ -251,8 +250,7 @@
PluginCompiler compiler = new PluginCompiler(
TestBuildInfo.getInstance(), meta, mq);
compiler.setMessageContext(mc);
- compiler.addInput(
- AncestorChain.instance(html),
html.getFilePosition().source().getUri());
+ compiler.addInput(html, html.getFilePosition().source().getUri());
boolean failed = !compiler.run();
=======================================
---
/trunk/tests/com/google/caja/plugin/stages/DebuggingSymbolsStageTest.java
Fri Jun 11 11:02:06 2010
+++
/trunk/tests/com/google/caja/plugin/stages/DebuggingSymbolsStageTest.java
Mon Jul 12 16:56:22 2010
@@ -14,7 +14,6 @@
package com.google.caja.plugin.stages;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.js.Block;
import com.google.caja.parser.js.CajoledModule;
import com.google.caja.parser.quasiliteral.ModuleManager;
@@ -315,8 +314,7 @@
uncajoledModuleBody.toStringDeep(1));
Jobs jobs = new Jobs(mc, mq, new PluginMeta());
- jobs.getJobs().add(
- Job.jsJob(null, AncestorChain.instance(uncajoledModuleBody),
null));
+ jobs.getJobs().add(Job.jsJob(null, uncajoledModuleBody, null));
Pipeline<Jobs> pipeline = new Pipeline<Jobs>();
TestBuildInfo buildInfo = TestBuildInfo.getInstance();
@@ -336,8 +334,8 @@
fail(sb.toString());
}
- CajoledModule cajoledModule =
- jobs.getJobs().get(0).getRoot().cast(CajoledModule.class).node;
+ CajoledModule cajoledModule = (CajoledModule)
+ jobs.getJobs().get(0).getRoot();
try {
String cajoledText = String.format(context, render(cajoledModule));
=======================================
---
/trunk/tests/com/google/caja/plugin/stages/LegacyNamespaceFixupStageTest.java
Tue Mar 2 13:55:40 2010
+++
/trunk/tests/com/google/caja/plugin/stages/LegacyNamespaceFixupStageTest.java
Mon Jul 12 16:56:22 2010
@@ -15,8 +15,6 @@
package com.google.caja.plugin.stages;
import com.google.caja.lexer.InputSource;
-import com.google.caja.parser.AncestorChain;
-import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.html.Dom;
import com.google.caja.parser.html.DomParser;
import com.google.caja.plugin.Job;
@@ -117,7 +115,7 @@
new LegacyNamespaceFixupStage().apply(jobs);
StringBuilder sb = new StringBuilder();
for (Job job : jobs.getJobs()) {
- sb.append(render(job.getRoot().cast(ParseTreeNode.class).node));
+ sb.append(render(job.getRoot()));
sb.append('\n');
}
assertEquals(golden, sb.toString().trim());
@@ -136,9 +134,7 @@
Job job() {
assertEquals(stack, Lists.newArrayList(root));
- return Job.domJob(
- null, AncestorChain.instance(new Dom(root)),
- InputSource.UNKNOWN.getUri());
+ return Job.domJob(null, new Dom(root), InputSource.UNKNOWN.getUri());
}
NamespaceUnawareBuilder open(String qname) {
Element el = doc.createElement(qname);
=======================================
--- /trunk/tests/com/google/caja/plugin/stages/OpenTemplateStageTest.java
Fri Jun 11 11:02:06 2010
+++ /trunk/tests/com/google/caja/plugin/stages/OpenTemplateStageTest.java
Mon Jul 12 16:56:22 2010
@@ -17,7 +17,6 @@
import com.google.caja.lang.css.CssSchema;
import com.google.caja.lang.html.HtmlSchema;
import com.google.caja.lexer.FilePosition;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.js.Block;
import com.google.caja.parser.js.ExpressionStmt;
@@ -106,7 +105,7 @@
Block node = js(fromString(input));
PluginMeta meta = new PluginMeta();
Jobs jobs = new Jobs(mc, mq, meta);
- jobs.getJobs().add(Job.jsJob(null, AncestorChain.instance(node),
null));
+ jobs.getJobs().add(Job.jsJob(null, node, null));
assertTrue(pipeline.apply(jobs));
assertEquals(
@@ -114,8 +113,7 @@
passes, jobs.hasNoErrors());
assertEquals("" + jobs.getJobs(), 1, jobs.getJobs().size());
- ParseTreeNode bare = stripBoilerPlate(
- jobs.getJobs().get(0).getRoot().cast(ParseTreeNode.class).node);
+ ParseTreeNode bare = stripBoilerPlate(jobs.getJobs().get(0).getRoot());
assertEquals(golden, render(bare));
}
@@ -134,10 +132,10 @@
jobs.getJobs().remove(jsJobs);
Block block = new Block(FilePosition.UNKNOWN);
for (Job job : jsJobs) {
- Statement s = job.getRoot().cast(Statement.class).node;
+ Statement s = (Statement) job.getRoot();
block.appendChild(s);
}
- jobs.getJobs().add(Job.jsJob(null, AncestorChain.instance(block),
null));
+ jobs.getJobs().add(Job.jsJob(null, block, null));
return true;
}
}
=======================================
--- /trunk/tests/com/google/caja/plugin/stages/PipelineStageTestCase.java
Thu Jun 17 11:19:37 2010
+++ /trunk/tests/com/google/caja/plugin/stages/PipelineStageTestCase.java
Mon Jul 12 16:56:22 2010
@@ -22,7 +22,6 @@
import com.google.caja.lexer.ParseException;
import com.google.caja.lexer.TokenConsumer;
import com.google.caja.lexer.escaping.UriUtil;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.ParseTreeNode;
import com.google.caja.parser.html.Dom;
import com.google.caja.plugin.DataUriFetcher;
@@ -97,7 +96,7 @@
List<JobStub> actualJobs = Lists.newArrayList();
for (Job job : jobs.getJobs()) {
StringBuilder sb = new StringBuilder();
- ParseTreeNode node = job.getRoot().cast(ParseTreeNode.class).node;
+ ParseTreeNode node = job.getRoot();
TokenConsumer tc = node.makeRenderer(sb, null);
node.render(new RenderContext(tc));
tc.noMoreTokens();
@@ -112,24 +111,17 @@
case HTML:
outputJobs.getJobs().add(
Job.domJob(
- null,
- AncestorChain.instance(
- new Dom(htmlFragment(fromString(inputJob.content,
is)))),
+ null, new Dom(htmlFragment(fromString(inputJob.content,
is))),
is.getUri()));
break;
case CSS:
outputJobs.getJobs().add(
- Job.cssJob(
- null,
- AncestorChain.instance(css(fromString(inputJob.content,
is))),
- is.getUri()));
+ Job.cssJob(null, css(fromString(inputJob.content, is)),
is.getUri())
+ );
break;
case JS:
outputJobs.getJobs().add(
- Job.jsJob(
- null,
- AncestorChain.instance(js(fromString(inputJob.content,
is))),
- null));
+ Job.jsJob(null, js(fromString(inputJob.content, is)), null));
break;
default:
throw new IllegalArgumentException(inputJob.type.name());
=======================================
--- /trunk/tests/com/google/caja/plugin/stages/RewriteHtmlStageTest.java
Thu Jun 17 11:19:37 2010
+++ /trunk/tests/com/google/caja/plugin/stages/RewriteHtmlStageTest.java
Mon Jul 12 16:56:22 2010
@@ -16,7 +16,6 @@
import com.google.caja.lang.html.HtmlSchema;
import com.google.caja.lexer.FilePosition;
-import com.google.caja.parser.AncestorChain;
import com.google.caja.parser.html.Dom;
import com.google.caja.parser.html.Namespaces;
import com.google.caja.parser.js.Block;
@@ -241,8 +240,7 @@
&& new RewriteHtmlStage(schema).apply(jobs);
// Dump the extracted script bits on the queue.
for (Job job :
Lists.newArrayList(jobs.getJobsByType(ContentType.HTML))) {
- Dom dom = job.getRoot().cast(Dom.class).node;
- extractScripts(dom.getValue(), jobs);
+ extractScripts(((Dom) job.getRoot()).getValue(), jobs);
}
return result;
}
@@ -256,8 +254,7 @@
int jobNum = jobs.getJobs().size();
el.setAttributeNS(
Namespaces.HTML_NAMESPACE_URI, "jobnum", "" + jobNum);
- jobs.getJobs().add(
- Job.jsJob(null, AncestorChain.instance(extracted), null));
+ jobs.getJobs().add(Job.jsJob(null, extracted, null));
}
for (Node c = el.getFirstChild(); c != null; c =
c.getNextSibling()) {
extractScripts(c, jobs);