You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jo...@apache.org on 2017/03/21 23:11:09 UTC
[32/50] git commit: [flex-falcon] [refs/heads/master] - [BUGFIX] Fix
for FLEX-35273
[BUGFIX] Fix for FLEX-35273
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/c1417e13
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/c1417e13
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/c1417e13
Branch: refs/heads/master
Commit: c1417e134de1fe703dfb88e29369893a3038a7bf
Parents: 9cb1399
Author: greg-dove <gr...@gmail.com>
Authored: Mon Mar 6 21:25:15 2017 +1300
Committer: greg-dove <gr...@gmail.com>
Committed: Mon Mar 6 21:32:40 2017 +1300
----------------------------------------------------------------------
.../tree/mxml/MXMLPropertySpecifierNode.java | 47 ++++++++++++++++++--
...XMLBadChildTagPropertyAssignmentProblem.java | 47 ++++++++++++++++++++
.../MXMLMultipleInitializersProblem.java | 46 +++++++++++++++++++
3 files changed, 136 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1417e13/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
index f4a43f1..5e812d4 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
@@ -47,8 +47,7 @@ import org.apache.flex.compiler.mxml.IMXMLTagData;
import org.apache.flex.compiler.mxml.IMXMLTextData;
import org.apache.flex.compiler.mxml.IMXMLUnitData;
import org.apache.flex.compiler.parsing.MXMLTokenTypes;
-import org.apache.flex.compiler.problems.ICompilerProblem;
-import org.apache.flex.compiler.problems.MXMLUnresolvedTagProblem;
+import org.apache.flex.compiler.problems.*;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IASNode;
import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
@@ -124,6 +123,10 @@ class MXMLPropertySpecifierNode extends MXMLSpecifierNodeBase implements IMXMLPr
* The sole child node, which is the value of the property.
*/
private MXMLInstanceNode instanceNode;
+ /*
+ * Flag to track whether an instance problem has already been logged (multiple children)
+ */
+ private Boolean firstInstanceProblemAdded = false;
@Override
public ASTNodeID getNodeID()
@@ -436,6 +439,8 @@ class MXMLPropertySpecifierNode extends MXMLSpecifierNodeBase implements IMXMLPr
MXMLNodeInfo info)
{
MXMLFileScope fileScope = builder.getFileScope();
+ //use a local variable until we are sure that this is a valid instance node
+ MXMLInstanceNode instanceNode = null;
// Check whether the tag is an <fx:Component> tag.
if (fileScope.isComponentTag(childTag))
@@ -484,11 +489,45 @@ class MXMLPropertySpecifierNode extends MXMLSpecifierNodeBase implements IMXMLPr
}
}
}
- }
- // Report problem for second instance tag or for any other kind of tag.
+ ITypeDefinition assignToType = getPropertyType(builder);
+ // if the assignToType is Array it is special-cased, and handled in initializationComplete method
+ if (assignToType != project.getBuiltinType(IASLanguageConstants.BuiltinType.ARRAY)) {
+ //otherwise if the type of the instance node is incompatible with the type of the property node,
+ //or if there are multiple child tags
+ //that's a problem
+ if (instanceNode!=null && this.instanceNode==null &&
+ !(instanceNode.getClassReference(project).isInstanceOf(assignToType,project) ||
+ assignToType == project.getBuiltinType(IASLanguageConstants.BuiltinType.ANY_TYPE))) {
+ //we have a single value of incompatible type
+ ICompilerProblem problem = new MXMLBadChildTagPropertyAssignmentProblem(childTag,instanceNode.getClassReference(project).getQualifiedName(),propertyTypeName);
+ builder.addProblem(problem);
+ instanceNode=null;
+
+ } else {
+ if (this.instanceNode!=null && instanceNode!=null) {
+ //we have a multiple values when we should only have one
+ if (!firstInstanceProblemAdded) {
+ //if we have multiple children problem scenario, we only encounter that on the 2nd childTag
+ //so start with a MXMLMultipleInitializersProblem instance for the first tag
+ ICompilerProblem problem = new MXMLMultipleInitializersProblem( tag.getFirstChild(false),getPropertyTypeName(builder));
+ builder.addProblem(problem);
+ firstInstanceProblemAdded=true;
+ }
+
+ ICompilerProblem problem = new MXMLMultipleInitializersProblem(childTag,getPropertyTypeName(builder));
+ builder.addProblem(problem);
+ instanceNode=null;
+ }
+ }
+ }
+ }
+ if (instanceNode!=null)
+ this.instanceNode = instanceNode;
}
+
+
/**
* This override is called on each non-whitespace unit of text inside a
* property tag, such as <label>O<!-- comment -->K</label> which must
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1417e13/compiler/src/main/java/org/apache/flex/compiler/problems/MXMLBadChildTagPropertyAssignmentProblem.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/problems/MXMLBadChildTagPropertyAssignmentProblem.java b/compiler/src/main/java/org/apache/flex/compiler/problems/MXMLBadChildTagPropertyAssignmentProblem.java
new file mode 100644
index 0000000..a08ce92
--- /dev/null
+++ b/compiler/src/main/java/org/apache/flex/compiler/problems/MXMLBadChildTagPropertyAssignmentProblem.java
@@ -0,0 +1,47 @@
+/*
+ *
+ * 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.problems;
+
+import org.apache.flex.compiler.mxml.IMXMLTagData;
+
+/**
+ * Problem generated for property value child tag on an property MXML tag.
+ */
+public final class MXMLBadChildTagPropertyAssignmentProblem extends MXMLSemanticProblem
+{
+ public static final String DESCRIPTION =
+ "In initializer for '${element}', type ${type} is not assignable to target type '${assignToType}'.";
+ public static final int errorCode = 1999;
+ public MXMLBadChildTagPropertyAssignmentProblem(IMXMLTagData tag ,String incompatibleType,String expectedType)
+ {
+ super(tag);
+ childTag = tag.getName();
+ childNamespace = tag.getURI() != null ? tag.getURI() : "";
+ element = tag.getParentTag().getName();
+ type=incompatibleType;
+ assignToType = expectedType;
+ }
+
+ public String childTag;
+ public final String childNamespace;
+ public String element;
+ public String assignToType;
+ public String type;
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1417e13/compiler/src/main/java/org/apache/flex/compiler/problems/MXMLMultipleInitializersProblem.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/problems/MXMLMultipleInitializersProblem.java b/compiler/src/main/java/org/apache/flex/compiler/problems/MXMLMultipleInitializersProblem.java
new file mode 100644
index 0000000..55bb226
--- /dev/null
+++ b/compiler/src/main/java/org/apache/flex/compiler/problems/MXMLMultipleInitializersProblem.java
@@ -0,0 +1,46 @@
+/*
+ *
+ * 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.problems;
+
+import org.apache.flex.compiler.mxml.IMXMLTagData;
+
+/**
+ * Problem generated for multiple initializers as child tags on an MXML property tag.
+ */
+public final class MXMLMultipleInitializersProblem extends MXMLSemanticProblem
+{
+ public static final String DESCRIPTION =
+ "In initializer for '${element}' multiple initializer values are not permitted for target type '${targetType}'.";
+
+ public static final int errorCode = 1998;
+ public MXMLMultipleInitializersProblem(IMXMLTagData tag, String targetType)
+ {
+ super(tag);
+ childTag = tag.getShortName();
+ childNamespace = tag.getURI() != null ? tag.getURI() : "";
+ element = tag.getParentTag().getName();
+ this.targetType = targetType;
+ }
+
+ public String childTag;
+ public final String childNamespace;
+ public String element;
+ public String targetType;
+}