You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/02/23 02:14:44 UTC
[royale-compiler] branch develop updated: handle static bindings in
removecirculars
This is an automated email from the ASF dual-hosted git repository.
aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
The following commit(s) were added to refs/heads/develop by this push:
new f19695e handle static bindings in removecirculars
f19695e is described below
commit f19695e82189495fd89b798bf5b3cde70f0b4fb7
Author: Alex Harui <ah...@apache.org>
AuthorDate: Thu Feb 22 18:14:35 2018 -0800
handle static bindings in removecirculars
---
.../codegen/mxml/royale/MXMLRoyaleEmitter.java | 34 +++++++++++++++++++++-
.../compiler/internal/graph/GoogDepsWriter.java | 15 +++++++++-
2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
index 6d190e8..4226298 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
@@ -110,6 +110,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
private IClassDefinition classDefinition;
private IClassDefinition documentDefinition;
private ArrayList<String> usedNames = new ArrayList<String>();
+ private ArrayList<String> staticUsedNames = new ArrayList<String>();
private ArrayList<IMXMLMetadataNode> metadataNodes = new ArrayList<IMXMLMetadataNode>();
private int eventCounter;
@@ -119,6 +120,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
private boolean inMXMLContent;
private boolean inStatesOverride;
private boolean makingSimpleArray;
+ private boolean inStaticInitializer;
private StringBuilder subDocuments = new StringBuilder();
private ArrayList<String> subDocumentNames = new ArrayList<String>();
@@ -182,6 +184,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
int endRequires = -1;
boolean sawRequires = false;
boolean stillSearching = true;
+ int provideIndex = -1;
ArrayList<String> namesToAdd = new ArrayList<String>();
ArrayList<String> foundRequires = new ArrayList<String>();
int len = lines.length;
@@ -190,7 +193,14 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
String line = lines[i];
if (stillSearching)
{
- int c = line.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+ int c = line.indexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+ if (c != -1)
+ {
+ // if zero requires are found, require Language after the
+ // call to goog.provide
+ provideIndex = i + 1;
+ }
+ c = line.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
if (c > -1)
{
int c2 = line.indexOf(")");
@@ -400,6 +410,21 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
}
+ if (staticUsedNames.size() > 0)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append(JSGoogEmitterTokens.ROYALE_STATIC_DEPENDENCY_LIST.getToken());
+ boolean firstDependency = true;
+ for (String staticName : staticUsedNames)
+ {
+ if (!firstDependency)
+ sb.append(",");
+ firstDependency = false;
+ sb.append(staticName);
+ }
+ sb.append("*/");
+ finalLines.add(provideIndex, sb.toString());
+ }
return Joiner.on("\n").join(finalLines);
}
@@ -1167,7 +1192,9 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
if (bd.getBindingInfo().isEmpty())
return;
+ inStaticInitializer = true;
outputBindingInfoAsData(cname, bd);
+ inStaticInitializer = false;
}
private void outputBindingInfoAsData(String cname, BindingDatabase bindingDataBase)
@@ -1233,6 +1260,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
write(ASEmitterTokens.SQUARE_OPEN.getToken() + ASEmitterTokens.DOUBLE_QUOTE.getToken() +
bi.classDef.getQualifiedName() + ASEmitterTokens.DOUBLE_QUOTE.getToken());
usedNames.add(bi.classDef.getQualifiedName());
+ staticUsedNames.add(bi.classDef.getQualifiedName());
int n = parts.length;
for (int i = 1; i < n; i++)
{
@@ -2792,6 +2820,10 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
if (subDocumentNames.contains(name))
return documentDefinition.getQualifiedName() + "." + name;
if (NativeUtils.isJSNative(name)) return name;
+ if (inStaticInitializer)
+ if (!staticUsedNames.contains(name) && !NativeUtils.isJSNative(name))
+ staticUsedNames.add(name);
+
if (useName && !usedNames.contains(name) && !isExternal(name))
usedNames.add(name);
return name;
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
index 016077e..b412817 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
@@ -131,10 +131,23 @@ public class GoogDepsWriter {
if (!isGoogClass(gd.className))
{
if (removeCirculars)
+ {
+ ArrayList <String> deps = new ArrayList<String>();
+ if (gd.fileInfo.impls != null)
+ deps.addAll(gd.fileInfo.impls);
+ if (gd.fileInfo.staticDeps != null)
+ {
+ for (String dep : gd.fileInfo.staticDeps)
+ {
+ if (!deps.contains(dep))
+ deps.add(dep);
+ }
+ }
sb.append("goog.addDependency('").append(relativePath(gd.filePath)).append("', ['")
.append(gd.className).append("'], [")
- .append((gd.fileInfo.impls != null) ? getDependencies(gd.fileInfo.impls) : "")
+ .append(getDependencies(deps))
.append("]);\n");
+ }
else
sb.append("goog.addDependency('").append(relativePath(gd.filePath)).append("', ['")
.append(gd.className).append("'], [")
--
To stop receiving notification emails like this one, please contact
aharui@apache.org.