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 808fe2a allow override of the State class
808fe2a is described below
commit 808fe2ab3c28fa414c42ea55c7d388bab1cad6b9
Author: Alex Harui <[email protected]>
AuthorDate: Tue Mar 20 10:03:13 2018 -0700
allow override of the State class
---
.../compiler/internal/projects/RoyaleProject.java | 5 ++++
.../internal/tree/mxml/MXMLInstanceNode.java | 30 +++++++++++++++++++++-
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git
a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleProject.java
b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleProject.java
index a2dff6f..0d73440 100644
---
a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleProject.java
+++
b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleProject.java
@@ -170,6 +170,11 @@ public class RoyaleProject extends ASProject implements
IRoyaleProject, ICompile
private String stateClass;
/**
+ * The resolved stateClass
+ */
+ public ITypeDefinition stateClassType = null;
+
+ /**
* The fully-qualified name of the runtime interface
* for a component with a <code>currentState</code> property.
* Currently this is "mx.core.IStateClient".
diff --git
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLInstanceNode.java
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLInstanceNode.java
index 72f87ce..1405b81 100644
---
a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLInstanceNode.java
+++
b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLInstanceNode.java
@@ -34,7 +34,10 @@ import org.apache.royale.compiler.common.DependencyType;
import org.apache.royale.compiler.constants.IASLanguageConstants;
import org.apache.royale.compiler.definitions.IClassDefinition;
import org.apache.royale.compiler.definitions.IDefinition;
+import org.apache.royale.compiler.definitions.ITypeDefinition;
import org.apache.royale.compiler.definitions.IVariableDefinition;
+import
org.apache.royale.compiler.definitions.references.IResolvedQualifiersReference;
+import org.apache.royale.compiler.definitions.references.ReferenceFactory;
import org.apache.royale.compiler.internal.mxml.MXMLDialect;
import org.apache.royale.compiler.internal.projects.RoyaleProject;
import org.apache.royale.compiler.internal.scopes.ASScope;
@@ -56,6 +59,31 @@ import
org.apache.royale.compiler.tree.mxml.IMXMLInstanceNode;
class MXMLInstanceNode extends MXMLClassReferenceNodeBase implements
IMXMLInstanceNode
{
+ private static boolean isStateClass(String instanceType, RoyaleProject
project)
+ {
+ // we are going to require that all subclasses are also named
State
+ // but just in different packages. That way we don't have to
keep resolving
+ // instanceType
+ if (!instanceType.endsWith(".State"))
+ return false;
+
+ if (instanceType.equals(project.getStateClass()))
+ return true;
+
+ IResolvedQualifiersReference instanceRef =
ReferenceFactory.packageQualifiedReference(
+ project.getWorkspace(), instanceType);
+ ITypeDefinition instanceTypeDef =
(ITypeDefinition)instanceRef.resolve(project);
+
+ if (project.stateClassType == null)
+ {
+ IResolvedQualifiersReference stateRef =
ReferenceFactory.packageQualifiedReference(
+ project.getWorkspace(), project.getStateClass());
+ project.stateClassType =
(ITypeDefinition)stateRef.resolve(project);
+ }
+
+ return (instanceTypeDef.isInstanceOf(project.stateClassType, project));
+ }
+
protected static MXMLInstanceNode createInstanceNode(MXMLTreeBuilder
builder,
String instanceType,
NodeBase parent)
@@ -89,7 +117,7 @@ class MXMLInstanceNode extends MXMLClassReferenceNodeBase
implements IMXMLInstan
else if (instanceType.equals(IASLanguageConstants.Vector_qname))
return new MXMLVectorNode(parent);
- else if (instanceType.equals(builder.getProject().getStateClass()) &&
mxmlDialect != MXMLDialect.MXML_2006)
+ else if (isStateClass(instanceType, builder.getProject()) &&
mxmlDialect != MXMLDialect.MXML_2006)
return new MXMLStateNode(parent);
else if
(instanceType.equals(builder.getProject().getWebServiceQName()))
--
To stop receiving notification emails like this one, please contact
[email protected].