Repository: flex-falcon Updated Branches: refs/heads/develop 73fd82c7c -> 09b76c2f6
convert more binding expressions into simple bindings Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/09b76c2f Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/09b76c2f Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/09b76c2f Branch: refs/heads/develop Commit: 09b76c2f6ec052445c217b5324662996c472d34b Parents: 73fd82c Author: Alex Harui <[email protected]> Authored: Sat Oct 8 22:28:02 2016 -0700 Committer: Alex Harui <[email protected]> Committed: Sat Oct 8 22:28:02 2016 -0700 ---------------------------------------------------------------------- .../codegen/databinding/BindingInfo.java | 43 ++++++++++++++++++++ .../databinding/MXMLBindingDirectiveHelper.java | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/09b76c2f/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingInfo.java ---------------------------------------------------------------------- diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingInfo.java b/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingInfo.java index 087c178..04ef899 100644 --- a/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingInfo.java +++ b/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingInfo.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.flex.compiler.common.DependencyType; +import org.apache.flex.compiler.definitions.IAccessorDefinition; import org.apache.flex.compiler.definitions.IConstantDefinition; import org.apache.flex.compiler.definitions.IDefinition; import org.apache.flex.compiler.definitions.IVariableDefinition; @@ -36,10 +37,12 @@ import org.apache.flex.compiler.internal.definitions.ClassDefinition; import org.apache.flex.compiler.internal.definitions.NamespaceDefinition; import org.apache.flex.compiler.internal.scopes.ASScope; import org.apache.flex.compiler.internal.scopes.TypeScope; +import org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode; import org.apache.flex.compiler.internal.tree.as.NodeBase; import org.apache.flex.compiler.projects.ICompilerProject; import org.apache.flex.compiler.tree.as.IASNode; import org.apache.flex.compiler.tree.as.IExpressionNode; +import org.apache.flex.compiler.tree.as.IFunctionCallNode; import org.apache.flex.compiler.tree.as.IIdentifierNode; import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode; import org.apache.flex.compiler.tree.mxml.IMXMLBindingAttributeNode; @@ -478,5 +481,45 @@ public class BindingInfo implements Comparable<BindingInfo> } } } + else if (expressionNodeForGetter instanceof MemberAccessExpressionNode) + { + MemberAccessExpressionNode mae = (MemberAccessExpressionNode)expressionNodeForGetter; + IDefinition def = mae.resolve(project); + if (def.isPublic() && + (def instanceof IAccessorDefinition || + def instanceof IConstantDefinition || + def instanceof IVariableDefinition)) + { + IExpressionNode leftSide = mae.getLeftOperandNode(); + if (leftSide instanceof IIdentifierNode) + { + IDefinition leftDef = leftSide.resolve(project); + if (leftDef.isPublic()) + { + sourceString = leftDef.getBaseName() + "." + def.getBaseName(); + isSimplePublicProperty = true; + } + } + else if (leftSide instanceof IFunctionCallNode) + { + IFunctionCallNode fun = (IFunctionCallNode)leftSide; + IExpressionNode[] args = fun.getArgumentNodes(); + if (args.length == 1) + { + IExpressionNode arg = args[0]; + if (arg instanceof IIdentifierNode) + { + IDefinition argDef = arg.resolve(project); + if (argDef.isPublic()) + { + sourceString = argDef.getBaseName() + "." + def.getBaseName(); + isSimplePublicProperty = true; + } + } + } + } + } + } + } } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/09b76c2f/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java ---------------------------------------------------------------------- diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java b/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java index b023ba3..2551260 100644 --- a/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java +++ b/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/MXMLBindingDirectiveHelper.java @@ -164,7 +164,7 @@ public class MXMLBindingDirectiveHelper } else { - if (host.getProject().isFlex()) + if (host.getProject().resolveQNameToDefinition(host.getProject().getBindingManagerClass()) != null) { makeSpecialMemberVariablesForBinding(); isFlexSDK = true;
