You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2016/04/13 20:55:56 UTC

[04/51] [partial] git commit: [flex-falcon] [refs/heads/feature/maven-migration-test] - - Check-In of the migrated project to make error analysis easier

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSSharedData.java
----------------------------------------------------------------------
diff --git a/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSSharedData.java b/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSSharedData.java
deleted file mode 100644
index ce10d46..0000000
--- a/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSSharedData.java
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- *
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.flex.compiler.internal.as.codegen;
-
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.flex.abc.semantics.Name;
-import org.apache.flex.abc.semantics.Namespace;
-import org.apache.flex.abc.semantics.Nsset;
-import org.apache.flex.compiler.definitions.IDefinition;
-import org.apache.flex.compiler.definitions.IFunctionDefinition;
-import org.apache.flex.compiler.definitions.IMemberedDefinition;
-import org.apache.flex.compiler.definitions.INamespaceDefinition;
-import org.apache.flex.compiler.definitions.metadata.IMetaTag;
-import org.apache.flex.compiler.internal.driver.IBackend;
-import org.apache.flex.compiler.internal.legacy.MemberedDefinitionUtils;
-import org.apache.flex.compiler.internal.legacy.ASDefinitionFilter;
-import org.apache.flex.compiler.internal.legacy.ASDefinitionFilter.AccessValue;
-import org.apache.flex.compiler.internal.legacy.ASDefinitionFilter.ClassificationValue;
-import org.apache.flex.compiler.internal.legacy.ASDefinitionFilter.SearchScopeValue;
-import org.apache.flex.compiler.internal.workspaces.Workspace;
-import org.apache.flex.compiler.projects.ICompilerProject;
-import org.apache.flex.compiler.units.ICompilationUnit;
-import org.apache.flex.swf.SWFFrame;
-
-import static org.apache.flex.abc.ABCConstants.OP_nop;
-
-/**
- * JSSharedData contains information that is being shared across
- * JSCompilationUnit, JSGenerator, and JSEmitter instances.
- * JSSharedData.COMPILER_VERSION holds FalconJS's version, which uses the Falcon
- * change list number as the major revision number. The minor revision number
- * represents FalconJS's internal version within the Falcon change list number
- * it is based on. This implementation is part of FalconJS. For more details on
- * FalconJS see org.apache.flex.compiler.JSDriver
- */
-public class JSSharedData
-{
-    public static String COMPILER_NAME = "MXMLJSC";
-    public final static String COMPILER_VERSION = "329449.1";
-
-    public final static JSSharedData instance = new JSSharedData();
-    public static IBackend backend = null;
-    public static Workspace workspace = null;
-
-    public final static String JS_FRAMEWORK_NAME = "org.apache.flex.FlexGlobal";
-    public final static String ROOT_NAME = ""; // JS_FRAMEWORK_NAME + ".root.";
-    public static String FRAMEWORK_CLASS = "browser.JQueryFramework";
-    public static String BUILT_IN = "builtin.abc";
-    public static String MAIN = null;
-    public static Boolean NO_EXPORTS = true;
-    public static Boolean OUTPUT_TIMESTAMPS = false;
-    public static Boolean OUTPUT_ISOLATED = true;
-    public static Boolean GENERATE_TEST_CASE = false;
-    public static Boolean WARN_PERFORMANCE_LOSS = false;
-    public static Boolean WARN_RUNTIME_NAME_LOOKUP = false; // JSWarnRuntimeNameLookupProblem
-    public static Boolean WARN_CLASS_INIT = false; // JSWarnClassInitProblem
-    public static Boolean DEBUG = false;
-    public static Boolean OPTIMIZE = false;
-    public static Boolean EXTEND_DOM = true;
-    public static Boolean KEEP_GENERATED_AS = false;
-
-    public static PrintStream STDOUT = System.out;
-    public static PrintStream STDERR = System.err;
-    public static String OUTPUT_FOLDER = ".";
-    public static String OUTPUT_EXTENSION = "js";
-    public static String SDK_PATH = null;
-
-    public static String CLOSURE_compilation_level = "SIMPLE_OPTIMIZATIONS";
-    public static List<String> CLOSURE_externs = null;
-    public static List<String> CLOSURE_js = null;
-    public static String CLOSURE_create_source_map = null;
-    public static String CLOSURE_formatting = null;
-
-    // public final static String FRAMEWORK_CLASS = "browser.ClosureFramework";
-    public final static String m_superCalledMarker = "___SUPER_HAS_BEEN_CALLED___ ";
-    public final static String THIS = "this";
-    public final static String SUPER = "super";
-    public final static String _SUPER = "_super";
-    public final static String THIS_SUPER = THIS + "." + SUPER;
-    public final static String JS_THIS = "this";
-    public final static Boolean m_useClosureLib = false;
-    public final static Boolean m_useSelfParameter = false;
-    public final static int OP_JS = OP_nop;
-    public final static String DEFAULT_PARAM_PREFIX = "_default_";
-    public final static String GETTER_PREFIX = "get_";
-    public final static String SETTER_PREFIX = "set_";
-    public final static String CTOR_NAME = "init";
-    public final static String EXTERN_INTERFACE_NAME = "IExtern";
-    public final static String SYMBOL_INTERFACE_NAME = "ISymbol";
-    public final static String FRAMEWORK_INTERFACE_NAME = "IFramework";
-    public final static String CLASS_NAME = "_CLASS";
-    public final static String SYMBOL_GET_LINKAGE = "getLinkage"; // see browser.ISymbol 
-    public final static String SYMBOL_INIT = "init"; // see browser.ISymbol 
-    public final static String SYMBOL_INSTANCE = "instance"; // see browser.ISymbol 
-    public final static String GENERATE_CLASSINFO = "GenerateClassInfo"; // see browser.ISymbol 
-    public final static String CONVERT_LOCAL_VARS_TO_MEMBERS = "ConvertLocalVarsToMembers";
-    // public final static String JS_STATIC_INITS = JS_FRAMEWORK_NAME + ".m_staticInits";
-    public final static String JS_RUN_STATIC_INITS = JS_FRAMEWORK_NAME + ".runStaticInits";
-    public final static String JS_SYMBOLS = JS_FRAMEWORK_NAME + ".m_symbols";
-    public final static String JS_CLASSES = JS_FRAMEWORK_NAME + ".classes";
-    public final static String JS_TESTCASES = JS_FRAMEWORK_NAME + ".testCases";
-    public final static String JS_INT_CLASS = JS_FRAMEWORK_NAME + ".intClass";
-    public final static String JS_UINT_CLASS = JS_FRAMEWORK_NAME + ".uintClass";
-    public final static String JS_EMPTY_FUNCTION = JS_FRAMEWORK_NAME + ".emptyFunction";
-    public final static String REQUIRED_TAG_MARKER = "__REQUIRED__";
-    public final static String EXTERN_METATAG = "Extern";
-    public final static String DATACLASS_METATAG = "DataClass";
-    public final static String TESTCASE_METATAG = "TestCase";
-    public final static String AS3XML = "browser.AS3XML";
-    public final static String AS3XMLList = "browser.AS3XMLList";
-    public final static String STATIC_INIT = "__static_init";
-
-    public final static byte CONSTANT_Namespace = 1;
-    public final static byte CONSTANT_PackageNs = 2;
-    public final static byte CONSTANT_PackageInternalNs = 3;
-    public final static byte CONSTANT_ProtectedNs = 4;
-    public final static byte CONSTANT_ExplicitNamespace = 5;
-    public final static byte CONSTANT_StaticProtectedNs = 6;
-    public final static byte CONSTANT_PrivateNs = 7;
-    public final static byte CONSTANT_ClassPrivateNS = 8;
-
-    private Set<String> m_packages = new TreeSet<String>();
-    private final ReadWriteLock m_packagesLock = new ReentrantReadWriteLock();
-
-    private Map<Name, Name> m_classes = new HashMap<Name, Name>();
-    private final ReadWriteLock m_classesLock = new ReentrantReadWriteLock();
-
-    private Map<Name, Set<Name>> m_interfaces = new HashMap<Name, Set<Name>>();
-    private final ReadWriteLock m_interfacesLock = new ReentrantReadWriteLock();
-
-    private Map<String, String> m_externs = new HashMap<String, String>();
-    private final ReadWriteLock m_externsLock = new ReentrantReadWriteLock();
-
-    private Map<String, String> m_varTypes = new HashMap<String, String>();
-    private final ReadWriteLock m_varTypesLock = new ReentrantReadWriteLock();
-
-    private Boolean m_verbose = false;
-    private final ReadWriteLock m_verboseLock = new ReentrantReadWriteLock();
-
-    private Object m_codeGenMonitor = new Object();
-    private long m_codeGenCounter = 0;
-    private final ReadWriteLock m_codeGenCounterLock = new ReentrantReadWriteLock();
-
-    private Set<Name> m_emittedClasses = new HashSet<Name>();
-    private final ReadWriteLock m_emittedClassesLock = new ReentrantReadWriteLock();
-
-    private Map<String, INamespaceDefinition> m_uriToNamespace = new HashMap<String, INamespaceDefinition>();
-    private Map<String, INamespaceDefinition> m_qnameToNamespace = new HashMap<String, INamespaceDefinition>();
-    private final ReadWriteLock m_uriToNamespaceLock = new ReentrantReadWriteLock();
-
-    private Map<String, String> m_classToSymbol = new HashMap<String, String>();
-    private final ReadWriteLock m_classToSymbolLock = new ReentrantReadWriteLock();
-
-    // private Map<IDefinition,Set<IDefinition>> m_dependencies = new HashMap<IDefinition,Set<IDefinition>>();
-    // private final ReadWriteLock m_dependenciesLock = new ReentrantReadWriteLock();
-
-    private Map<String, String> m_compilationUnitToJS = new HashMap<String, String>();
-    private final ReadWriteLock m_compilationUnitToJSLock = new ReentrantReadWriteLock();
-
-    private Map<SWFFrame, ICompilationUnit> m_swfFrameToCompilationUnit = new HashMap<SWFFrame, ICompilationUnit>();
-    private final ReadWriteLock m_swfFrameToCompilationUnitLock = new ReentrantReadWriteLock();
-
-    private Set<String> m_referencedDefinitions = new HashSet<String>();
-    private final ReadWriteLock m_referencedDefinitionsLock = new ReentrantReadWriteLock();
-
-    private Map<String, IDefinition> m_definitions = new HashMap<String, IDefinition>();
-    private final ReadWriteLock m_definitionsLock = new ReentrantReadWriteLock();
-
-    private Set<String> m_usedExterns = new HashSet<String>();
-    private final ReadWriteLock m_usedExternsLock = new ReentrantReadWriteLock();
-
-    private Set<String> m_scriptInfos = new HashSet<String>();
-    private final ReadWriteLock m_scriptInfosLock = new ReentrantReadWriteLock();
-
-    private Map<String, Integer> m_propertyNames = new HashMap<String, Integer>();
-    private final ReadWriteLock m_propertyNamesLock = new ReentrantReadWriteLock();
-
-    private Set<String> m_accessedPropertyNames = new HashSet<String>();
-    private final ReadWriteLock m_accessedPropertyNamesLock = new ReentrantReadWriteLock();
-
-    private Set<String> m_classInit = new HashSet<String>();
-    private final ReadWriteLock m_classInitLock = new ReentrantReadWriteLock();
-
-    private Map<String, String> m_pathToUUID = new HashMap<String, String>();
-    private final ReadWriteLock m_pathToUUIDLock = new ReentrantReadWriteLock();
-
-    private Set<String> m_encryptedJS = new HashSet<String>();
-    private final ReadWriteLock m_encryptedJSLock = new ReentrantReadWriteLock();
-
-    private Map<String, Set<String>> m_methods = new HashMap<String, Set<String>>();
-    private final ReadWriteLock m_methodsLock = new ReentrantReadWriteLock();
-
-    public void reset()
-    {
-        m_packages.clear();
-        m_classes.clear();
-        m_interfaces.clear();
-        m_externs.clear();
-        m_varTypes.clear();
-        m_verbose = false;
-        // m_codeGenMonitor
-        m_emittedClasses.clear();
-        m_uriToNamespace.clear();
-        m_qnameToNamespace.clear();
-        m_classToSymbol.clear();
-        // m_dependencies.clear();
-        m_compilationUnitToJS.clear();
-        m_swfFrameToCompilationUnit.clear();
-        m_referencedDefinitions.clear();
-        m_definitions.clear();
-        m_usedExterns.clear();
-        m_scriptInfos.clear();
-        m_propertyNames.clear();
-        m_accessedPropertyNames.clear();
-        m_classInit.clear();
-        // m_pathToUUID.clear();
-        m_encryptedJS.clear();
-        m_methods.clear();
-    }
-
-    /**
-     * @param m_packages the m_packages to set
-     */
-    public void registerPackage(String packageName)
-    {
-        // TODO: generalize, avoid hard-coded "goog"
-        if (packageName != null && !packageName.isEmpty() && !packageName.startsWith("goog"))
-        {
-            m_packagesLock.writeLock().lock();
-            this.m_packages.add(packageName);
-            m_packagesLock.writeLock().unlock();
-        }
-    }
-
-    /**
-     * @return the m_packages
-     */
-    public Boolean hasPackage(String packageName)
-    {
-        m_packagesLock.readLock().lock();
-        final Boolean val = m_packages.contains(packageName);
-        m_packagesLock.readLock().unlock();
-        return val;
-    }
-
-    /**
-     * @return the m_packages
-     */
-    @SuppressWarnings("unchecked")
-    public Set<String> getPackages()
-    {
-        Set<String> packages = null;
-        m_packagesLock.readLock().lock();
-        Object clone = ((TreeSet<String>)m_packages).clone();
-        if (clone != null && clone instanceof Set<?>)
-            packages = (Set<String>)(clone);
-        m_packagesLock.readLock().unlock();
-        return packages;
-    }
-
-    /**
-     * @param m_varTypes the m_varTypes to set
-     */
-    public void registerVarType(String varName, String varType)
-    {
-        m_varTypesLock.writeLock().lock();
-        this.m_varTypes.put(varName, varType);
-        m_varTypesLock.writeLock().unlock();
-    }
-
-    /**
-     * @return the m_varTypes
-     */
-    public String getVarType(String varName)
-    {
-        m_varTypesLock.readLock().lock();
-        final String val = m_varTypes.get(varName);
-        m_varTypesLock.readLock().unlock();
-        return val;
-    }
-
-    public Boolean hasVarName(String varName)
-    {
-        m_varTypesLock.readLock().lock();
-        final Boolean val = m_varTypes.containsKey(varName);
-        m_varTypesLock.readLock().unlock();
-        return val;
-    }
-
-    /**
-     * @param m_classes the m_classes to set
-     */
-    public void registerClass(Name className, Name superName)
-    {
-        m_classesLock.writeLock().lock();
-        this.m_classes.put(className, superName);
-        m_classesLock.writeLock().unlock();
-    }
-
-    /**
-     * @return the m_classes
-     */
-    public Name getSuperClass(Name className)
-    {
-        m_classesLock.readLock().lock();
-        final Name val = m_classes.get(className);
-        m_classesLock.readLock().unlock();
-        return val;
-    }
-
-    public Boolean hasClass(Name className)
-    {
-        m_classesLock.readLock().lock();
-        final Boolean val = m_classes.containsKey(className);
-        m_classesLock.readLock().unlock();
-        return val;
-    }
-
-    public Map<String, String> getClassInfo()
-    {
-        // copying the whole m_classes is the only thing you can do 
-        // if you want to stay thread safe.
-        Map<String, String> info = new HashMap<String, String>();
-
-        m_classesLock.readLock().lock();
-        Iterator<Map.Entry<Name, Name>> it = m_classes.entrySet().iterator();
-        while (it.hasNext())
-        {
-            Map.Entry<Name, Name> pair = it.next();
-            final Name _class = pair.getKey();
-            final Name _super = pair.getValue();
-            if (_super != null)
-                info.put(_class.getBaseName(), _super.getBaseName());
-            else
-                info.put(_class.getBaseName(), "Object");
-        }
-        m_classesLock.readLock().unlock();
-
-        return info;
-    }
-
-    public Set<Name> getClasses()
-    {
-        m_classesLock.readLock().lock();
-
-        Set<Name> info = new HashSet<Name>();
-        info.addAll(m_classes.keySet());
-        m_classesLock.readLock().unlock();
-
-        return info;
-    }
-
-    public void setVerbose(Boolean value)
-    {
-        m_verboseLock.writeLock().lock();
-        this.m_verbose = value;
-        m_verboseLock.writeLock().unlock();
-    }
-
-    public Boolean isVerbose()
-    {
-        m_verboseLock.readLock().lock();
-        final Boolean val = m_verbose;
-        m_verboseLock.readLock().unlock();
-        return val;
-    }
-
-    public void stdout(String s)
-    {
-        if (STDOUT != null)
-        {
-            m_verboseLock.writeLock().lock();
-            STDOUT.println(s);
-            m_verboseLock.writeLock().unlock();
-        }
-    }
-
-    public void stderr(String s)
-    {
-        if (STDERR != null)
-        {
-            m_verboseLock.writeLock().lock();
-            STDERR.println(s);
-            m_verboseLock.writeLock().unlock();
-        }
-    }
-
-    public void verboseMessage(String s)
-    {
-        if (isVerbose() && STDOUT != null)
-        {
-            m_verboseLock.writeLock().lock();
-            STDOUT.println(s);
-            m_verboseLock.writeLock().unlock();
-        }
-    }
-
-    public void beginCodeGen()
-    {
-        m_codeGenCounterLock.writeLock().lock();
-        m_codeGenCounter++;
-        m_codeGenCounterLock.writeLock().unlock();
-    }
-
-    public void endCodeGen()
-    {
-        m_codeGenCounterLock.writeLock().lock();
-        final long currentCounter = --m_codeGenCounter;
-        m_codeGenCounterLock.writeLock().unlock();
-
-        if (currentCounter == 0)
-        {
-            synchronized (m_codeGenMonitor)
-            {
-                m_codeGenMonitor.notifyAll();
-            }
-        }
-    }
-
-    /*
-     * private long getCodeGenCounter() {
-     * m_codeGenCounterLock.readLock().lock(); final long val =
-     * m_codeGenCounter; m_codeGenCounterLock.readLock().unlock(); return val; }
-     * private void waitUntilCodeGenHasFinished() throws InterruptedException {
-     * if( getCodeGenCounter() == 0 ) { synchronized (m_codeGenMonitor) {
-     * m_codeGenMonitor.wait(); } } }
-     */
-
-    public void registerInterface(Name className, Name interfaceName)
-    {
-        m_interfacesLock.writeLock().lock();
-        Set<Name> interfaces = m_interfaces.get(className);
-        if (interfaces == null)
-        {
-            interfaces = new HashSet<Name>();
-            this.m_interfaces.put(className, interfaces);
-        }
-        interfaces.add(interfaceName);
-        m_interfacesLock.writeLock().unlock();
-    }
-
-    @SuppressWarnings("unchecked")
-    public Map<Name, Set<Name>> getAllInterfaces()
-    {
-        // copying the whole m_classes is the only thing you can do 
-        // if you want to stay thread safe.
-        Map<Name, Set<Name>> info = new HashMap<Name, Set<Name>>();
-
-        m_interfacesLock.readLock().lock();
-        Iterator<Map.Entry<Name, Set<Name>>> it = m_interfaces.entrySet().iterator();
-        while (it.hasNext())
-        {
-            Map.Entry<Name, Set<Name>> pair = it.next();
-            final Name _class = pair.getKey();
-            final HashSet<Name> interfaces = (HashSet<Name>)pair.getValue();
-            info.put(_class, (Set<Name>)(interfaces.clone()));
-        }
-        m_interfacesLock.readLock().unlock();
-
-        return info;
-    }
-
-    public void registerExtern(Name name)
-    {
-        final IDefinition def = getDefinition(name);
-        if (def == null)
-            throw backend.createException("registerExtern: can't find definition for " + name.toString());
-        registerExtern(def);
-    }
-
-    public void registerExtern(IDefinition def)
-    {
-        final IMetaTag extern = def.getMetaTagByName(EXTERN_METATAG);
-        if (extern != null)
-        {
-            String externName = extern.getAttributeValue("name");
-            if (externName == null)
-                externName = def.getBaseName();
-
-            m_externsLock.writeLock().lock();
-            m_externs.put(def.getQualifiedName(), externName);
-            m_externsLock.writeLock().unlock();
-        }
-    }
-
-    public Boolean isExtern(String name)
-    {
-        m_externsLock.readLock().lock();
-        final Boolean val = m_externs.containsKey(name);
-        m_externsLock.readLock().unlock();
-        return val;
-    }
-
-    public String getExternName(String name)
-    {
-        m_externsLock.readLock().lock();
-        final String val = m_externs.get(name);
-        m_externsLock.readLock().unlock();
-        return val;
-    }
-
-    public Set<String> getExterns()
-    {
-        final Set<String> externs = new HashSet<String>();
-        m_externsLock.readLock().lock();
-        externs.addAll(m_externs.keySet());
-        m_externsLock.readLock().unlock();
-        return externs;
-    }
-
-    public void registerEmittedClass(Name classOrInterfaceName)
-    {
-        m_emittedClassesLock.writeLock().lock();
-        this.m_emittedClasses.add(classOrInterfaceName);
-        m_emittedClassesLock.writeLock().unlock();
-    }
-
-    public Boolean hasClassBeenEmitted(Name classOrInterfaceName)
-    {
-        m_emittedClassesLock.readLock().lock();
-        final Boolean val = m_emittedClasses.contains(classOrInterfaceName);
-        m_emittedClassesLock.readLock().unlock();
-        return val;
-    }
-
-    public void registerSymbol(String className, String symbolName)
-    {
-        m_classToSymbolLock.writeLock().lock();
-        this.m_classToSymbol.put(className, symbolName);
-        m_classToSymbolLock.writeLock().unlock();
-    }
-
-    public String getSymbol(String className)
-    {
-        m_classToSymbolLock.writeLock().lock();
-        final String symbol = this.m_classToSymbol.get(className);
-        m_classToSymbolLock.writeLock().unlock();
-        return symbol;
-    }
-
-    public Boolean hasSymbols()
-    {
-        m_classToSymbolLock.writeLock().lock();
-        final Boolean hasSymbols = !this.m_classToSymbol.isEmpty();
-        m_classToSymbolLock.writeLock().unlock();
-        return hasSymbols;
-    }
-
-    public List<String> getSymbols()
-    {
-        // copying the whole m_classes is the only thing you can do 
-        // if you want to stay thread safe.
-        List<String> info = new ArrayList<String>();
-        m_classToSymbolLock.readLock().lock();
-        info.addAll(m_classToSymbol.values());
-        m_classToSymbolLock.readLock().unlock();
-
-        return info;
-    }
-
-    public void registerNamespace(String uri, INamespaceDefinition ns)
-    {
-        m_uriToNamespaceLock.writeLock().lock();
-        this.m_uriToNamespace.put(uri, ns);
-        this.m_qnameToNamespace.put(ns.getQualifiedName(), ns);
-        m_uriToNamespaceLock.writeLock().unlock();
-    }
-
-    public Map<String, INamespaceDefinition> getNamespaces()
-    {
-        // Copy the whole m_uriToNamespace for thread-safety
-        Map<String, INamespaceDefinition> namespaces = new HashMap<String, INamespaceDefinition>();
-        m_uriToNamespaceLock.writeLock().lock();
-        namespaces.putAll(m_uriToNamespace);
-        m_uriToNamespaceLock.writeLock().unlock();
-        return namespaces;
-    }
-
-    public INamespaceDefinition getNamespace(String uri)
-    {
-        m_uriToNamespaceLock.writeLock().lock();
-        final INamespaceDefinition ns = this.m_uriToNamespace.get(uri);
-        m_uriToNamespaceLock.writeLock().unlock();
-        return ns;
-    }
-
-    public INamespaceDefinition getNamespaceForQName(String qname)
-    {
-        m_uriToNamespaceLock.writeLock().lock();
-        final INamespaceDefinition ns = this.m_qnameToNamespace.get(qname);
-        m_uriToNamespaceLock.writeLock().unlock();
-        return ns;
-    }
-
-    /*
-     * // returns true if def1 depends on def2 private Boolean dependsOn(
-     * IDefinition def1, IDefinition def2 ) { Set<IDefinition> defs =
-     * m_dependencies.get(def2); if( defs.contains(def1) ) return true; for(
-     * IDefinition next: defs ) { if( dependsOn(def1, next) ) return true; }
-     * return false; } // workaround for Falcon bugs // Falcon's DependencyGraph
-     * does not work correctly for Definitions // implemented by SWCs. // def1
-     * depends on def2 public void addDependency( IDefinition def1, IDefinition
-     * def2 ) { if( def1 != def2 ) { m_dependenciesLock.writeLock().lock();
-     * Set<IDefinition> defs = m_dependencies.get(def1); if( defs == null ) {
-     * defs = new HashSet<IDefinition>(); m_dependencies.put( def1, defs ); }
-     * else { if( !defs.contains(def2) && dependsOn(def2, def1) ) throw new
-     * Error( "addDependency: circular dependencies!" ); } defs.add(def2);
-     * m_dependenciesLock.writeLock().unlock(); } } public Set<IDefinition>
-     * getDependencies( IDefinition def ) {
-     * m_dependenciesLock.writeLock().lock(); final Set<IDefinition> defs =
-     * m_dependencies.get(def); m_dependenciesLock.writeLock().unlock(); return
-     * defs; }
-     */
-
-    public void registerJavaScript(String className, String jsCode)
-    {
-        m_compilationUnitToJSLock.writeLock().lock();
-        m_compilationUnitToJS.put(className, jsCode);
-        m_compilationUnitToJSLock.writeLock().unlock();
-    }
-
-    public void registerJavaScript(Map<String, String> classNameToJS)
-    {
-        m_compilationUnitToJSLock.writeLock().lock();
-        m_compilationUnitToJS.putAll(classNameToJS);
-        m_compilationUnitToJSLock.writeLock().unlock();
-    }
-
-    public Boolean hasJavaScript(String className)
-    {
-        m_compilationUnitToJSLock.writeLock().lock();
-        final Boolean found = m_compilationUnitToJS.containsKey(className);
-        m_compilationUnitToJSLock.writeLock().unlock();
-        return found;
-    }
-
-    public String getJavaScript(String className)
-    {
-        m_compilationUnitToJSLock.writeLock().lock();
-        final String jsCode = m_compilationUnitToJS.get(className);
-        m_compilationUnitToJSLock.writeLock().unlock();
-        return jsCode;
-    }
-
-    public void registerSWFFrame(SWFFrame frame, ICompilationUnit cu)
-    {
-        m_swfFrameToCompilationUnitLock.writeLock().lock();
-        m_swfFrameToCompilationUnit.put(frame, cu);
-        m_swfFrameToCompilationUnitLock.writeLock().unlock();
-    }
-
-    public ICompilationUnit getCompilationUnit(SWFFrame frame)
-    {
-        m_swfFrameToCompilationUnitLock.writeLock().lock();
-        final ICompilationUnit cu = m_swfFrameToCompilationUnit.get(frame);
-        m_swfFrameToCompilationUnitLock.writeLock().unlock();
-        return cu;
-    }
-
-    public void registerReferencedDefinition(String name)
-    {
-        m_referencedDefinitionsLock.writeLock().lock();
-        m_referencedDefinitions.add(name);
-        m_referencedDefinitionsLock.writeLock().unlock();
-    }
-
-    public Boolean isReferencedDefinition(String name)
-    {
-        m_referencedDefinitionsLock.readLock().lock();
-        final Boolean val = m_referencedDefinitions.contains(name);
-        m_referencedDefinitionsLock.readLock().unlock();
-        return val;
-    }
-
-    public void registerDefinition(IDefinition def)
-    {
-        m_definitionsLock.writeLock().lock();
-        final String qName = def.getQualifiedName();
-        this.m_definitions.put(qName, def);
-        m_definitionsLock.writeLock().unlock();
-
-        // register this definition as an extern if necessary.
-        final IMetaTag extern = def.getMetaTagByName(JSSharedData.EXTERN_METATAG);
-        if (extern != null)
-            registerExtern(def);
-    }
-
-    public IDefinition getDefinition(String qualifiedName)
-    {
-        m_definitionsLock.readLock().lock();
-        final IDefinition val = m_definitions.get(qualifiedName);
-        m_definitionsLock.readLock().unlock();
-        return val;
-    }
-
-    public IDefinition getDefinition(Name name)
-    {
-        m_definitionsLock.readLock().lock();
-
-        IDefinition val = null;
-        final String baseName = name.getBaseName();
-        if (baseName != null)
-        {
-            final Nsset nsset = name.getQualifiers();
-            if (nsset != null)
-            {
-                for (Namespace ns : nsset)
-                {
-                    String defName = ns.getName();
-                    if (!defName.isEmpty())
-                        defName += ".";
-                    defName += name.getBaseName();
-                    val = m_definitions.get(defName);
-                    if (val != null)
-                        break;
-                }
-            }
-        }
-
-        if (val == null)
-            val = m_definitions.get(baseName);
-
-        m_definitionsLock.readLock().unlock();
-        return val;
-    }
-
-    public String getQualifiedName(Name name)
-    {
-        final IDefinition def = getDefinition(name);
-        if (def != null)
-            return def.getQualifiedName();
-        return null;
-    }
-
-    public void registerUsedExtern(String name)
-    {
-        m_usedExternsLock.writeLock().lock();
-        m_usedExterns.add(name);
-        m_usedExternsLock.writeLock().unlock();
-    }
-
-    public Boolean isUsedExtern(String name)
-    {
-        m_usedExternsLock.readLock().lock();
-        final Boolean val = m_usedExterns.contains(name);
-        m_usedExternsLock.readLock().unlock();
-        return val;
-    }
-
-    public Set<String> getUsedExterns()
-    {
-        final Set<String> externs = new HashSet<String>();
-        m_scriptInfosLock.readLock().lock();
-        externs.addAll(m_scriptInfos);
-        m_scriptInfosLock.readLock().unlock();
-        return externs;
-    }
-
-    public void registerScriptInfo(String name)
-    {
-        m_scriptInfosLock.writeLock().lock();
-        m_scriptInfos.add(name);
-        m_scriptInfosLock.writeLock().unlock();
-    }
-
-    public Set<String> getScriptInfos()
-    {
-        final Set<String> scriptInfos = new HashSet<String>();
-        m_scriptInfosLock.readLock().lock();
-        scriptInfos.addAll(m_scriptInfos);
-        m_scriptInfosLock.readLock().unlock();
-        return scriptInfos;
-    }
-
-    public void registerPropertyName(String name)
-    {
-        m_propertyNamesLock.writeLock().lock();
-
-        if (m_propertyNames.containsKey(name))
-        {
-            final Integer uses = m_propertyNames.get(name);
-            m_propertyNames.put(name, uses + 1);
-        }
-        else
-        {
-            m_propertyNames.put(name, 1);
-        }
-        m_propertyNamesLock.writeLock().unlock();
-    }
-
-    public Boolean isUniquePropertyName(String name)
-    {
-        Boolean isUnique = true;
-        m_propertyNamesLock.readLock().lock();
-        if (m_propertyNames.containsKey(name))
-        {
-            final Integer uses = m_propertyNames.get(name);
-            if (uses > 1)
-                isUnique = false;
-        }
-        m_propertyNamesLock.readLock().unlock();
-        return isUnique;
-    }
-
-    // called whenever we have to emit adobe.get/set/call property.
-    public void registerAccessedPropertyName(String name)
-    {
-        m_accessedPropertyNamesLock.writeLock().lock();
-        m_accessedPropertyNames.add(name);
-        m_accessedPropertyNamesLock.writeLock().unlock();
-    }
-
-    public Boolean isAccessedPropertyName(String name)
-    {
-        m_accessedPropertyNamesLock.readLock().lock();
-        final Boolean val = m_accessedPropertyNames.contains(name);
-        m_accessedPropertyNamesLock.readLock().unlock();
-        return val;
-    }
-
-    public static Boolean usingAdvancedOptimizations()
-    {
-        return CLOSURE_compilation_level.equals("ADVANCED_OPTIMIZATIONS");
-    }
-
-    // called whenever we have to emit adobe.get/set/call property.
-    public void registerClassInit(String fullClassName)
-    {
-        if (fullClassName != null && !fullClassName.isEmpty())
-        {
-            m_classInitLock.writeLock().lock();
-            m_classInit.add(fullClassName);
-            m_classInitLock.writeLock().unlock();
-        }
-    }
-
-    public Boolean hasClassInit(String fullClassName)
-    {
-        m_classInitLock.readLock().lock();
-        final Boolean val = m_classInit.contains(fullClassName);
-        m_classInitLock.readLock().unlock();
-        return val;
-    }
-
-    public Boolean hasAnyClassInit()
-    {
-        m_classInitLock.readLock().lock();
-        final Boolean val = m_classInit.isEmpty();
-        m_classInitLock.readLock().unlock();
-        return !val;
-    }
-
-    public void registerUUID(String path, String uuid)
-    {
-        m_pathToUUIDLock.writeLock().lock();
-        m_pathToUUID.put(path, uuid);
-        m_pathToUUIDLock.writeLock().unlock();
-    }
-
-    public String getUUID(String path)
-    {
-        m_pathToUUIDLock.readLock().lock();
-        final String val = m_pathToUUID.get(path);
-        m_pathToUUIDLock.readLock().unlock();
-        return val;
-    }
-
-    public void registerEncryptedJS(String name)
-    {
-        m_encryptedJSLock.writeLock().lock();
-        m_encryptedJS.add(name);
-        m_encryptedJSLock.writeLock().unlock();
-    }
-
-    public Boolean hasEncryptedJS(String name)
-    {
-        m_encryptedJSLock.readLock().lock();
-        final Boolean val = m_encryptedJS.contains(name);
-        m_encryptedJSLock.readLock().unlock();
-        return val;
-    }
-
-    public Boolean hasAnyEncryptedJS()
-    {
-        m_encryptedJSLock.readLock().lock();
-        final Boolean val = !m_encryptedJS.isEmpty();
-        m_encryptedJSLock.readLock().unlock();
-        return val;
-    }
-
-    public void registerMethod(String methodName, String className)
-    {
-        m_methodsLock.writeLock().lock();
-        Set<String> classes = m_methods.get(methodName);
-        if (classes == null)
-        {
-            classes = new HashSet<String>();
-            m_methods.put(methodName, classes);
-        }
-        classes.add(className);
-        m_methodsLock.writeLock().unlock();
-    }
-
-    // poor man's type inference.
-    public void registerMethods(ICompilerProject project, IMemberedDefinition memberedDef)
-    {
-        final String className = memberedDef.getQualifiedName();
-        final ASDefinitionFilter memberFilter = new ASDefinitionFilter(
-                ClassificationValue.FUNCTIONS, SearchScopeValue.INHERITED_MEMBERS,
-                AccessValue.ALL, memberedDef);
-
-        for (IDefinition member : MemberedDefinitionUtils.getAllMembers(memberedDef, project, memberFilter))
-        {
-            /*
-             * class method registered as eventListener gets global when class
-             * instance is in an array
-             * http://watsonexp.corp.adobe.com/#bug=3040108 We need register
-             * only methods with unique signatures. In other words overridden
-             * methods must be excluded.
-             */
-            if (member instanceof IFunctionDefinition && !member.isOverride())
-            {
-                final INamespaceDefinition ns = member.resolveNamespace(project);
-                if (ns != null && ns.isPublicOrInternalNamespace())
-                    registerMethod(member.getBaseName(), className);
-            }
-        }
-    }
-
-    // poor man's type inference.
-    public Set<IFunctionDefinition> getMethods(ICompilerProject project, String methodName)
-    {
-        Set<IFunctionDefinition> defs = new HashSet<IFunctionDefinition>();
-        m_methodsLock.readLock().lock();
-        final Set<String> classes = m_methods.get(methodName);
-        if (classes != null)
-        {
-            for (String className : classes)
-            {
-                final IDefinition def = getDefinition(className);
-                if (def != null && def instanceof IMemberedDefinition)
-                {
-                    final ASDefinitionFilter memberFilter = new ASDefinitionFilter(
-                            ClassificationValue.FUNCTIONS, SearchScopeValue.INHERITED_MEMBERS,
-                            AccessValue.ALL, def);
-                    final IMemberedDefinition memberedDef = (IMemberedDefinition)def;
-                    final IDefinition mdef = MemberedDefinitionUtils.getMemberByName(
-                            memberedDef, project, methodName, memberFilter);
-                    if (mdef instanceof IFunctionDefinition)
-                    {
-                        final IFunctionDefinition fdef = (IFunctionDefinition)mdef;
-                        defs.add(fdef);
-                    }
-                }
-            }
-        }
-        m_methodsLock.readLock().unlock();
-        return defs;
-    }
-
-}