- Properly parse out ActionScript member variables, and insert them back into the generated code

- Eclipse keeps rejiggering my imports

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6063 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Tom Conkling
2010-05-01 02:35:39 +00:00
parent 98b63122d4
commit f4bc4a2680
@@ -21,18 +21,20 @@
package com.threerings.presents.tools;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.common.collect.Lists;
@@ -40,6 +42,8 @@ import com.samskivert.util.StringUtil;
import com.threerings.util.ActionScript;
import static com.threerings.NaryaLog.log;
/**
* Primitively parses an ActionScriptSource file, allows the addition and replacement of class
* members and handles writing out the file again.
@@ -738,13 +742,28 @@ public class ActionScriptSource
line = slurpUntil(bin, line, ";", false);
}
// String fieldName = m.group(1);
ArrayList<Member> list = publicFields;
boolean isProtected = (line.indexOf("protected ") != -1);
boolean isConst = (line.indexOf("const ") != -1);
list = isProtected ?
(isConst ? protectedConstants : protectedFields) :
(isConst ? publicConstants : publicFields);
// extract the name, replace the declaration
String fieldName = m.group(1);
//log.info("ASFIELD", "name", fieldName);
Member member = getMember(list, fieldName);
if (member == null) {
System.err.println(
"Have ActionScript field with no " +
"Java equivalent: " + fieldName);
member = new Member(fieldName, line.trim());
list.add(member);
}
// TODO: update the comment?
accum.setLength(0);
// TODO: extract the name, replace that declaration
// see if we match a constructor declaration
} else if (line.indexOf("public function " + className) != -1) {
// if this line does not contain a close paren, keep reading until it does
@@ -1037,6 +1056,17 @@ public class ActionScriptSource
return true;
}
public static void main (String[] args)
{
test("public function asdf () :void");
test("public function get asdf () :void");
}
protected static void test (String test)
{
log.info("test", "string", test, "matches", ASFUNCTION.matcher(test).matches());
}
/** Denotes various phases of class file parsing. */
protected static enum Mode { PREAMBLE, IMPORTS, CLASSCOMMENT, CLASSDECL,
CLASSBODY, METHODBODY, POSTCLASS, POSTPKG }