export function getConstructorClassMethod(astNode: babel.Class): babel.ClassMethod|undefined { for (const member of astNode.body.body) { if (babel.isClassMethod(member) && member.kind === 'constructor') { return member; } } }
function* _getMethods(node: babel.Node) { if (!babel.isClassDeclaration(node) && !babel.isClassExpression(node)) { return; } for (const statement of node.body.body) { if (babel.isClassMethod(statement) && statement.kind === 'method') { yield statement; } } }
export function extractPropertyFromGetterOrSetter( method: babel.ClassMethod|babel.ObjectMethod, jsdocAnn: jsdoc.Annotation|undefined, document: JavaScriptDocument): ScannedProperty|null { // TODO(43081j): remove this when static properties are supported if (babel.isClassMethod(method) && method.static) { return null; } if (method.kind !== 'get' && method.kind !== 'set') { return null; } // TODO(43081j): use getPropertyName, see // https://github.com/Polymer/polymer-analyzer/pull/867 const name = getPropertyName(method); if (name === undefined) { return null; } let type; let description; let privacy: Privacy = 'public'; let readOnly = false; if (jsdocAnn) { const ret = getReturnFromAnnotation(jsdocAnn); type = ret ? ret.type : undefined; description = jsdoc.getDescription(jsdocAnn); privacy = getOrInferPrivacy(name, jsdocAnn); readOnly = jsdoc.hasTag(jsdocAnn, 'readonly'); } return { name, astNode: {language: 'js', node: method, containingDocument: document}, type, jsdoc: jsdocAnn, sourceRange: document.sourceRangeForNode(method)!, description, privacy, warnings: [], readOnly, }; }
(n) => babel.isClassMethod(n) && n.static === true && n.kind === 'get' && getIdentifierName(n.key) === name) as