You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by er...@apache.org on 2013/11/15 15:56:16 UTC
[2/9] git commit: [flex-asjs] [refs/heads/develop] - Added support
for the lookup of interfaces implemented on super classes
Added support for the lookup of interfaces implemented on super classes
Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/439b9e22
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/439b9e22
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/439b9e22
Branch: refs/heads/develop
Commit: 439b9e228b18031b2446fc54bd1a074f20fa9883
Parents: dec6419
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Fri Nov 15 10:31:31 2013 +0100
Committer: Erik de Bruin <er...@ixsoftware.nl>
Committed: Fri Nov 15 10:31:31 2013 +0100
----------------------------------------------------------------------
.../src/org/apache/flex/utils/Language.js | 41 +++++++++++++++-----
1 file changed, 31 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/439b9e22/frameworks/js/FlexJS/src/org/apache/flex/utils/Language.js
----------------------------------------------------------------------
diff --git a/frameworks/js/FlexJS/src/org/apache/flex/utils/Language.js b/frameworks/js/FlexJS/src/org/apache/flex/utils/Language.js
index e3e1d37..a846467 100644
--- a/frameworks/js/FlexJS/src/org/apache/flex/utils/Language.js
+++ b/frameworks/js/FlexJS/src/org/apache/flex/utils/Language.js
@@ -63,7 +63,15 @@ org.apache.flex.utils.Language._int = function(value) {
* @return {boolean}
*/
org.apache.flex.utils.Language.is = function(leftOperand, rightOperand) {
- var checkInterfaces;
+ var checkInterfaces, superClass;
+
+ // (erikdebruin) we intentionally DON'T do null checks on the
+ // [class].FLEXJS_CLASS_INFO property, as it MUST be
+ // declared for every FLEXJS JS (framework) class
+
+ if (leftOperand && !rightOperand) {
+ return false;
+ }
checkInterfaces = function(left) {
var i, interfaces;
@@ -74,9 +82,7 @@ org.apache.flex.utils.Language.is = function(leftOperand, rightOperand) {
return true;
}
- if (interfaces[i] &&
- interfaces[i].prototype.FLEXJS_CLASS_INFO &&
- interfaces[i].prototype.FLEXJS_CLASS_INFO.interfaces) {
+ if (interfaces[i].prototype.FLEXJS_CLASS_INFO.interfaces) {
return checkInterfaces(new interfaces[i]());
}
}
@@ -84,13 +90,28 @@ org.apache.flex.utils.Language.is = function(leftOperand, rightOperand) {
return false;
};
- if (leftOperand instanceof /** @type {Object} */(rightOperand)) {
- return true;
- } else if (leftOperand.FLEXJS_CLASS_INFO &&
- leftOperand.FLEXJS_CLASS_INFO.interfaces) {
- return checkInterfaces(leftOperand);
- } else if (rightOperand === String && typeof leftOperand === 'string')
+ if ((rightOperand === String && typeof leftOperand === 'string') ||
+ (leftOperand instanceof /** @type {Object} */(rightOperand))) {
return true;
+ }
+
+ if (leftOperand.FLEXJS_CLASS_INFO.interfaces) {
+ if (checkInterfaces(leftOperand)) {
+ return true;
+ }
+ }
+
+ superClass = leftOperand.constructor.superClass_;
+ if (superClass) {
+ while (superClass) {
+ if (superClass.FLEXJS_CLASS_INFO.interfaces) {
+ if (checkInterfaces(superClass)) {
+ return true;
+ }
+ }
+ superClass = superClass.constructor.superClass_;
+ }
+ }
return false;
};