You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2017/08/12 03:55:16 UTC

[2/2] git commit: [flex-falcon] [refs/heads/develop] - control which getter/setters get renamed by GCC by faking a set of externs. AFAICT that is what @export on the Object.defineProperties object did. It didn't actually create an export alias like exp

control which getter/setters get renamed by GCC by faking a set of externs.  AFAICT that is what @export on the Object.defineProperties object did.  It didn't actually create an export alias like exportSymbol per class, it just prevented renaming of the object keys with that 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/207a9587
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/207a9587
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/207a9587

Branch: refs/heads/develop
Commit: 207a95872e4928a5af40209a6f436c51e7c14ace
Parents: 6331b80
Author: Alex Harui <ah...@apache.org>
Authored: Fri Aug 11 20:55:06 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Aug 11 20:55:06 2017 -0700

----------------------------------------------------------------------
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  | 45 ++++++++++++++++++++
 .../mxml/flexjs/MXMLFlexJSPublisher.java        | 36 ++++++++++++++++
 .../internal/projects/FlexJSProject.java        | 12 ++++++
 3 files changed, 93 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/207a9587/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index c79bfea..5d29850 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -43,6 +43,7 @@ import org.apache.flex.compiler.constants.IASKeywordConstants;
 import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.databinding.BindingDatabase;
 import org.apache.flex.compiler.internal.codegen.databinding.BindingInfo;
@@ -753,6 +754,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
             MXMLDescriptorSpecifier root = currentStateOverrides;
             root.isTopNode = true;
     
+            collectExportedNames(root);
+            
 	        writeNewline("/**");
 	        if (emitExports)
 	        	writeNewline(" * @export");
@@ -788,6 +791,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
             MXMLDescriptorSpecifier root = propertiesTree;
             root.isTopNode = true;
             writeNewline(root.output(true));
+            
+            collectExportedNames(root);
     
             write(ASEmitterTokens.SQUARE_CLOSE);
             write(ASEmitterTokens.PAREN_CLOSE);
@@ -1152,6 +1157,15 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         for (BindingInfo bi : bindingInfo)
         {
             String s;
+            IMXMLNode node = bi.node;
+            if (node instanceof IMXMLSingleDataBindingNode)
+            {
+            	IMXMLSingleDataBindingNode sbdn = (IMXMLSingleDataBindingNode)node;
+            	FlexJSProject project = (FlexJSProject)getMXMLWalker().getProject();
+            	IDefinition bdef = sbdn.getExpressionNode().resolve(project);
+            	IDefinition cdef = bdef.getParent();
+            	project.addExportedName(/*cdef.getQualifiedName() + "." + */bdef.getBaseName());            	
+            }
             s = bi.getSourceString();
             if (s == null && bi.isSourceSimplePublicProperty())
                 s = getSourceStringFromGetter(bi.getExpressionNodesForGetter());
@@ -1652,6 +1666,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
             MXMLDescriptorSpecifier root = descriptorTree.get(0);
             root.isTopNode = false;
     
+            collectExportedNames(root);
+            
             indentPush();
             writeNewline("'MXMLDescriptor': {");
             writeNewline("/** @this {" + formatQualifiedName(cname) + "} */");
@@ -1697,6 +1713,35 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
    
     }
 
+    private void collectExportedNames(MXMLDescriptorSpecifier descriptor)
+    {
+        ICompilerProject project = getMXMLWalker().getProject();
+        FlexJSProject flexJSProject = null;
+        if (project instanceof FlexJSProject)
+        {
+            flexJSProject = (FlexJSProject) project;
+            String name = descriptor.name;
+            if (name == null)
+            	name = this.classDefinition.getQualifiedName();
+            for (MXMLDescriptorSpecifier prop : descriptor.propertySpecifiers)
+            {
+            	String propName = prop.name;
+            	flexJSProject.addExportedName(/*name + "." + */propName);
+            	if (prop.propertySpecifiers.size() > 0)
+            	{
+                    collectExportedNames(prop.propertySpecifiers.get(0));            		
+            	}
+            }
+            if (descriptor.childrenSpecifier != null)
+            {
+                for (MXMLDescriptorSpecifier prop : descriptor.childrenSpecifier.propertySpecifiers)
+                {
+                	collectExportedNames(prop);
+                }
+            }
+        }
+    }
+    
     //--------------------------------------------------------------------------    
 
     private HashMap<IMXMLEventSpecifierNode, String> eventHandlerNameMap = new HashMap<IMXMLEventSpecifierNode, String>();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/207a9587/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index c0c382f..a46c9ba 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -266,6 +266,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements IJSPublisher
             compilerWrapper.addJSSourceFile(closureSourceFile);
         }
 
+        writeExportedNames(compilerWrapper);
 
         /////////////////////////////////////////////////////////////////////////////////
         // Add all the externs to the compilation
@@ -766,5 +767,40 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements IJSPublisher
         }
         return true;
     }
+    
+    private void writeExportedNames(JSClosureCompilerWrapper compilerWrapper)
+    {
+    	if (!googConfiguration.getExportPublicSymbols())
+    	{
+    		// if not generating exports for every public symbol
+    		// generate an externs file that blocks renaming
+    		// of properties used by MXML and dataBinding.
+	        Set<String> exportedNames = project.getExportedNames();
+	        if (exportedNames.size() > 0)
+	        {
+	        	StringBuilder sb = new StringBuilder();
+	        	sb.append("/**\n");
+	        	sb.append(" * generated by Apache FlexJS compiler\n");
+	        	sb.append(" * @externs\n");
+	        	sb.append(" */\n");
+	        	for (String name : exportedNames)
+	        	{
+	        		sb.append("\n\n");
+		        	sb.append("/**\n");
+		        	sb.append(" * @export\n");
+		        	sb.append(" */\n");
+		        	sb.append("Object.prototype." + name + ";\n");
+	        	}
+	        	File exportsFile = new File(outputFolder, "dontrename.js");
+	        	try {
+					writeFile(exportsFile, sb.toString(), false);
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+	        	compilerWrapper.addJSExternsFile(exportsFile.getAbsolutePath());
+	        }
+    	}
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/207a9587/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
index 8dc88b0..8c2b232 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
@@ -21,6 +21,7 @@ package org.apache.flex.compiler.internal.projects;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -431,4 +432,15 @@ public class FlexJSProject extends FlexProject
 		return true;
 	}
 
+	private HashSet<String> exportedNames = new HashSet<String>();
+	
+	public void addExportedName(String name)
+	{
+		exportedNames.add(name);
+	}
+	
+	public Set<String> getExportedNames()
+	{
+		return exportedNames;
+	}
 }