Build narya-tools with jarjar so as to hide its included dependencies in the
unfortunate event that someone puts it on a real project classpath. Modified GenTask to totally hide Velocity from derived classes so that external libraries can make use of it in their own Ant tasks without inheriting a Velocity dependency and also becoming booched because Velocity was renamed in jarjar and won't link against an unrenamed Velocity. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6185 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -209,7 +209,9 @@
|
|||||||
<exclude name="**/*.html,**/*.png"/>
|
<exclude name="**/*.html,**/*.png"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${deploy.dir}/${lib.name}-tools.jar">
|
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
|
||||||
|
classpathref="classpath"/>
|
||||||
|
<jarjar destfile="${deploy.dir}/${lib.name}-tools.jar">
|
||||||
<fileset dir="${classes.dir}">
|
<fileset dir="${classes.dir}">
|
||||||
<include name="com/threerings/io/**"/>
|
<include name="com/threerings/io/**"/>
|
||||||
<include name="com/threerings/presents/**"/>
|
<include name="com/threerings/presents/**"/>
|
||||||
@@ -220,7 +222,12 @@
|
|||||||
<zipfileset src="${deploy.dir}/lib/javassist.jar"/>
|
<zipfileset src="${deploy.dir}/lib/javassist.jar"/>
|
||||||
<zipfileset src="${deploy.dir}/lib/guava.jar"/>
|
<zipfileset src="${deploy.dir}/lib/guava.jar"/>
|
||||||
<zipfileset src="${deploy.dir}/lib/commons-collections.jar"/>
|
<zipfileset src="${deploy.dir}/lib/commons-collections.jar"/>
|
||||||
</jar>
|
<rule pattern="com.google.**" result="cgc.@1"/>
|
||||||
|
<rule pattern="org.apache.velocity.**" result="oav.@1"/>
|
||||||
|
<rule pattern="org.apache.commons.collections.**" result="oacc.@1"/>
|
||||||
|
<rule pattern="com.samskivert.**" result="cs.@1"/>
|
||||||
|
<rule pattern="javassist.**" result="ja.@1"/>
|
||||||
|
</jarjar>
|
||||||
<jar destfile="${deploy.dir}/${lib.name}-tests.jar">
|
<jar destfile="${deploy.dir}/${lib.name}-tests.jar">
|
||||||
<fileset dir="tests/${classes.dir}" includes="com/threerings/**"/>
|
<fileset dir="tests/${classes.dir}" includes="com/threerings/**"/>
|
||||||
</jar>
|
</jar>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
<include name="gwt-user.jar"/>
|
<include name="gwt-user.jar"/>
|
||||||
<include name="gwt-utils.jar"/>
|
<include name="gwt-utils.jar"/>
|
||||||
<include name="javassist.jar"/>
|
<include name="javassist.jar"/>
|
||||||
|
<include name="jarjar-1.0.jar"/>
|
||||||
<include name="jsr250-api.jar"/>
|
<include name="jsr250-api.jar"/>
|
||||||
<include name="junit4.jar"/>
|
<include name="junit4.jar"/>
|
||||||
<include name="retroweaver-all-1.2.2.jar"/>
|
<include name="retroweaver-all-1.2.2.jar"/>
|
||||||
|
|||||||
@@ -27,15 +27,15 @@ import java.lang.reflect.ParameterizedType;
|
|||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringWriter;
|
|
||||||
|
|
||||||
import org.apache.tools.ant.BuildException;
|
import org.apache.tools.ant.BuildException;
|
||||||
import org.apache.tools.ant.DirectoryScanner;
|
import org.apache.tools.ant.DirectoryScanner;
|
||||||
import org.apache.tools.ant.types.FileSet;
|
import org.apache.tools.ant.types.FileSet;
|
||||||
import org.apache.velocity.VelocityContext;
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import com.samskivert.util.StringUtil;
|
import com.samskivert.util.StringUtil;
|
||||||
@@ -129,16 +129,16 @@ public class GenDObjectTask extends GenTask
|
|||||||
Class<?> ftype = f.getType();
|
Class<?> ftype = f.getType();
|
||||||
String fname = f.getName();
|
String fname = f.getName();
|
||||||
|
|
||||||
// create our velocity context
|
// create a map to hold our template data
|
||||||
VelocityContext ctx = new VelocityContext();
|
Map<String, Object> data = new HashMap<String, Object>();
|
||||||
ctx.put("field", fname);
|
data.put("field", fname);
|
||||||
ctx.put("generated", GenUtil.getGeneratedAnnotation(getClass(), 4, false));
|
data.put("generated", GenUtil.getGeneratedAnnotation(getClass(), 4, false));
|
||||||
ctx.put("type", GenUtil.simpleName(f));
|
data.put("type", GenUtil.simpleName(f));
|
||||||
ctx.put("wrapfield", GenUtil.boxArgument(ftype, "value"));
|
data.put("wrapfield", GenUtil.boxArgument(ftype, "value"));
|
||||||
ctx.put("wrapofield", GenUtil.boxArgument(ftype, "ovalue"));
|
data.put("wrapofield", GenUtil.boxArgument(ftype, "ovalue"));
|
||||||
ctx.put("clonefield", GenUtil.cloneArgument(_dsclass, f, "value"));
|
data.put("clonefield", GenUtil.cloneArgument(_dsclass, f, "value"));
|
||||||
ctx.put("capfield", StringUtil.unStudlyName(fname).toUpperCase());
|
data.put("capfield", StringUtil.unStudlyName(fname).toUpperCase());
|
||||||
ctx.put("upfield", StringUtil.capitalize(fname));
|
data.put("upfield", StringUtil.capitalize(fname));
|
||||||
|
|
||||||
// determine the type of transport
|
// determine the type of transport
|
||||||
TransportHint hint = f.getAnnotation(TransportHint.class);
|
TransportHint hint = f.getAnnotation(TransportHint.class);
|
||||||
@@ -155,14 +155,14 @@ public class GenDObjectTask extends GenTask
|
|||||||
" com.threerings.presents.net.Transport.Type." +
|
" com.threerings.presents.net.Transport.Type." +
|
||||||
hint.type().name() + ", " + hint.channel() + ")";
|
hint.type().name() + ", " + hint.channel() + ")";
|
||||||
}
|
}
|
||||||
ctx.put("transport", transport);
|
data.put("transport", transport);
|
||||||
|
|
||||||
// if this field is an array, we need its component types
|
// if this field is an array, we need its component types
|
||||||
if (ftype.isArray()) {
|
if (ftype.isArray()) {
|
||||||
Class<?> etype = ftype.getComponentType();
|
Class<?> etype = ftype.getComponentType();
|
||||||
ctx.put("elemtype", GenUtil.simpleName(etype));
|
data.put("elemtype", GenUtil.simpleName(etype));
|
||||||
ctx.put("wrapelem", GenUtil.boxArgument(etype, "value"));
|
data.put("wrapelem", GenUtil.boxArgument(etype, "value"));
|
||||||
ctx.put("wrapoelem", GenUtil.boxArgument(etype, "ovalue"));
|
data.put("wrapoelem", GenUtil.boxArgument(etype, "ovalue"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// if this field is a generic DSet, we need its bound type
|
// if this field is a generic DSet, we need its bound type
|
||||||
@@ -175,10 +175,10 @@ public class GenDObjectTask extends GenTask
|
|||||||
if (t instanceof ParameterizedType) {
|
if (t instanceof ParameterizedType) {
|
||||||
ParameterizedType pt = (ParameterizedType)t;
|
ParameterizedType pt = (ParameterizedType)t;
|
||||||
if (pt.getActualTypeArguments().length > 0) {
|
if (pt.getActualTypeArguments().length > 0) {
|
||||||
ctx.put("etype", GenUtil.simpleName(pt.getActualTypeArguments()[0]));
|
data.put("etype", GenUtil.simpleName(pt.getActualTypeArguments()[0]));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ctx.put("etype", "DSet.Entry");
|
data.put("etype", "DSet.Entry");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,19 +190,13 @@ public class GenDObjectTask extends GenTask
|
|||||||
tname = "oidlist.tmpl";
|
tname = "oidlist.tmpl";
|
||||||
}
|
}
|
||||||
|
|
||||||
// now generate our bits
|
// append the merged templates as appropriate to the string buffers
|
||||||
StringWriter fwriter = new StringWriter();
|
|
||||||
StringWriter mwriter = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(NAME_TMPL, "UTF-8", ctx, fwriter);
|
|
||||||
_velocity.mergeTemplate(BASE_TMPL + tname, "UTF-8", ctx, mwriter);
|
|
||||||
|
|
||||||
// and append them as appropriate to the string buffers
|
|
||||||
if (ii > 0) {
|
if (ii > 0) {
|
||||||
fsection.append("\n");
|
fsection.append("\n");
|
||||||
msection.append("\n");
|
msection.append("\n");
|
||||||
}
|
}
|
||||||
fsection.append(fwriter.toString());
|
fsection.append(mergeTemplate(NAME_TMPL, data));
|
||||||
msection.append(mwriter.toString());
|
msection.append(mergeTemplate(BASE_TMPL + tname, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
// now bolt everything back together into a class declaration
|
// now bolt everything back together into a class declaration
|
||||||
|
|||||||
@@ -28,12 +28,9 @@ import java.util.Iterator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.StringWriter;
|
|
||||||
|
|
||||||
import com.google.common.collect.Iterators;
|
import com.google.common.collect.Iterators;
|
||||||
|
|
||||||
import org.apache.velocity.VelocityContext;
|
|
||||||
|
|
||||||
import com.samskivert.util.ComparableArrayList;
|
import com.samskivert.util.ComparableArrayList;
|
||||||
import com.samskivert.util.StringUtil;
|
import com.samskivert.util.StringUtil;
|
||||||
|
|
||||||
@@ -113,25 +110,20 @@ public class GenReceiverTask extends InvocationTask
|
|||||||
checkedAdd(implist, rpackage + "." + rname);
|
checkedAdd(implist, rpackage + "." + rname);
|
||||||
implist.sort();
|
implist.sort();
|
||||||
|
|
||||||
VelocityContext ctx = new VelocityContext();
|
|
||||||
ctx.put("name", name);
|
|
||||||
ctx.put("package", spackage);
|
|
||||||
ctx.put("methods", methods);
|
|
||||||
ctx.put("imports", implist);
|
|
||||||
|
|
||||||
StringWriter sw = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(SENDER_TMPL, "UTF-8", ctx, sw);
|
|
||||||
|
|
||||||
// determine the path to our sender file
|
// determine the path to our sender file
|
||||||
String mpath = source.getPath();
|
String mpath = source.getPath();
|
||||||
mpath = mpath.replace("Receiver", "Sender");
|
mpath = mpath.replace("Receiver", "Sender");
|
||||||
mpath = replacePath(mpath, "/client/", "/server/");
|
mpath = replacePath(mpath, "/client/", "/server/");
|
||||||
writeFile(mpath, sw.toString());
|
writeFile(mpath, mergeTemplate(SENDER_TMPL,
|
||||||
|
"name", name,
|
||||||
|
"package", spackage,
|
||||||
|
"methods", methods,
|
||||||
|
"imports", implist));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void generateDecoder (Class<?> receiver, File source, String rname, String rpackage,
|
protected void generateDecoder (Class<?> receiver, File source, String rname, String rpackage,
|
||||||
List<ServiceMethod> methods, Iterator<String> imports, String rcode)
|
List<ServiceMethod> methods, Iterator<String> imports,
|
||||||
throws Exception
|
String rcode) throws Exception
|
||||||
{
|
{
|
||||||
String name = rname.replace("Receiver", "");
|
String name = rname.replace("Receiver", "");
|
||||||
|
|
||||||
@@ -141,20 +133,15 @@ public class GenReceiverTask extends InvocationTask
|
|||||||
checkedAdd(implist, InvocationDecoder.class.getName());
|
checkedAdd(implist, InvocationDecoder.class.getName());
|
||||||
implist.sort();
|
implist.sort();
|
||||||
|
|
||||||
VelocityContext ctx = new VelocityContext();
|
|
||||||
ctx.put("name", name);
|
|
||||||
ctx.put("receiver_code", rcode);
|
|
||||||
ctx.put("package", rpackage);
|
|
||||||
ctx.put("methods", methods);
|
|
||||||
ctx.put("imports", implist);
|
|
||||||
|
|
||||||
StringWriter sw = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(DECODER_TMPL, "UTF-8", ctx, sw);
|
|
||||||
|
|
||||||
// determine the path to our sender file
|
// determine the path to our sender file
|
||||||
String mpath = source.getPath();
|
String mpath = source.getPath();
|
||||||
mpath = mpath.replace("Receiver", "Decoder");
|
mpath = mpath.replace("Receiver", "Decoder");
|
||||||
writeFile(mpath, sw.toString());
|
writeFile(mpath, mergeTemplate(DECODER_TMPL,
|
||||||
|
"name", name,
|
||||||
|
"receiver_code", rcode,
|
||||||
|
"package", rpackage,
|
||||||
|
"methods", methods,
|
||||||
|
"imports", implist));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Specifies the path to the sender template. */
|
/** Specifies the path to the sender template. */
|
||||||
|
|||||||
@@ -24,12 +24,11 @@ package com.threerings.presents.tools;
|
|||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.StringWriter;
|
|
||||||
|
|
||||||
import org.apache.velocity.VelocityContext;
|
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
@@ -260,7 +259,7 @@ public class GenServiceTask extends InvocationTask
|
|||||||
// remove imports in our own package
|
// remove imports in our own package
|
||||||
imports.removeSamePackage(mpackage);
|
imports.removeSamePackage(mpackage);
|
||||||
|
|
||||||
VelocityContext ctx = new VelocityContext();
|
Map<String, Object> ctx = new HashMap<String, Object>();
|
||||||
ctx.put("name", name);
|
ctx.put("name", name);
|
||||||
ctx.put("generated", getGeneratedAnnotation(name));
|
ctx.put("generated", getGeneratedAnnotation(name));
|
||||||
ctx.put("package", mpackage);
|
ctx.put("package", mpackage);
|
||||||
@@ -272,10 +271,7 @@ public class GenServiceTask extends InvocationTask
|
|||||||
String mpath = source.getPath();
|
String mpath = source.getPath();
|
||||||
mpath = mpath.replace("Service", "Marshaller");
|
mpath = mpath.replace("Service", "Marshaller");
|
||||||
mpath = replacePath(mpath, "/client/", "/data/");
|
mpath = replacePath(mpath, "/client/", "/data/");
|
||||||
|
writeFile(mpath, mergeTemplate(MARSHALLER_TMPL, ctx));
|
||||||
StringWriter sw = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(MARSHALLER_TMPL, "UTF-8", ctx, sw);
|
|
||||||
writeFile(mpath, sw.toString());
|
|
||||||
|
|
||||||
// if we're not configured with an ActionScript source root, don't generate the
|
// if we're not configured with an ActionScript source root, don't generate the
|
||||||
// ActionScript versions
|
// ActionScript versions
|
||||||
@@ -345,9 +341,7 @@ public class GenServiceTask extends InvocationTask
|
|||||||
|
|
||||||
// generate an ActionScript version of our marshaller
|
// generate an ActionScript version of our marshaller
|
||||||
String ampath = _asroot + File.separator + mppath + File.separator + mname + ".as";
|
String ampath = _asroot + File.separator + mppath + File.separator + mname + ".as";
|
||||||
sw = new StringWriter();
|
writeFile(ampath, mergeTemplate(AS_MARSHALLER_TMPL, ctx));
|
||||||
_velocity.mergeTemplate(AS_MARSHALLER_TMPL, "UTF-8", ctx, sw);
|
|
||||||
writeFile(ampath, sw.toString());
|
|
||||||
|
|
||||||
// ----------- Part III - as listener marshallers
|
// ----------- Part III - as listener marshallers
|
||||||
|
|
||||||
@@ -382,11 +376,9 @@ public class GenServiceTask extends InvocationTask
|
|||||||
|
|
||||||
ctx.put("imports", imports.toList());
|
ctx.put("imports", imports.toList());
|
||||||
ctx.put("listener", listener);
|
ctx.put("listener", listener);
|
||||||
sw = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(AS_LISTENER_MARSHALLER_TMPL, "UTF-8", ctx, sw);
|
|
||||||
String aslpath = _asroot + File.separator + mppath +
|
String aslpath = _asroot + File.separator + mppath +
|
||||||
File.separator + mname + "_" + listener.getName() + "Marshaller.as";
|
File.separator + mname + "_" + listener.getName() + "Marshaller.as";
|
||||||
writeFile(aslpath, sw.toString());
|
writeFile(aslpath, mergeTemplate(AS_LISTENER_MARSHALLER_TMPL, ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------- Part IV - as service
|
// ----------- Part IV - as service
|
||||||
@@ -433,9 +425,7 @@ public class GenServiceTask extends InvocationTask
|
|||||||
|
|
||||||
// generate an ActionScript version of our service
|
// generate an ActionScript version of our service
|
||||||
String aspath = _asroot + File.separator + sppath + File.separator + sname + ".as";
|
String aspath = _asroot + File.separator + sppath + File.separator + sname + ".as";
|
||||||
sw = new StringWriter();
|
writeFile(aspath, mergeTemplate(AS_SERVICE_TMPL, ctx));
|
||||||
_velocity.mergeTemplate(AS_SERVICE_TMPL, "UTF-8", ctx, sw);
|
|
||||||
writeFile(aspath, sw.toString());
|
|
||||||
|
|
||||||
// ----------- Part V - as service listeners
|
// ----------- Part V - as service listeners
|
||||||
Class<?> isil = InvocationService.InvocationListener.class;
|
Class<?> isil = InvocationService.InvocationListener.class;
|
||||||
@@ -470,20 +460,14 @@ public class GenServiceTask extends InvocationTask
|
|||||||
ctx.put("imports", imports.toList());
|
ctx.put("imports", imports.toList());
|
||||||
ctx.put("listener", listener);
|
ctx.put("listener", listener);
|
||||||
|
|
||||||
sw = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(AS_LISTENER_SERVICE_TMPL, "UTF-8", ctx, sw);
|
|
||||||
String aslpath = _asroot + File.separator + sppath +
|
String aslpath = _asroot + File.separator + sppath +
|
||||||
File.separator + sname + "_" +
|
File.separator + sname + "_" + listener.getName() + "Listener.as";
|
||||||
listener.getName() + "Listener.as";
|
writeFile(aslpath, mergeTemplate(AS_LISTENER_SERVICE_TMPL, ctx));
|
||||||
writeFile(aslpath, sw.toString());
|
|
||||||
|
|
||||||
if (_aslistenerAdapters.contains(sname)) {
|
if (_aslistenerAdapters.contains(sname)) {
|
||||||
sw = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(AS_LISTENER_ADAPTER_SERVICE_TMPL, "UTF-8", ctx, sw);
|
|
||||||
String aslapath = _asroot + File.separator + sppath +
|
String aslapath = _asroot + File.separator + sppath +
|
||||||
File.separator + sname + "_" +
|
File.separator + sname + "_" + listener.getName() + "ListenerAdapter.as";
|
||||||
listener.getName() + "ListenerAdapter.as";
|
writeFile(aslapath, mergeTemplate(AS_LISTENER_ADAPTER_SERVICE_TMPL, ctx));
|
||||||
writeFile(aslapath, sw.toString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -534,22 +518,16 @@ public class GenServiceTask extends InvocationTask
|
|||||||
// remove imports in our own package
|
// remove imports in our own package
|
||||||
imports.removeSamePackage(dpackage);
|
imports.removeSamePackage(dpackage);
|
||||||
|
|
||||||
VelocityContext ctx = new VelocityContext();
|
|
||||||
ctx.put("name", name);
|
|
||||||
ctx.put("generated", getGeneratedAnnotation(name));
|
|
||||||
ctx.put("package", dpackage);
|
|
||||||
ctx.put("methods", sdesc.methods);
|
|
||||||
ctx.put("imports", imports.toList());
|
|
||||||
|
|
||||||
StringWriter sw = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(DISPATCHER_TMPL, "UTF-8", ctx, sw);
|
|
||||||
|
|
||||||
// determine the path to our marshaller file
|
// determine the path to our marshaller file
|
||||||
String mpath = source.getPath();
|
String mpath = source.getPath();
|
||||||
mpath = mpath.replace("Service", "Dispatcher");
|
mpath = mpath.replace("Service", "Dispatcher");
|
||||||
mpath = replacePath(mpath, "/client/", "/server/");
|
mpath = replacePath(mpath, "/client/", "/server/");
|
||||||
|
writeFile(mpath, mergeTemplate(DISPATCHER_TMPL,
|
||||||
writeFile(mpath, sw.toString());
|
"name", name,
|
||||||
|
"generated", getGeneratedAnnotation(name),
|
||||||
|
"package", dpackage,
|
||||||
|
"methods", sdesc.methods,
|
||||||
|
"imports", imports.toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void generateProvider (File source, ServiceDescription sdesc)
|
protected void generateProvider (File source, ServiceDescription sdesc)
|
||||||
@@ -593,23 +571,17 @@ public class GenServiceTask extends InvocationTask
|
|||||||
// remove imports in our own package
|
// remove imports in our own package
|
||||||
imports.removeSamePackage(mpackage);
|
imports.removeSamePackage(mpackage);
|
||||||
|
|
||||||
VelocityContext ctx = new VelocityContext();
|
|
||||||
ctx.put("name", name);
|
|
||||||
ctx.put("generated", getGeneratedAnnotation(name));
|
|
||||||
ctx.put("package", mpackage);
|
|
||||||
ctx.put("methods", sdesc.methods);
|
|
||||||
ctx.put("listeners", sdesc.listeners);
|
|
||||||
ctx.put("imports", imports.toList());
|
|
||||||
|
|
||||||
StringWriter sw = new StringWriter();
|
|
||||||
_velocity.mergeTemplate(PROVIDER_TMPL, "UTF-8", ctx, sw);
|
|
||||||
|
|
||||||
// determine the path to our provider file
|
// determine the path to our provider file
|
||||||
String mpath = source.getPath();
|
String mpath = source.getPath();
|
||||||
mpath = mpath.replace("Service", "Provider");
|
mpath = mpath.replace("Service", "Provider");
|
||||||
mpath = replacePath(mpath, "/client/", "/server/");
|
mpath = replacePath(mpath, "/client/", "/server/");
|
||||||
|
writeFile(mpath, mergeTemplate(PROVIDER_TMPL,
|
||||||
writeFile(mpath, sw.toString());
|
"name", name,
|
||||||
|
"generated", getGeneratedAnnotation(name),
|
||||||
|
"package", mpackage,
|
||||||
|
"methods", sdesc.methods,
|
||||||
|
"listeners", sdesc.listeners,
|
||||||
|
"imports", imports.toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -21,11 +21,17 @@
|
|||||||
|
|
||||||
package com.threerings.presents.tools;
|
package com.threerings.presents.tools;
|
||||||
|
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.tools.ant.AntClassLoader;
|
import org.apache.tools.ant.AntClassLoader;
|
||||||
import org.apache.tools.ant.BuildException;
|
import org.apache.tools.ant.BuildException;
|
||||||
import org.apache.tools.ant.Task;
|
import org.apache.tools.ant.Task;
|
||||||
import org.apache.tools.ant.types.Reference;
|
import org.apache.tools.ant.types.Reference;
|
||||||
import org.apache.tools.ant.util.ClasspathUtils;
|
import org.apache.tools.ant.util.ClasspathUtils;
|
||||||
|
|
||||||
|
import org.apache.velocity.VelocityContext;
|
||||||
import org.apache.velocity.app.VelocityEngine;
|
import org.apache.velocity.app.VelocityEngine;
|
||||||
|
|
||||||
import com.samskivert.velocity.VelocityUtil;
|
import com.samskivert.velocity.VelocityUtil;
|
||||||
@@ -60,6 +66,49 @@ public abstract class GenTask extends Task
|
|||||||
((AntClassLoader)_cloader).setParent(getClass().getClassLoader());
|
((AntClassLoader)_cloader).setParent(getClass().getClassLoader());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merges the specified template using the supplied mapping of keys to objects.
|
||||||
|
*
|
||||||
|
* @param data a series of key, value pairs where the keys must be strings and the values can
|
||||||
|
* be any object.
|
||||||
|
*/
|
||||||
|
protected String mergeTemplate (String template, Object... data)
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
VelocityContext ctx = new VelocityContext();
|
||||||
|
for (int ii = 0; ii < data.length; ii += 2) {
|
||||||
|
ctx.put((String)data[ii], data[ii+1]);
|
||||||
|
}
|
||||||
|
return mergeTemplate(template, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merges the specified template using the supplied mapping of string keys to objects.
|
||||||
|
*
|
||||||
|
* @return a string containing the merged text.
|
||||||
|
*/
|
||||||
|
protected String mergeTemplate (String template, Map<String, Object> data)
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
VelocityContext ctx = new VelocityContext();
|
||||||
|
for (Map.Entry<String, Object> entry : data.entrySet()) {
|
||||||
|
ctx.put(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
return mergeTemplate(template, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A helper function for {@link #mergeTemplate(String, Map<String, Object>)} and friends. Don't
|
||||||
|
* use this directly as you'll end up depending on Velocity and your code won't build.
|
||||||
|
*/
|
||||||
|
protected String mergeTemplate (String template, VelocityContext ctx)
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
StringWriter writer = new StringWriter();
|
||||||
|
_velocity.mergeTemplate(template, "UTF-8", ctx, writer);
|
||||||
|
return writer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
protected Class<?> loadClass (String name)
|
protected Class<?> loadClass (String name)
|
||||||
{
|
{
|
||||||
if (_cloader == null) {
|
if (_cloader == null) {
|
||||||
@@ -81,6 +130,7 @@ public abstract class GenTask extends Task
|
|||||||
/** Used to do our own classpath business. */
|
/** Used to do our own classpath business. */
|
||||||
protected ClassLoader _cloader;
|
protected ClassLoader _cloader;
|
||||||
|
|
||||||
/** Used to generate source files from templates. */
|
/** Used to generate source files from templates. Don't use this directly from derived classes,
|
||||||
|
* use {@link #mergeTemplate}. */
|
||||||
protected VelocityEngine _velocity;
|
protected VelocityEngine _velocity;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user