You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2020/11/03 22:51:09 UTC

[royale-compiler] branch develop updated: JSGoogConfiguration: optional prevent-rename granular control over more than just namespaces

This is an automated email from the ASF dual-hosted git repository.

joshtynjala 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 df8bd9f  JSGoogConfiguration: optional prevent-rename granular control over more than just namespaces
df8bd9f is described below

commit df8bd9f686f1bbf89539e545377b2797c646172c
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Tue Nov 3 14:50:59 2020 -0800

    JSGoogConfiguration: optional prevent-rename granular control over more than just namespaces
    
    Includes static/instance and method/variable/accessor choices.
    
    Can allow for even greater file size savings in release builds.
---
 .../driver/js/goog/JSGoogConfiguration.java        | 342 +++++++++++++++++++++
 .../apache/royale/compiler/utils/ClosureUtils.java | 167 ++++++++--
 2 files changed, 485 insertions(+), 24 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java
index ff05246..e1cdcbe 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java
@@ -484,6 +484,120 @@ public class JSGoogConfiguration extends JSConfiguration
     }
 
     //
+    // 'prevent-rename-public-instance-methods'
+    //
+
+    private boolean preventRenamePublicInstanceMethods = true;
+
+    public boolean getPreventRenamePublicInstanceMethods()
+    {
+        return preventRenamePublicInstanceMethods;
+    }
+
+    @Config
+    @Mapping("prevent-rename-public-instance-methods")
+    public void setPreventRenamePublicInstanceMethods(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenamePublicInstanceMethods = value;
+    }
+
+    //
+    // 'prevent-rename-public-static-methods'
+    //
+
+    private boolean preventRenamePublicStaticMethods = true;
+
+    public boolean getPreventRenamePublicStaticMethods()
+    {
+        return preventRenamePublicStaticMethods;
+    }
+
+    @Config
+    @Mapping("prevent-rename-public-static-methods")
+    public void setPreventRenamePublicStaticMethods(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenamePublicStaticMethods = value;
+    }
+
+    //
+    // 'prevent-rename-public-instance-variables'
+    //
+
+    private boolean preventRenamePublicInstanceVariables = true;
+
+    public boolean getPreventRenamePublicInstanceVariables()
+    {
+        return preventRenamePublicInstanceVariables;
+    }
+
+    @Config
+    @Mapping("prevent-rename-public-instance-variables")
+    public void setPreventRenamePublicInstanceVariables(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenamePublicInstanceVariables = value;
+    }
+
+    //
+    // 'prevent-rename-public-static-variables'
+    //
+
+    private boolean preventRenamePublicStaticVariables = true;
+
+    public boolean getPreventRenamePublicStaticVariables()
+    {
+        return preventRenamePublicStaticVariables;
+    }
+
+    @Config
+    @Mapping("prevent-rename-public-static-variables")
+    public void setPreventRenamePublicStaticVariables(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenamePublicStaticVariables = value;
+    }
+
+    //
+    // 'prevent-rename-public-instance-accessors'
+    //
+
+    private boolean preventRenamePublicInstanceAccessors = true;
+
+    public boolean getPreventRenamePublicInstanceAccessors()
+    {
+        return preventRenamePublicInstanceAccessors;
+    }
+
+    @Config
+    @Mapping("prevent-rename-public-instance-accessors")
+    public void setPreventRenamePublicInstanceAccessors(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenamePublicInstanceAccessors = value;
+    }
+
+    //
+    // 'prevent-rename-public-static-accessors'
+    //
+
+    private boolean preventRenamePublicStaticAccessors = true;
+
+    public boolean getPreventRenamePublicStaticAccessors()
+    {
+        return preventRenamePublicStaticAccessors;
+    }
+
+    @Config
+    @Mapping("prevent-rename-public-static-accessors")
+    public void setPreventRenamePublicStaticAccessors(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenamePublicStaticAccessors = value;
+    }
+
+    //
     // 'prevent-rename-protected-symbols'
     //
 
@@ -503,6 +617,120 @@ public class JSGoogConfiguration extends JSConfiguration
     }
 
     //
+    // 'prevent-rename-protected-instance-methods'
+    //
+
+    private boolean preventRenameProtectedInstanceMethods = true;
+
+    public boolean getPreventRenameProtectedInstanceMethods()
+    {
+        return preventRenameProtectedInstanceMethods;
+    }
+
+    @Config
+    @Mapping("prevent-rename-protected-instance-methods")
+    public void setPreventRenameProtectedInstanceMethods(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameProtectedInstanceMethods = value;
+    }
+
+    //
+    // 'prevent-rename-protected-static-methods'
+    //
+
+    private boolean preventRenameProtectedStaticMethods = true;
+
+    public boolean getPreventRenameProtectedStaticMethods()
+    {
+        return preventRenameProtectedStaticMethods;
+    }
+
+    @Config
+    @Mapping("prevent-rename-protected-static-methods")
+    public void setPreventRenameProtectedStaticMethods(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameProtectedStaticMethods = value;
+    }
+
+    //
+    // 'prevent-rename-protected-instance-variables'
+    //
+
+    private boolean preventRenameProtectedInstanceVariables = true;
+
+    public boolean getPreventRenameProtectedInstanceVariables()
+    {
+        return preventRenameProtectedInstanceVariables;
+    }
+
+    @Config
+    @Mapping("prevent-rename-protected-instance-variables")
+    public void setPreventRenameProtectedInstanceVariables(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameProtectedInstanceVariables = value;
+    }
+
+    //
+    // 'prevent-rename-protected-static-variables'
+    //
+
+    private boolean preventRenameProtectedStaticVariables = true;
+
+    public boolean getPreventRenameProtectedStaticVariables()
+    {
+        return preventRenameProtectedStaticVariables;
+    }
+
+    @Config
+    @Mapping("prevent-rename-protected-static-variables")
+    public void setPreventRenameProtectedStaticVariables(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameProtectedStaticVariables = value;
+    }
+
+    //
+    // 'prevent-rename-protected-instance-accessors'
+    //
+
+    private boolean preventRenameProtectedInstanceAccessors = true;
+
+    public boolean getPreventRenameProtectedInstanceAccessors()
+    {
+        return preventRenameProtectedInstanceAccessors;
+    }
+
+    @Config
+    @Mapping("prevent-rename-protected-instance-accessors")
+    public void setPreventRenameProtectedInstanceAccessors(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameProtectedInstanceAccessors = value;
+    }
+
+    //
+    // 'prevent-rename-protected-static-accessors'
+    //
+
+    private boolean preventRenameProtectedStaticAccessors = true;
+
+    public boolean getPreventRenameProtectedStaticAccessors()
+    {
+        return preventRenameProtectedStaticAccessors;
+    }
+
+    @Config
+    @Mapping("prevent-rename-protected-static-accessors")
+    public void setPreventRenameProtectedStaticAccessors(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameProtectedStaticAccessors = value;
+    }
+
+    //
     // 'prevent-rename-internal-symbols'
     //
 
@@ -521,6 +749,120 @@ public class JSGoogConfiguration extends JSConfiguration
     	preventRenameInternalSymbols = value;
     }
 
+    //
+    // 'prevent-rename-internal-instance-methods'
+    //
+
+    private boolean preventRenameInternalInstanceMethods = true;
+
+    public boolean getPreventRenameInternalInstanceMethods()
+    {
+        return preventRenameInternalInstanceMethods;
+    }
+
+    @Config
+    @Mapping("prevent-rename-internal-instance-methods")
+    public void setPreventRenameInternalInstanceMethods(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameInternalInstanceMethods = value;
+    }
+
+    //
+    // 'prevent-rename-internal-static-methods'
+    //
+
+    private boolean preventRenameInternalStaticMethods = true;
+
+    public boolean getPreventRenameInternalStaticMethods()
+    {
+        return preventRenameInternalStaticMethods;
+    }
+
+    @Config
+    @Mapping("prevent-rename-internal-static-methods")
+    public void setPreventRenameInternalStaticMethods(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameInternalStaticMethods = value;
+    }
+
+    //
+    // 'prevent-rename-internal-instance-variables'
+    //
+
+    private boolean preventRenameInternalInstanceVariables = true;
+
+    public boolean getPreventRenameInternalInstanceVariables()
+    {
+        return preventRenameInternalInstanceVariables;
+    }
+
+    @Config
+    @Mapping("prevent-rename-internal-instance-variables")
+    public void setPreventRenameInternalInstanceVariables(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameInternalInstanceVariables = value;
+    }
+
+    //
+    // 'prevent-rename-internal-static-variables'
+    //
+
+    private boolean preventRenameInternalStaticVariables = true;
+
+    public boolean getPreventRenameInternalStaticVariables()
+    {
+        return preventRenameInternalStaticVariables;
+    }
+
+    @Config
+    @Mapping("prevent-rename-internal-static-variables")
+    public void setPreventRenameInternalStaticVariables(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameInternalStaticVariables = value;
+    }
+
+    //
+    // 'prevent-rename-internal-instance-accessors'
+    //
+
+    private boolean preventRenameInternalInstanceAccessors = true;
+
+    public boolean getPreventRenameInternalInstanceAccessors()
+    {
+        return preventRenameInternalInstanceAccessors;
+    }
+
+    @Config
+    @Mapping("prevent-rename-internal-instance-accessors")
+    public void setPreventRenameInternalInstanceAccessors(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameInternalInstanceAccessors = value;
+    }
+
+    //
+    // 'prevent-rename-internal-static-accessors'
+    //
+
+    private boolean preventRenameInternalStaticAccessors = true;
+
+    public boolean getPreventRenameInternalStaticAccessors()
+    {
+        return preventRenameInternalStaticAccessors;
+    }
+
+    @Config
+    @Mapping("prevent-rename-internal-static-accessors")
+    public void setPreventRenameInternalStaticAccessors(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+    	preventRenameInternalStaticAccessors = value;
+    }
+
     
     //
     // 'warn-public-vars'
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java b/compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java
index 6a64ac2..1ae51eb 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java
@@ -47,12 +47,29 @@ public class ClosureUtils
         {
             return;
         }
-		boolean preventRenamePublic = project.config != null && project.config.getPreventRenamePublicSymbols();
-        boolean preventRenameProtected = project.config != null && project.config.getPreventRenameProtectedSymbols();
-        boolean preventRenameInternal = project.config != null && project.config.getPreventRenameInternalSymbols();
-        boolean exportPublic = project.config != null && project.config.getExportPublicSymbols();
-        boolean exportProtected = project.config != null && project.config.getExportProtectedSymbols();
-        boolean exportInternal = project.config != null && project.config.getExportInternalSymbols();
+        boolean preventRenamePublicSymbols = project.config != null && project.config.getPreventRenamePublicSymbols();
+        boolean preventRenamePublicInstanceMethods = project.config != null && project.config.getPreventRenamePublicInstanceMethods();
+        boolean preventRenamePublicStaticMethods = project.config != null && project.config.getPreventRenamePublicStaticMethods();
+        boolean preventRenamePublicInstanceVariables = project.config != null && project.config.getPreventRenamePublicInstanceVariables();
+        boolean preventRenamePublicStaticVariables = project.config != null && project.config.getPreventRenamePublicStaticVariables();
+        boolean preventRenamePublicInstanceAccessors = project.config != null && project.config.getPreventRenamePublicInstanceAccessors();
+        boolean preventRenamePublicStaticAccessors = project.config != null && project.config.getPreventRenamePublicStaticAccessors();
+        
+        boolean preventRenameProtectedSymbols = project.config != null && project.config.getPreventRenameProtectedSymbols();
+        boolean preventRenameProtectedInstanceMethods = project.config != null && project.config.getPreventRenameProtectedInstanceMethods();
+        boolean preventRenameProtectedStaticMethods = project.config != null && project.config.getPreventRenameProtectedStaticMethods();
+        boolean preventRenameProtectedInstanceVariables = project.config != null && project.config.getPreventRenameProtectedInstanceVariables();
+        boolean preventRenameProtectedStaticVariables = project.config != null && project.config.getPreventRenameProtectedStaticVariables();
+        boolean preventRenameProtectedInstanceAccessors = project.config != null && project.config.getPreventRenameProtectedInstanceAccessors();
+        boolean preventRenameProtectedStaticAccessors = project.config != null && project.config.getPreventRenameProtectedStaticAccessors();
+
+        boolean preventRenameInternalSymbols = project.config != null && project.config.getPreventRenameInternalSymbols();
+        boolean preventRenameInternalInstanceMethods = project.config != null && project.config.getPreventRenameInternalInstanceMethods();
+        boolean preventRenameInternalStaticMethods =  project.config != null && project.config.getPreventRenameInternalStaticMethods();
+        boolean preventRenameInternalInstanceVariables = project.config != null && project.config.getPreventRenameInternalInstanceVariables();
+        boolean preventRenameInternalStaticVariables = project.config != null && project.config.getPreventRenameInternalStaticVariables();
+        boolean preventRenameInternalInstanceAccessors = project.config != null && project.config.getPreventRenameInternalInstanceAccessors();
+        boolean preventRenameInternalStaticAccessors = project.config != null && project.config.getPreventRenameInternalStaticAccessors();
         try
         {
             for(IASScope scope : cu.getFileScopeRequest().get().getScopes())
@@ -89,38 +106,140 @@ public class ClosureUtils
                         ITypeDefinition typeDef = (ITypeDefinition) def;
                         for (IDefinition localDef : typeDef.getContainedScope().getAllLocalDefinitions())
                         {
-                            if (localDef.isImplicit())
+                            if (localDef.isImplicit() || localDef.isPrivate())
                             {
                                 continue;
                             }
                             INamespaceReference nsRef = localDef.getNamespaceReference();
                             boolean isCustomNS = !nsRef.isLanguageNamespace();
-                            if ((localDef.isPublic() && preventRenamePublic)
-                                    || (isCustomNS && preventRenamePublic)
-                                    || (localDef.isProtected() && preventRenameProtected)
-                                    || (localDef.isInternal() && preventRenameInternal))
+                            boolean isMethod = localDef instanceof IFunctionDefinition
+                                && !(localDef instanceof IAccessorDefinition);
+                            boolean isVar = localDef instanceof IVariableDefinition
+                                && !(localDef instanceof IAccessorDefinition);
+                            boolean isAccessor = localDef instanceof IAccessorDefinition;
+                            if(localDef.isPublic() || isCustomNS)
+                            {
+                                if(!preventRenamePublicSymbols)
+                                {
+                                    continue;
+                                }
+                                if(localDef.isStatic())
+                                {
+                                    if(isMethod && !preventRenamePublicStaticMethods)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isVar && !preventRenamePublicStaticVariables)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isAccessor && !preventRenamePublicStaticAccessors)
+                                    {
+                                        continue;
+                                    }
+                                }
+                                else // instance
+                                {
+                                    if(isMethod && !preventRenamePublicInstanceMethods)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isVar && !preventRenamePublicInstanceVariables)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isAccessor && !preventRenamePublicInstanceAccessors)
+                                    {
+                                        continue;
+                                    }
+                                }
+                            }
+                            else if(localDef.isProtected())
+                            {
+                                if(!preventRenameProtectedSymbols)
+                                {
+                                    continue;
+                                }
+                                if(localDef.isStatic())
+                                {
+                                    if(isMethod && !preventRenameProtectedStaticMethods)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isVar && !preventRenameProtectedStaticVariables)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isAccessor && !preventRenameProtectedStaticAccessors)
+                                    {
+                                        continue;
+                                    }
+                                }
+                                else // instance
+                                {
+                                    if(isMethod && !preventRenameProtectedInstanceMethods)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isVar && !preventRenameProtectedInstanceVariables)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isAccessor && !preventRenameProtectedInstanceAccessors)
+                                    {
+                                        continue;
+                                    }
+                                }
+                            }
+                            else if(localDef.isInternal())
                             {
-                                if (localDef instanceof IAccessorDefinition)
+                                if(!preventRenameInternalSymbols)
+                                {
+                                    continue;
+                                }
+                                if(localDef.isStatic())
                                 {
-                                    if ((localDef.isPublic() && exportPublic)
-                                            || (isCustomNS && exportPublic)
-                                            || (localDef.isProtected() && exportProtected)
-                                            || (localDef.isInternal() && exportInternal))
+                                    if(isMethod && !preventRenameInternalStaticMethods)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isVar && !preventRenameInternalStaticVariables)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isAccessor && !preventRenameInternalStaticAccessors)
                                     {
-                                        //if an accessor is exported, we don't
-                                        //need to prevent renaming
-                                        //(not true for other symbol types)
                                         continue;
                                     }
                                 }
-                                String baseName = localDef.getBaseName();
-                                if (isCustomNS)
+                                else // instance
                                 {
-                                    String uri = nsRef.resolveNamespaceReference(project).getURI();
-                                    baseName = JSRoyaleEmitter.formatNamespacedProperty(uri, baseName, false);
+                                    if(isMethod && !preventRenameInternalInstanceMethods)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isVar && !preventRenameInternalInstanceVariables)
+                                    {
+                                        continue;
+                                    }
+                                    else if(isAccessor && !preventRenameInternalInstanceAccessors)
+                                    {
+                                        continue;
+                                    }
                                 }
-                                result.add(baseName);
                             }
+                            else
+                            {
+                                //skip anything else not covered by the above cases
+                                continue;
+                            }
+                            String baseName = localDef.getBaseName();
+                            if (isCustomNS)
+                            {
+                                String uri = nsRef.resolveNamespaceReference(project).getURI();
+                                baseName = JSRoyaleEmitter.formatNamespacedProperty(uri, baseName, false);
+                            }
+                            result.add(baseName);
                         }
                     }
                 }