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;
 };