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 2020/06/10 07:36:49 UTC
[royale-compiler] branch develop updated: suppress Databinding
warning for (as XML) expressions
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
The following commit(s) were added to refs/heads/develop by this push:
new f5c8013 suppress Databinding warning for (as XML) expressions
f5c8013 is described below
commit f5c80139dfc24157be29af9951a339327762c572
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed Jun 10 00:34:38 2020 -0700
suppress Databinding warning for (as XML) expressions
---
.../codegen/databinding/WatcherAnalyzer.java | 51 ++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/codegen/databinding/WatcherAnalyzer.java b/compiler/src/main/java/org/apache/royale/compiler/internal/codegen/databinding/WatcherAnalyzer.java
index 7f9289e..50ade92 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/codegen/databinding/WatcherAnalyzer.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/codegen/databinding/WatcherAnalyzer.java
@@ -24,6 +24,7 @@ import java.util.Collections;
import java.util.List;
import org.apache.royale.compiler.constants.IASKeywordConstants;
+import org.apache.royale.compiler.constants.IASLanguageConstants;
import org.apache.royale.compiler.definitions.IClassDefinition;
import org.apache.royale.compiler.definitions.IConstantDefinition;
import org.apache.royale.compiler.definitions.IDefinition;
@@ -34,6 +35,8 @@ import org.apache.royale.compiler.definitions.IVariableDefinition;
import org.apache.royale.compiler.internal.codegen.databinding.WatcherInfoBase.WatcherType;
import org.apache.royale.compiler.internal.projects.RoyaleProject;
import org.apache.royale.compiler.internal.tree.as.FunctionCallNode;
+import org.apache.royale.compiler.internal.tree.as.IdentifierNode;
+import org.apache.royale.compiler.internal.tree.as.MemberAccessExpressionNode;
import org.apache.royale.compiler.problems.ICompilerProblem;
import org.apache.royale.compiler.problems.MXMLDatabindingSourceNotBindableProblem;
import org.apache.royale.compiler.projects.ICompilerProject;
@@ -271,6 +274,52 @@ public class WatcherAnalyzer
}
}
+ private boolean isLeftXML(MemberAccessExpressionNode maen)
+ {
+ IDefinition xmlDef = project.getBuiltinType(IASLanguageConstants.BuiltinType.XML);
+ if (maen.getLeftOperandNode().getNodeID() == ASTNodeID.Op_AsID)
+ {
+ if (maen.getLeftOperandNode().getChild(1).getNodeID() == ASTNodeID.IdentifierID)
+ {
+ IdentifierNode child = (IdentifierNode)maen.getLeftOperandNode().getChild(1);
+ IDefinition def = child.resolve(project);
+ if (def == xmlDef)
+ return true;
+ ITypeDefinition type = child.resolveType(project);
+ if (type != null && type.isInstanceOf("XML", project))
+ return true;
+ }
+ }
+ else if (maen.getLeftOperandNode().getNodeID() == ASTNodeID.MemberAccessExpressionID)
+ {
+ maen = (MemberAccessExpressionNode)maen.getLeftOperandNode();
+ if (isLeftXML(maen))
+ return true;
+ }
+ return false;
+ }
+
+ private boolean nodeIsXML(IASNode node)
+ {
+ IDefinition xmlDef = project.getBuiltinType(IASLanguageConstants.BuiltinType.XML);
+ IASNode parent = node.getParent();
+ while (parent != null && (parent.getNodeID() == ASTNodeID.MemberAccessExpressionID))
+ {
+ MemberAccessExpressionNode maen = ((MemberAccessExpressionNode)parent);
+ IDefinition def = maen.resolve(project);
+ if (def == xmlDef)
+ return true;
+ ITypeDefinition type = maen.resolveType(project);
+ if (type != null && type.isInstanceOf("XML", project))
+ return true;
+ if (def != null)
+ break;
+ if (isLeftXML(maen))
+ return true;
+ parent = parent.getParent();
+ }
+ return false;
+ }
private void analyzeIdentifierNode(IIdentifierNode node, AnalysisState state)
{
@@ -288,6 +337,8 @@ public class WatcherAnalyzer
// may very well be a dynamic property with no definition,
// so will will continue on (with the knowledge that we have no
// IDefinition
+ if (nodeIsXML(node))
+ return;
this.problems.add(new MXMLDatabindingSourceNotBindableProblem(node, node.getName()));
return;
}