private isMemberDefinedOnAncestor()

in packages/jsii-pacmak/lib/targets/dotnet/dotnetgenerator.ts [691:740]


  private isMemberDefinedOnAncestor(
    cls: spec.ClassType,
    member: spec.Property | spec.Method,
  ): boolean {
    if (member as spec.Method) {
      const objectMethods = ['ToString', 'GetHashCode', 'Equals'];
      // Methods defined on the Object class should be overridden, return true;
      if (
        objectMethods.includes(this.nameutils.convertMethodName(member.name))
      ) {
        return true;
      }
    }

    const base = cls.base;
    if (base) {
      const baseType = this.findType(base) as spec.ClassType;

      if (member as spec.Property) {
        if (baseType.properties) {
          if (
            baseType.properties.filter(
              (property) => property.name === member.name,
            ).length > 0
          ) {
            // property found in base parent
            return true;
          }
        }
        return this.isMemberDefinedOnAncestor(baseType, member);
      } else if (member as spec.Method) {
        if (baseType.methods) {
          const myMethod = member as spec.Method;
          // If the name, parameters and returns are similar then it is the same method in .NET
          for (const m of baseType.methods) {
            if (
              m.name === myMethod.name &&
              m.parameters === myMethod.parameters &&
              m.returns === myMethod.returns
            ) {
              return true;
            }
          }
        }
        return this.isMemberDefinedOnAncestor(baseType, member);
      }
      return false;
    }
    return false;
  }