private Node makeReadOnlySetter(String propName, String qualifiedPath) {
    String setterName = "_set" + propName.substring(0, 1).toUpperCase() + propName.substring(1);
    Node fnNode = IR.function(IR.name(""), IR.paramList(IR.name(propName)), IR.block());
    compiler.reportChangeToChangeScope(fnNode);
    Node exprResNode =
        IR.exprResult(IR.assign(NodeUtil.newQName(compiler, qualifiedPath + setterName), fnNode));

    JSDocInfoBuilder info = new JSDocInfoBuilder(true);
    // This is overriding a generated function which was added to the interface in
    // {@code createExportsAndExterns}.
    info.recordOverride();
    exprResNode.getFirstChild().setJSDocInfo(info.build());

    return exprResNode;
  }
private Node makeReadOnlySetter ( String propName , String qualifiedPath ) { String setterName = "_set" + propName . substring ( 0 , 1 ) . toUpperCase ( ) + propName . substring ( 1 ) ; Node fnNode = IR . function ( IR . name ( "" ) , IR . paramList ( IR . name ( propName ) ) , IR . block ( ) ) ; compiler . reportChangeToChangeScope ( fnNode ) ; Node exprResNode = IR . exprResult ( IR . assign ( NodeUtil . newQName ( compiler , qualifiedPath + setterName ) , fnNode ) ) ; JSDocInfoBuilder info = new JSDocInfoBuilder ( true ) ; info . recordOverride ( ) ; exprResNode . getFirstChild ( ) . setJSDocInfo ( info . build ( ) ) ; return exprResNode ; }
Adds the generated setter for a readonly property.

@see https://www.polymer-project.org/0.8/docs/devguide/properties.html#read-only