code: public final ObjectType getTopMostDefiningType(String propertyName) {
      checkState(isConstructor() || isInterface());
      checkArgument(getInstanceType().hasProperty(propertyName));
      FunctionType ctor = this;
  
      if (isInterface()) {
        return getInstanceType().getTopDefiningInterface(propertyName);
      }
  
      ObjectType topInstanceType = null;
      do {
        topInstanceType = ctor.getInstanceType();
        ctor = ctor.getSuperClassConstructor();
      } while (ctor != null && ctor.getPrototype().hasProperty(propertyName));
  
      return topInstanceType;
    }
docs: Given a constructor or an interface type and a property, finds the top-most superclass that has
  the property defined (including this constructor).