private static boolean isAbstract(@NotNull PyClass pyClass) {
   final PyType metaClass =
       pyClass.getMetaClassType(
           TypeEvalContext.userInitiated(pyClass.getProject(), pyClass.getContainingFile()));
   if (metaClass instanceof PyClassLikeType
       && PyNames.ABC_META_CLASS.equals(metaClass.getName())) {
     return true;
   }
   if (metaClass == null) {
     final PyExpression metaClassExpr =
         as(pyClass.getMetaClassExpression(), PyReferenceExpression.class);
     if (metaClassExpr != null && PyNames.ABC_META_CLASS.equals(metaClassExpr.getName())) {
       return true;
     }
   }
   for (PyFunction method : pyClass.getMethods(false)) {
     if (PyUtil.isDecoratedAsAbstract(method)) {
       return true;
     }
   }
   return false;
 }
 @NotNull
 @Override
 protected List<PyElement> getMembersCouldBeMoved(@NotNull final PyClass pyClass) {
   return Lists.<PyElement>newArrayList(filterNameless(Arrays.asList(pyClass.getMethods())));
 }
 @Override
 public boolean hasConflict(@NotNull final PyFunction member, @NotNull final PyClass aClass) {
   return NamePredicate.hasElementWithSameName(member, Arrays.asList(aClass.getMethods()));
 }