compiler.jx: externc now supports a -named-module argument that will output JSModule metadata for classes in the same base package as the module name
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/bfb462c6 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/bfb462c6 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/bfb462c6 Branch: refs/heads/feature/maven-migration-test Commit: bfb462c6d6460d2bbace8032ba5e66867636030b Parents: 021fa66 Author: Josh Tynjala <joshtynj...@apache.org> Authored: Thu Apr 21 13:12:39 2016 -0700 Committer: Josh Tynjala <joshtynj...@apache.org> Committed: Thu Apr 21 13:12:39 2016 -0700 ---------------------------------------------------------------------- .../compiler/clients/ExternCConfiguration.java | 54 ++++++++++++++++++++ .../externals/reference/ClassReference.java | 30 ++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/bfb462c6/compiler.jx/src/org/apache/flex/compiler/clients/ExternCConfiguration.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/ExternCConfiguration.java b/compiler.jx/src/org/apache/flex/compiler/clients/ExternCConfiguration.java index c15786a..c6e7212 100644 --- a/compiler.jx/src/org/apache/flex/compiler/clients/ExternCConfiguration.java +++ b/compiler.jx/src/org/apache/flex/compiler/clients/ExternCConfiguration.java @@ -56,6 +56,8 @@ public class ExternCConfiguration extends Configuration private List<ExternalFile> externals = new ArrayList<ExternalFile>(); private List<ExternalFile> externalExterns = new ArrayList<ExternalFile>(); + private List<String> namedModules = new ArrayList<String>(); + private List<String> classToFunctions = new ArrayList<String>(); private List<ExcludedMember> excludesClass = new ArrayList<ExcludedMember>(); private List<ExcludedMember> excludesField = new ArrayList<ExcludedMember>(); @@ -295,6 +297,58 @@ public class ExternCConfiguration extends Configuration excludesClass.add(new ExcludedMember(className, null, "")); } + @Config(allowMultiple = true) + @Mapping("named-module") + @Arguments("module") + @InfiniteArguments + public void setNamedModules(ConfigurationValue cfgval, List<String> values) + { + for (String moduleName : values) + { + addNamedModule(moduleName); + } + } + public void addNamedModule(String moduleName) + { + namedModules.add(moduleName); + } + + public String isNamedModule(ClassReference classReference) + { + String basePackageName = classReference.getPackageName(); + int packageIndex = basePackageName.indexOf("."); + if (packageIndex != -1) + { + basePackageName = basePackageName.substring(0, packageIndex); + } + for (String module : namedModules) + { + //convert to camel case + String camelCaseModule = module; + int moduleIndex = camelCaseModule.indexOf("-"); + while (moduleIndex != -1 && moduleIndex < camelCaseModule.length() - 1) + { + camelCaseModule = camelCaseModule.substring(0, moduleIndex) + + camelCaseModule.substring(moduleIndex + 1, moduleIndex + 2).toUpperCase() + + camelCaseModule.substring(moduleIndex + 2); + moduleIndex = camelCaseModule.indexOf("-"); + } + if(basePackageName.length() == 0) + { + if (classReference.getBaseName().equals(camelCaseModule)) + { + return module; + } + continue; + } + if(basePackageName.equals(camelCaseModule)) + { + return module; + } + } + return null; + } + public File getJsRoot() { return jsRoot; http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/bfb462c6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java index b04fb0e..fc1df39 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java @@ -41,6 +41,7 @@ public class ClassReference extends BaseReference { private boolean isFinal; private boolean isDynamic; + private String moduleName; private int enumConstantCounter = 0; private Set<String> imports = new HashSet<String>(); @@ -142,6 +143,16 @@ public class ClassReference extends BaseReference this.isFinal = isFinal; } + public String getModuleName() + { + return moduleName; + } + + public void setModuleName(String moduleName) + { + this.moduleName = moduleName; + } + public final boolean isInterface() { return getComment().isInterface(); @@ -294,6 +305,8 @@ public class ClassReference extends BaseReference constructor = new MethodReference(model, this, functionNode, getBaseName(), comment, false); } + moduleName = model.getConfiguration().isNamedModule(this); + } private static List<String> definedPackages = new ArrayList<String>(); @@ -341,6 +354,21 @@ public class ClassReference extends BaseReference emitImports(sb); } + + if (moduleName != null) + { + sb.append("[JSModule"); + if (packageName.length() > 0 || !getBaseName().equals(moduleName)) + { + sb.append("("); + sb.append("name=\""); + sb.append(moduleName); + sb.append("\""); + sb.append(")"); + } + sb.append("]"); + sb.append("\n"); + } emitComment(sb); @@ -730,7 +758,7 @@ public class ClassReference extends BaseReference { if (outputJS) return; - + sb.append("public "); if (isDynamic) {