         #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]))

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

          extendFilter aClass, AbilityClass, vFilter
          if vAddtionalAbilityInjected
            aClassPrototype = vAddtionalAbilityInjected::
          if !vInjectedOnParent
            extendFilter aClassPrototype, AbilityClass::, vFilter
          filterMethods aOptions.methods
          filterMethods aOptions.classMethods
        if aOptions?
          if !vInjectedOnParent and aOptions.methods instanceof Object
            injectMethods(aClassPrototype, aOptions.methods, aOptions)
          if aOptions.classMethods instanceof Object
            injectMethods(aClass, aOptions.classMethods, aOptions)
