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/03/30 07:08:09 UTC

[royale-compiler] 01/02: try a faster way of figuring out if something is a member of a particular class. fixes #36

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

commit dbbcee56ac0edaf8d077bb06d159c7a9b2ae057d
Author: Alex Harui <ah...@apache.org>
AuthorDate: Thu Mar 29 22:15:52 2018 -0700

    try a faster way of figuring out if something is a member of a particular class.  fixes #36
---
 .../internal/codegen/js/utils/EmitterUtils.java    | 45 ++++------------------
 1 file changed, 7 insertions(+), 38 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
index 2729cab..b80e657 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -414,53 +414,22 @@ public class EmitterUtils
     public static boolean isClassMember(ICompilerProject project,
             IDefinition nodeDef, IClassNode classNode)
     {
-    	if (nodeDef.isInternal() && (!(nodeDef.getParent() instanceof ClassDefinition)))
+        IDefinition parentDef = nodeDef.getParent();
+    	if (nodeDef.isInternal() && (!(parentDef instanceof ClassDefinition)))
     		return false;
     	
-        TypeScope cscope = (TypeScope) classNode.getDefinition()
-                .getContainedScope();
-
-        Set<INamespaceDefinition> nsSet = cscope.getNamespaceSet(project);
-        Collection<IDefinition> defs = new HashSet<IDefinition>();
-
-        cscope.getAllPropertiesForMemberAccess((CompilerProject) project, defs,
-                nsSet);
-
-        Iterator<IDefinition> visiblePropertiesIterator = defs.iterator();
-        while (visiblePropertiesIterator.hasNext())
-        {
-            if (nodeDef.getQualifiedName().equals(
-                    visiblePropertiesIterator.next().getQualifiedName()))
-                return true;
-        }
-
-        return false;
+        IClassDefinition cdef = classNode.getDefinition();
+        return parentDef == cdef || (parentDef instanceof ClassDefinition && cdef.isInstanceOf((ClassDefinition)parentDef, project));
     }
     
     public static boolean isClassMember(ICompilerProject project,
             IDefinition nodeDef, IClassDefinition classDef)
     {
-    	if (nodeDef.isInternal() && (!(nodeDef.getParent() instanceof ClassDefinition)))
+        IDefinition parentDef = nodeDef.getParent();
+    	if (nodeDef.isInternal() && (!(parentDef instanceof ClassDefinition)))
     		return false;
     	
-        TypeScope cscope = (TypeScope) classDef
-                .getContainedScope();
-
-        Set<INamespaceDefinition> nsSet = cscope.getNamespaceSet(project);
-        Collection<IDefinition> defs = new HashSet<IDefinition>();
-
-        cscope.getAllPropertiesForMemberAccess((CompilerProject) project, defs,
-                nsSet);
-
-        Iterator<IDefinition> visiblePropertiesIterator = defs.iterator();
-        while (visiblePropertiesIterator.hasNext())
-        {
-            if (nodeDef.getQualifiedName().equals(
-                    visiblePropertiesIterator.next().getQualifiedName()))
-                return true;
-        }
-
-        return false;
+        return parentDef == classDef || (parentDef instanceof ClassDefinition && ((ClassDefinition)parentDef).isInstanceOf(classDef, project));
     }
     
     public static boolean isScalar(IExpressionNode node)

-- 
To stop receiving notification emails like this one, please contact
aharui@apache.org.