@Nullable
  private Property processStubProperties(@Nullable Processor<? super Property> filter) {
    final PyClassStub stub = getStub();
    if (stub != null) {
      for (StubElement<?> subStub : stub.getChildrenStubs()) {
        if (subStub.getStubType() == PyElementTypes.TARGET_EXPRESSION) {
          final PyTargetExpressionStub targetStub = (PyTargetExpressionStub)subStub;
          final PropertyStubStorage prop = targetStub.getCustomStub(PropertyStubStorage.class);
          if (prop != null) {
            final Maybe<PyCallable> getter = fromPacked(prop.getGetter());
            final Maybe<PyCallable> setter = fromPacked(prop.getSetter());
            final Maybe<PyCallable> deleter = fromPacked(prop.getDeleter());
            final String doc = prop.getDoc();
            if (getter != NONE || setter != NONE || deleter != NONE) {
              final PropertyImpl property = new PropertyImpl(targetStub.getName(), getter, setter, deleter, doc, targetStub.getPsi());
              if (filter == null || filter.process(property)) return property;
            }
          }
        }
      }
    }
    return null;
  }
@Nullable
  private Property processStubProperties(@Nullable Processor<? super Property> filter)