         #vHasAddtionalAbility = hasAdditionalAbility aClass, vName
         # how to judge whether injected??
         $abilities = aClass::$abilities
-        vParentHasAbility = hasAbilityOnParent aClass, vName
+        vInjectedOnParent = isInjectedOnParent aClass, vName
         $abilities = null unless aClass::hasOwnProperty '$abilities'
       # inject the ability:
       if not (vhasCoreMethod or ($abilities and $abilities['$'+vName]))

defineProperty  = require('util-ex/lib/defineProperty')
getNonEnumNames = require('util-ex/lib/get-non-enumerable-names')

hasAbilityOnParent  = require('./has-ability-on-parent')


injectMethodsFromNonEnum = (aTargetClass, aObject, filter)->

          extendFilter aClass, AbilityClass, (k)-> not (k in vExcludes)
          if vAddtionalAbilityInjected
            aClassPrototype = vAddtionalAbilityInjected::
          if !vInjectedOnParent
            vExcludes = injectMethodsFromNonEnum aClassPrototype, AbilityClass::
            extend aClassPrototype, AbilityClass::, (k)-> not (k in vExcludes)
        else
