public static void collectPropertyNamesToKeep()

in compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java [41:254]


	public static void collectPropertyNamesToKeep(ICompilationUnit cu, RoyaleJSProject project, Set<String> result)
    {
        if (project.isExternalLinkage(cu))
        {
            return;
        }
        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())
            {
                for(IDefinition def : scope.getAllLocalDefinitions())
                {
                    if(def instanceof IPackageDefinition)
                    {
                        //source files seem to return packages while SWC files
                        //return symbols inside the packages
                        //we want the symbols, so drill down into the package
                        IPackageDefinition packageDef = (IPackageDefinition) def;
                        def = packageDef.getContainedScope().getAllLocalDefinitions().iterator().next();
                    }
                    if (DefinitionUtils.hasExportSuppressed(def)) {
                        continue;
                    }
                    if(scope instanceof IFileScope && def.isPrivate())
                    {
                        //file-private symbols are emitted like static variables
                        result.add(def.getBaseName());
                    }
                    if (def instanceof IVariableDefinition
                            && !(def instanceof IAccessorDefinition))
                    {
                        IVariableDefinition varDef = (IVariableDefinition) def;
                        if (varDef.getVariableClassification().equals(VariableClassification.PACKAGE_MEMBER)) {
                            result.add(def.getBaseName());
                        }
                    }
                    if (def instanceof ITypeDefinition)
                    {
                        if (def.isImplicit() || def.isNative())
                        {
                            continue;
                        }
                        ITypeDefinition typeDef = (ITypeDefinition) def;
                        for (IDefinition localDef : typeDef.getContainedScope().getAllLocalDefinitions())
                        {
                            if (localDef.isImplicit() || localDef.isPrivate())
                            {
                                continue;
                            }
                            if (DefinitionUtils.hasExportSuppressed(localDef)) {
                                continue;
                            }
                            INamespaceReference nsRef = localDef.getNamespaceReference();
                            boolean isCustomNS = !nsRef.isLanguageNamespace();
                            boolean isMethod = localDef instanceof IFunctionDefinition
                                && !(localDef instanceof IAccessorDefinition);
                            boolean isVar = localDef instanceof IVariableDefinition
                                && !(localDef instanceof IAccessorDefinition)
                                && !localDef.isBindable();
                            boolean isAccessor = localDef instanceof IAccessorDefinition
                                || (localDef instanceof IVariableDefinition && localDef.isBindable());
                            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(!preventRenameInternalSymbols)
                                {
                                    continue;
                                }
                                if(localDef.isStatic())
                                {
                                    if(isMethod && !preventRenameInternalStaticMethods)
                                    {
                                        continue;
                                    }
                                    else if(isVar && !preventRenameInternalStaticVariables)
                                    {
                                        continue;
                                    }
                                    else if(isAccessor && !preventRenameInternalStaticAccessors)
                                    {
                                        continue;
                                    }
                                }
                                else // instance
                                {
                                    if(isMethod && !preventRenameInternalInstanceMethods)
                                    {
                                        continue;
                                    }
                                    else if(isVar && !preventRenameInternalInstanceVariables)
                                    {
                                        continue;
                                    }
                                    else if(isAccessor && !preventRenameInternalInstanceAccessors)
                                    {
                                        continue;
                                    }
                                }
                            }
                            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);
                        }
                    }
                }
            }
        }
        catch(InterruptedException e) {}
    }