/** * Processes property name assignments in an object pattern. * * <p>Covers these cases. * * <pre><code> * let {name} = someObject; * let {key: name} = someObject; * let {key: name = something} = someObject; * </code></pre> */ private Node processObjectPatternPropertyNameAssignment( PropertyNameAssignmentTree propertyNameAssignment) { Node key = processObjectLitKeyAsString(propertyNameAssignment.name); key.setToken(Token.STRING_KEY); ParseTree targetTree = propertyNameAssignment.value; final Node valueNode; if (targetTree == null) { // `let { /** inlineType */ key } = something;` // The key is also the target name. valueNode = processNameWithInlineJSDoc(propertyNameAssignment.name.asIdentifier()); key.setShorthandProperty(true); } else { valueNode = processDestructuringElementTarget(targetTree); } key.addChildToFront(valueNode); return key; }
Node processSetAccessor(SetAccessorTree tree) { Node key = processObjectLitKeyAsString(tree.propertyName); key.setType(Token.SETTER_DEF); Node body = transform(tree.body); Node dummyName = IR.name(""); setSourceInfo(dummyName, tree.propertyName); Node paramList = IR.paramList( safeProcessName(tree.parameter)); setSourceInfo(paramList, tree.parameter); maybeProcessType(paramList.getFirstChild(), tree.type); Node value = newNode(Token.FUNCTION, dummyName, paramList, body); setSourceInfo(value, tree.body); key.addChildToFront(value); key.setStaticMember(tree.isStatic); return key; }
Node processGetAccessor(GetAccessorTree tree) { Node key = processObjectLitKeyAsString(tree.propertyName); key.setType(Token.GETTER_DEF); Node body = transform(tree.body); Node dummyName = IR.name(""); setSourceInfo(dummyName, tree.body); Node paramList = IR.paramList(); setSourceInfo(paramList, tree.body); Node value = newNode(Token.FUNCTION, dummyName, paramList, body); setSourceInfo(value, tree.body); key.addChildToFront(value); maybeProcessType(value, tree.returnType); key.setStaticMember(tree.isStatic); return key; }
Node processGetAccessor(GetAccessorTree tree) { Node key = processObjectLitKeyAsString(tree.propertyName); key.setToken(Token.GETTER_DEF); Node body = transform(tree.body); Node dummyName = newStringNode(Token.NAME, ""); setSourceInfo(dummyName, tree.body); Node paramList = newNode(Token.PARAM_LIST); setSourceInfo(paramList, tree.body); Node value = newNode(Token.FUNCTION, dummyName, paramList, body); setSourceInfo(value, tree.body); key.addChildToFront(value); maybeProcessType(value, tree.returnType); key.setStaticMember(tree.isStatic); return key; }
Node processSetAccessor(SetAccessorTree tree) { Node key = processObjectLitKeyAsString(tree.propertyName); key.setToken(Token.SETTER_DEF); Node paramList = processFormalParameterList(tree.parameter); setSourceInfo(paramList, tree.parameter); Node body = transform(tree.body); Node dummyName = newStringNode(Token.NAME, ""); setSourceInfo(dummyName, tree.propertyName); Node value = newNode(Token.FUNCTION, dummyName, paramList, body); setSourceInfo(value, tree.body); key.addChildToFront(value); key.setStaticMember(tree.isStatic); return key; }
Node processPropertyGet(MemberExpressionTree getNode) { Node leftChild = transform(getNode.operand); IdentifierToken nodeProp = getNode.memberName; Node rightChild = processObjectLitKeyAsString(nodeProp); if (!rightChild.isQuotedString() && !currentFileIsExterns) { maybeWarnKeywordProperty(rightChild); } return newNode(Token.GETPROP, leftChild, rightChild); }
Node processPropertyNameAssignment(PropertyNameAssignmentTree tree) { Node key = processObjectLitKeyAsString(tree.name); key.setToken(Token.STRING_KEY); if (tree.value != null) { key.addChildToFront(transform(tree.value)); } else { Node value = key.cloneNode(); key.setShorthandProperty(true); value.setToken(Token.NAME); key.addChildToFront(value); } return key; }
Node processPropertyGet(MemberExpressionTree getNode) { Node leftChild = transform(getNode.operand); IdentifierToken nodeProp = getNode.memberName; Node rightChild = processObjectLitKeyAsString(nodeProp); if (!rightChild.isQuotedString() && !currentFileIsExterns) { maybeWarnKeywordProperty(rightChild); } return newNode(Token.GETPROP, leftChild, rightChild); }
Node processPropertyNameAssignment(PropertyNameAssignmentTree tree) { // TODO(tbreisacher): Allow inline JSDoc here (but then forbid it in CheckJSDoc) // so that it's clear we don't support annotations like // function f({x: /** string */ y}) {} Node key = processObjectLitKeyAsString(tree.name); key.setType(Token.STRING_KEY); if (tree.value != null) { key.addChildToFront(transform(tree.value)); } return key; }