public override propertySignature()

in src/languages/java.ts [190:249]


  public override propertySignature(node: ts.PropertySignature, renderer: JavaRenderer): OTree {
    const propertyType = this.renderTypeNode(node.type, renderer, 'Object');
    const propertyName = renderer.convert(node.name);

    const isClass = !renderer.currentContext.insideTypeDeclaration?.isInterface;
    const blockSep = isClass ? ' ' : ';';

    const field = isClass
      ? new OTree([], ['private ', propertyType, ' ', propertyName, ';'], {
          canBreakLine: true,
        })
      : NO_SYNTAX;

    const getter = new OTree(
      [],
      [
        isClass ? 'public ' : NO_SYNTAX,
        propertyType,
        ' ',
        `get${capitalize(renderer.textOf(node.name))}()${blockSep}`,
        isClass ? this.renderBlock([new OTree(['\n'], ['return this.', propertyName, ';'])]) : NO_SYNTAX,
      ],
      {
        canBreakLine: true,
      },
    );

    const hasSetter = isClass || !isReadOnly(node);

    const setter = hasSetter
      ? new OTree(
          [],
          [
            isClass ? 'public ' : NO_SYNTAX,
            renderer.convert(renderer.currentContext.insideTypeDeclaration!.typeName),
            ' ',
            propertyName, // don't prefix the setter with `set` - makes it more aligned with JSII builders
            '(',
            propertyType,
            ' ',
            propertyName,
            `)${blockSep}`,
            isClass
              ? this.renderBlock([
                  new OTree(['\n'], ['this.', propertyName, ' = ', propertyName, ';']),
                  new OTree(['\n'], ['return this;']),
                ])
              : NO_SYNTAX,
          ],
          {
            canBreakLine: true,
          },
        )
      : NO_SYNTAX;

    return new OTree([], [field, getter, setter], {
      canBreakLine: true,
      separator: '\n',
    });
  }