From 23614ac71f4e13bd3be41a36d0c99734b6a9d77d Mon Sep 17 00:00:00 2001 From: Jamie Doornbos Date: Wed, 6 Jul 2011 17:55:20 +0000 Subject: [PATCH] Consolidate actionscript import munging, add Map conversion. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6674 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../presents/tools/ActionScriptUtils.java | 30 ++++++++ .../presents/tools/GenReceiverTask.java | 2 +- .../presents/tools/GenServiceTask.java | 70 +++---------------- .../presents/tools/InvocationTask.java | 11 ++- 4 files changed, 51 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/threerings/presents/tools/ActionScriptUtils.java b/src/main/java/com/threerings/presents/tools/ActionScriptUtils.java index 8cf75f1b6..c107888fe 100644 --- a/src/main/java/com/threerings/presents/tools/ActionScriptUtils.java +++ b/src/main/java/com/threerings/presents/tools/ActionScriptUtils.java @@ -223,6 +223,36 @@ public class ActionScriptUtils } } + /** + * Converts java types to their actionscript equivalents for ooo-style streaming. + */ + public static void convertBaseClasses (ImportSet imports) + { + // replace primitive types with OOO types (required for unboxing) + imports.replace("byte", "com.threerings.util.Byte"); + imports.replace("int", "com.threerings.util.Integer"); + imports.replace("boolean", "com.threerings.util.langBoolean"); + imports.replace("[B", "flash.utils.ByteArray"); + imports.replace("float", "com.threerings.util.Float"); + imports.replace("long", "com.threerings.util.Long"); + + if (imports.removeAll("[*") > 0) { + imports.add("com.threerings.io.TypedArray"); + } + + // convert java primitive boxes to their ooo counterparts + imports.replace(Integer.class, "com.threerings.util.Integer"); + + // convert some java.util types to their ooo counterparts + imports.replace(Map.class, "com.threerings.util.Map"); + + // get rid of java.lang stuff and any remaining primitives + imports.removeGlobals(); + + // get rid of remaining arrays + imports.removeArrays(); + } + public static File createActionScriptPath (File actionScriptRoot, Class sclass) { // determine the path to the corresponding action script source file diff --git a/src/main/java/com/threerings/presents/tools/GenReceiverTask.java b/src/main/java/com/threerings/presents/tools/GenReceiverTask.java index f369024ea..d31522b9b 100644 --- a/src/main/java/com/threerings/presents/tools/GenReceiverTask.java +++ b/src/main/java/com/threerings/presents/tools/GenReceiverTask.java @@ -81,7 +81,7 @@ public class GenReceiverTask extends InvocationTask !Modifier.isAbstract(m.getModifiers())) { continue; } - methods.add(new ServiceMethod(m, imports)); + methods.add(createAndGatherImports(m, imports)); } methods.sort(); diff --git a/src/main/java/com/threerings/presents/tools/GenServiceTask.java b/src/main/java/com/threerings/presents/tools/GenServiceTask.java index 720414368..5a4568059 100644 --- a/src/main/java/com/threerings/presents/tools/GenServiceTask.java +++ b/src/main/java/com/threerings/presents/tools/GenServiceTask.java @@ -92,7 +92,7 @@ public class GenServiceTask extends InvocationTask System.out.println("Adding " + m + ", imports are " + StringUtil.toString(imports)); } - methods.add(new ServiceMethod(m, imports)); + methods.add(createAndGatherImports(m, imports)); if (_verbose) { System.out.println("Added " + m + ", imports are " + StringUtil.toString(imports)); @@ -302,14 +302,6 @@ public class GenServiceTask extends InvocationTask // replace inner classes with action script equivalents imports.translateInnerClasses(); - // replace primitive types with OOO types (required for unboxing) - imports.replace("byte", "com.threerings.util.Byte"); - imports.replace("int", "com.threerings.util.Integer"); - imports.replace("boolean", "com.threerings.util.langBoolean"); - imports.replace("[B", "flash.utils.ByteArray"); - imports.replace("float", "com.threerings.util.Float"); - imports.replace("[I", "com.threerings.io.TypedArray"); - // ye olde special case - any method that uses a default listener // causes the need for the default listener marshaller imports.duplicateAndMunge("*.InvocationService_InvocationListener", @@ -325,19 +317,8 @@ public class GenServiceTask extends InvocationTask ".client.", ".data."); imports.popIn(); - // convert java primitive types to ooo util types - imports.replace(Integer.class, "com.threerings.util.Integer"); - - // get rid of java.lang stuff and any remaining primitives - imports.removeGlobals(); - - imports.replace("[B", "flash.utils.ByteArray"); - if (imports.removeAll("[*") > 0) { - imports.add("com.threerings.io.TypedArray"); - } - - // get rid of remaining arrays - imports.removeArrays(); + // convert java bases and primitives + ActionScriptUtils.convertBaseClasses(imports); // remove imports in our own package imports.removeSamePackage(mpackage); @@ -371,16 +352,8 @@ public class GenServiceTask extends InvocationTask // replace '$' with '_' for action script naming convention imports.translateInnerClasses(); - // convert primitive java types to ooo util types - imports.replace("long", "com.threerings.util.Long"); - - imports.replace("[B", "flash.utils.ByteArray"); - if (imports.removeAll("[*") > 0) { - imports.add("com.threerings.io.TypedArray"); - } - - // get rid of remaining primitives and java.lang types - imports.removeGlobals(); + // convert java bases and primitives + ActionScriptUtils.convertBaseClasses(imports); // remove imports in our own package imports.removeSamePackage(mpackage); @@ -404,26 +377,12 @@ public class GenServiceTask extends InvocationTask imports.add(Client.class); imports.add(InvocationService.class); - // allow primitive types in service methods - imports.replace("[B", "flash.utils.ByteArray"); - imports.replace("[I", "com.threerings.io.TypedArray"); - - // convert java primitive types to ooo util types - imports.replace("java.lang.Integer", "com.threerings.util.Integer"); - - if (imports.removeAll("[*") > 0) { - imports.add("com.threerings.io.TypedArray"); - } - - // get rid of primitives and java.lang classes - imports.removeGlobals(); - - // get rid of remaining arrays - imports.removeArrays(); - // change imports of Foo$Bar to Foo_Bar imports.translateInnerClasses(); + // convert java bases and primitives + ActionScriptUtils.convertBaseClasses(imports); + // remove imports in our own package imports.removeSamePackage(sdesc.spackage); @@ -454,16 +413,7 @@ public class GenServiceTask extends InvocationTask // change Foo$Bar to Foo_Bar imports.translateInnerClasses(); - imports.replace("[B", "flash.utils.ByteArray"); - if (imports.removeAll("[*") > 0) { - imports.add("com.threerings.io.TypedArray"); - } - - // convert java primitive types to ooo util types - imports.replace("long", "com.threerings.util.Long"); - - // get rid of remaining primitives and java.lang types - imports.removeGlobals(); + ActionScriptUtils.convertBaseClasses(imports); // remove imports in our own package imports.removeSamePackage(sdesc.spackage); @@ -644,7 +594,7 @@ public class GenServiceTask extends InvocationTask System.out.println("Adding " + m + ", imports are " + StringUtil.toString(imports)); } - methods.add(new ServiceMethod(m, imports)); + methods.add(createAndGatherImports(m, imports)); if (_verbose) { System.out.println("Added " + m + ", imports are " + StringUtil.toString(imports)); diff --git a/src/main/java/com/threerings/presents/tools/InvocationTask.java b/src/main/java/com/threerings/presents/tools/InvocationTask.java index aa38b8e92..1c31a00fa 100644 --- a/src/main/java/com/threerings/presents/tools/InvocationTask.java +++ b/src/main/java/com/threerings/presents/tools/InvocationTask.java @@ -87,6 +87,13 @@ public abstract class InvocationTask extends GenTask protected int _index; } + public ServiceMethod createAndGatherImports (Method method, ImportSet set) + { + ServiceMethod sm = new ServiceMethod(method); + sm.gatherImports(set); + return sm; + } + /** Used to keep track of invocation service methods or listener methods. */ public class ServiceMethod implements Comparable { @@ -98,7 +105,7 @@ public abstract class InvocationTask extends GenTask * @param method the method to inspect * @param imports will be filled with the types required by the method */ - public ServiceMethod (Method method, ImportSet imports) { + public ServiceMethod (Method method) { this.method = method; // if this method has listener arguments, we need to add listener argument info for them @@ -113,7 +120,9 @@ public abstract class InvocationTask extends GenTask listenerArgs.add(new ListenerArgument(ii, arg)); } } + } + public void gatherImports (ImportSet imports) { // we need to look through our arguments and note any needed imports in the supplied // table for (Type type : method.getGenericParameterTypes()) {