Revision: 4503
Author: [email protected]
Date: Tue Jun 14 15:54:02 2011
Log: Modify RenderContext to allow easy subclassing.
http://codereview.appspot.com/4610043
[email protected]
http://code.google.com/p/google-caja/source/detail?r=4503
Modified:
/trunk/src/com/google/caja/demos/playground/server/GWTCajolingServiceImpl.java
/trunk/src/com/google/caja/parser/html/Dom.java
/trunk/src/com/google/caja/parser/js/CajoledModule.java
/trunk/src/com/google/caja/reporting/RenderContext.java
/trunk/tests/com/google/caja/plugin/BrowserTestCase.java
=======================================
---
/trunk/src/com/google/caja/demos/playground/server/GWTCajolingServiceImpl.java
Mon Jun 6 16:07:54 2011
+++
/trunk/src/com/google/caja/demos/playground/server/GWTCajolingServiceImpl.java
Tue Jun 14 15:54:02 2011
@@ -19,7 +19,6 @@
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
-import java.net.URLConnection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -136,13 +135,13 @@
Map<InputSource, ? extends CharSequence> originalSources
= Collections.singletonMap(new InputSource(guessURI(base, url)),
input);
-
+
PluginMeta meta = new PluginMeta(fetcher, null);
meta.setEnableES53(es53Mode);
PluginCompiler compiler = makePluginCompiler(meta, mq);
compiler.setJobCache(new AppEngineJobCache());
compiler.setMessageContext(mc);
-
+
URI uri = guessURI(base, url);
InputSource is = new InputSource(uri);
CharProducer cp = CharProducer.Factory.fromString(input, is);
@@ -156,17 +155,17 @@
mq.addMessage(e.getCajaMessage());
okToContinue = false;
}
-
+
if (okToContinue && inputNode != null) {
compiler.addInput(inputNode, uri);
okToContinue &= compiler.run();
}
-
+
outputJs = okToContinue ? compiler.getJavascript() : null;
outputHtml = okToContinue ? compiler.getStaticHtml() : null;
-
+
String[] messages = formatMessages(originalSources, mc, mq);
-
+
StringBuilder jsOut = new StringBuilder();
TokenConsumer renderer = new JsPrettyPrinter(new Concatenator(jsOut));
RenderContext rc = new RenderContext(renderer)
=======================================
--- /trunk/src/com/google/caja/parser/html/Dom.java Fri Apr 8 23:31:20 2011
+++ /trunk/src/com/google/caja/parser/html/Dom.java Tue Jun 14 15:54:02 2011
@@ -25,14 +25,13 @@
import com.google.caja.util.Callback;
import java.io.IOException;
-import java.io.Serializable;
import org.w3c.dom.Node;
/**
* A parse tree wrapper for an org.w3c.DOM node.
*/
-public final class Dom extends AbstractParseTreeNode implements
Serializable {
+public final class Dom extends AbstractParseTreeNode {
private static final long serialVersionUID = -5111504015682453850L;
private final Node n;
=======================================
--- /trunk/src/com/google/caja/parser/js/CajoledModule.java Fri Apr 8
23:31:20 2011
+++ /trunk/src/com/google/caja/parser/js/CajoledModule.java Tue Jun 14
15:54:02 2011
@@ -30,7 +30,6 @@
import com.google.javascript.jscomp.jsonml.JsonML;
import java.io.IOException;
-import java.io.Serializable;
import java.net.URI;
import java.util.Arrays;
import java.util.Collections;
@@ -48,9 +47,9 @@
* @author [email protected]
*/
public final class CajoledModule extends AbstractParseTreeNode
- implements JsonMLCompatible, Serializable {
+ implements JsonMLCompatible {
private static final long serialVersionUID = -2499144011243193616L;
-
+
// A stub file name by which to call the (otherwise anonymous) cajoled
output.
private static final InputSource CAJOLED_OUTPUT_FILE_NAME =
new InputSource(URI.create("file:///CAJOLED-OUTPUT"));
=======================================
--- /trunk/src/com/google/caja/reporting/RenderContext.java Tue Aug 10
14:40:28 2010
+++ /trunk/src/com/google/caja/reporting/RenderContext.java Tue Jun 14
15:54:02 2011
@@ -41,7 +41,7 @@
this(true, false, false, MarkupRenderMode.HTML, false, out);
}
- private RenderContext(
+ protected RenderContext(
boolean asciiOnly, boolean embeddable, boolean json,
MarkupRenderMode markupMode, boolean rawObjKeys, TokenConsumer out) {
if (null == out) { throw new NullPointerException(); }
@@ -69,27 +69,43 @@
public final MarkupRenderMode markupRenderMode() { return markupMode; }
public final boolean rawObjKeys() { return rawObjKeys; }
public final TokenConsumer getOut() { return out; }
+
+ /** Must be overridden by subclasses to return an instance of the
subclass. */
+ protected RenderContext derive(
+ boolean asciiOnly, boolean embeddable, boolean json,
+ MarkupRenderMode markupMode, boolean rawObjKeys) {
+ return new RenderContext(
+ asciiOnly, embeddable, json, markupMode, rawObjKeys, out);
+ }
+
+ private RenderContext deriveChecked(
+ boolean asciiOnly, boolean embeddable, boolean json,
+ MarkupRenderMode markupMode, boolean rawObjKeys) {
+ RenderContext derived = derive(
+ asciiOnly, embeddable, json, markupMode, rawObjKeys);
+ // Enforce that derive has been overridden.
+ assert derived.getClass() == getClass();
+ return derived;
+ }
public RenderContext withAsciiOnly(boolean b) {
return b != asciiOnly
- ? new RenderContext(b, embeddable, json, markupMode, rawObjKeys,
out)
+ ? deriveChecked(b, embeddable, json, markupMode, rawObjKeys)
: this;
}
public RenderContext withEmbeddable(boolean b) {
return b != embeddable
- ? new RenderContext(asciiOnly, b, json, markupMode, rawObjKeys,
out)
+ ? deriveChecked(asciiOnly, b, json, markupMode, rawObjKeys)
: this;
}
public RenderContext withJson(boolean b) {
return b != json
- ? new RenderContext(
- asciiOnly, embeddable, b, markupMode, rawObjKeys, out)
+ ? deriveChecked(asciiOnly, embeddable, b, markupMode, rawObjKeys)
: this;
}
public RenderContext withMarkupRenderMode(MarkupRenderMode markupMode) {
return markupMode != this.markupMode
- ? new RenderContext(
- asciiOnly, embeddable, json, markupMode, rawObjKeys, out)
+ ? deriveChecked(asciiOnly, embeddable, json, markupMode,
rawObjKeys)
: this;
}
@Deprecated
@@ -99,7 +115,7 @@
}
public RenderContext withRawObjKeys(boolean b) {
return b != this.rawObjKeys
- ? new RenderContext(asciiOnly, embeddable, json, markupMode, b,
out)
+ ? deriveChecked(asciiOnly, embeddable, json, markupMode, b)
: this;
}
}
=======================================
--- /trunk/tests/com/google/caja/plugin/BrowserTestCase.java Thu Apr 14
16:53:55 2011
+++ /trunk/tests/com/google/caja/plugin/BrowserTestCase.java Tue Jun 14
15:54:02 2011
@@ -264,7 +264,9 @@
*
* @param servlets a Jetty Context to which servlets can be added.
*/
- protected void addServlets(Context servlets) { }
+ protected void addServlets(Context servlets) {
+ // Adds none but may be overridden.
+ }
public interface Check {
boolean run();