MemberAccessEmitter: improved detection of XMLish expressions to determine if dynamic-access-unknown-members is necessary (references #203)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index 9f1c863..60bbe8c 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -523,9 +523,15 @@
 				IIdentifierNode identifierNode = (IIdentifierNode) node.getRightOperandNode();
 				IDefinition resolvedDefinition = identifierNode.resolve(getProject());
 				if (resolvedDefinition == null) {
+					emitDynamicAccess = true; 
 					IExpressionNode expressionNode = node.getLeftOperandNode();
-					while (true)
+					while (expressionNode != null)
 					{
+						ITypeDefinition expressionType = expressionNode.resolveType(getProject());
+						if (SemanticUtils.isXMLish(expressionType, getProject())) {
+							emitDynamicAccess = false;
+							break;
+						}
 						if (expressionNode instanceof IMemberAccessExpressionNode)
 						{
 							IMemberAccessExpressionNode memberAccess = (IMemberAccessExpressionNode) expressionNode;
@@ -538,13 +544,10 @@
 						}
 						else
 						{
+							expressionNode = null;
 							break;
 						}
 					}
-					ITypeDefinition expressionType = expressionNode.resolveType(getProject());
-					if (!SemanticUtils.isXMLish(expressionType, getProject())) {
-						emitDynamicAccess = true;
-					}
 				}
 			}
 			if (emitDynamicAccess)