private JSDocInfo createUnknownTypeJsDocInfo() { JSDocInfoBuilder castToUnknownBuilder = new JSDocInfoBuilder(true); castToUnknownBuilder.recordType( new JSTypeExpression( JsDocInfoParser.parseTypeString("?"), "<ProcessClosurePrimitives.java>")); return castToUnknownBuilder.build(); }
/** * Important comments begin with /*! They are treated as license blocks, but no further JSDoc * parsing is performed */ void parseImportantComment() { state = State.SEARCHING_ANNOTATION; skipEOLs(); JsDocToken token = next(); ExtractionInfo info = extractMultilineComment(token, WhitespaceOption.PRESERVE, false, true); // An extra space is added by the @license annotation // so we need to add one here so they will be identical String license = " " + info.string; if (fileLevelJsDocBuilder != null) { fileLevelJsDocBuilder.addLicense(license); } else if (jsdocBuilder.shouldParseDocumentation()) { jsdocBuilder.recordBlockDescription(license); } else { jsdocBuilder.recordBlockDescription(""); } }
private void addBehaviorSuppressions(Node behaviorValue) { for (Node keyNode : behaviorValue.children()) { if (keyNode.getFirstChild().isFunction()) { keyNode.removeProp(Node.JSDOC_INFO_PROP); JSDocInfoBuilder suppressDoc = new JSDocInfoBuilder(true); suppressDoc.addSuppression("checkTypes"); suppressDoc.addSuppression("globalThis"); suppressDoc.addSuppression("visibility"); keyNode.setJSDocInfo(suppressDoc.build()); } } suppressDefaultValues(behaviorValue); } }
private JSDocInfo buildEmptyJSDoc() { // TODO(johnlenz): share the JSDocInfo here rather than building // a new one each time. return new JSDocInfoBuilder(false).build(true); }
static JSDocInfo createConstantJsDoc() { JSDocInfoBuilder builder = new JSDocInfoBuilder(false); builder.recordConstancy(); return builder.build(); }
static JSDocInfo markConstant(JSDocInfo oldJSDoc) { JSDocInfoBuilder builder = JSDocInfoBuilder.maybeCopyFrom(oldJSDoc); builder.recordConstancy(); return builder.build(); }
jsdocBuilder.markAnnotation(annotationName, lineno, charno); if (jsdocBuilder.isNgInjectRecorded()) { addParserWarning("msg.jsdoc.nginject.extra"); } else { jsdocBuilder.recordNgInject(true); if (!jsdocBuilder.recordAbstract()) { addTypeWarning("msg.jsdoc.incompat.type"); if (jsdocBuilder.shouldParseDocumentation()) { ExtractionInfo authorInfo = extractSingleLineBlock(); String author = authorInfo.string; addParserWarning("msg.jsdoc.authormissing"); } else { jsdocBuilder.addAuthor(author); if (!jsdocBuilder.recordConsistentIdGenerator()) { addParserWarning("msg.jsdoc.consistidgen"); if (!jsdocBuilder.recordUnrestricted()) { addTypeWarning("msg.jsdoc.incompat.type"); if (!jsdocBuilder.recordStruct()) { addTypeWarning("msg.jsdoc.incompat.type"); if (!jsdocBuilder.recordDict()) { addTypeWarning("msg.jsdoc.incompat.type");
jsdocBuilder.markAnnotation(annotationName, lineno, charno); if (jsdocBuilder.isNgInjectRecorded()) { addParserWarning("msg.jsdoc.nginject.extra"); } else { jsdocBuilder.recordNgInject(true); if (jsdocBuilder.isJaggerInjectRecorded()) { addParserWarning("msg.jsdoc.jaggerInject.extra"); } else { jsdocBuilder.recordJaggerInject(true); if (jsdocBuilder.isJaggerModuleRecorded()) { addParserWarning("msg.jsdoc.jaggerModule.extra"); } else { jsdocBuilder.recordJaggerModule(true); if (jsdocBuilder.isJaggerProvideRecorded()) { addParserWarning("msg.jsdoc.jaggerProvide.extra"); } else { jsdocBuilder.recordJaggerProvide(true); if (jsdocBuilder.isJaggerProvidePromiseRecorded()) { addParserWarning("msg.jsdoc.jaggerProvidePromise.extra"); } else { jsdocBuilder.recordJaggerProvidePromise(true); if (jsdocBuilder.shouldParseDocumentation()) { ExtractionInfo authorInfo = extractSingleLineBlock();
: new JSDocInfoBuilder(true).build(true); : new JSDocInfoBuilder(true).build(true); ? JSDocInfoBuilder.copyFrom(ctorInfo) : new JSDocInfoBuilder(true); ctorInfo.getBlockDescription()); if (!blockDescription.isEmpty()) { mergedInfo.recordBlockDescription(blockDescription); suppressions.addAll(ctorInfo.getSuppressions()); if (!suppressions.isEmpty()) { mergedInfo.recordSuppressions(suppressions); mergedInfo.recordDeprecated(); if (classInfo.getDeprecationReason() != null) { deprecationReason = classInfo.getDeprecationReason(); mergedInfo.recordDeprecationReason(deprecationReason); mergedInfo.recordVisibility(classInfo.getVisibility()); mergedInfo.recordAbstract(); mergedInfo.recordConstancy(); mergedInfo.recordExport();
public MethodReference addMethod(Node node, String functionName, JSDocInfo comment, boolean isStatic) { /* AJH This doesn't make sense to me if (isNamespace) isStatic = false; */ if (comment == null) { DebugLogUtils.err("Method comment null for; " + node.getQualifiedName()); //DebugLogUtils.err(node); JSDocInfoBuilder b = new JSDocInfoBuilder(true); b.recordBlockDescription("Generated doc for missing method JSDoc."); comment = b.build(); } MethodReference method = new MethodReference(getModel(), this, node, functionName, comment, isStatic); if (isStatic) { staticMethods.put(functionName, method); } else if (getQualifiedName().equals("Object") && functionName.equals("toString")) { // skipping Object.prototype.toString() allows toString(opt_radix) for Number, int and uint } else { instanceMethods.put(functionName, method); } return method; }
newNode = IR.assign(getprop, nameNode); builder = new JSDocInfoBuilder(false); if (oldJSDocInfo.isConstructor()) { builder.recordConstructor(); builder.recordInterface(); builder.recordImplicitMatch(); builder.recordEnumParameterType(oldJSDocInfo.getEnumParameterType()); newNode = IR.assign(getprop, IR.name(name)); builder = JSDocInfoBuilder.copyFrom(oldJSDocInfo); builder.recordSuppressions(ImmutableSet.of("const", "duplicate")); JSDocInfo jsDocInfo = builder.build(); newNode.setJSDocInfo(jsDocInfo);
// /** @typedef {foo} */ JSDocInfoBuilder builder = new JSDocInfoBuilder(true); JSTypeExpression typeExpr = new JSTypeExpression( IR.string(exportedName), script.getSourceFileName()); builder.recordTypedef(typeExpr); JSDocInfo info = builder.build(); getProp.setJSDocInfo(info); Node exprResult = IR.exprResult(getProp) .useSourceInfoIfMissingFromForTree(nodeForSourceInfo); if (classes.contains(exportedName)) { JSDocInfoBuilder builder = new JSDocInfoBuilder(true); builder.recordConstancy(); JSDocInfo info = builder.build(); assign.setJSDocInfo(info); ? new JSDocInfoBuilder(false) : JSDocInfoBuilder.copyFrom(script.getJSDocInfo()); if (!jsDocInfo.isPopulatedWithFileOverview()) { jsDocInfo.recordFileOverview(""); jsDocInfo.recordSuppressions(ImmutableSet.of("missingProvide", "missingRequire")); script.setJSDocInfo(jsDocInfo.build());
compiler.report(JSError.make(member, CONFLICTING_GETTER_SETTER_TYPE, memberName)); } else { JSDocInfoBuilder jsDoc = new JSDocInfoBuilder(false); if (member.getJSDocInfo() != null && member.getJSDocInfo().isExport()) { jsDoc.recordExport(); jsDoc.recordVisibility(Visibility.PUBLIC); jsDoc.recordOverride(); } else if (typeExpr == null) { typeExpr = new JSTypeExpression(new Node(Token.QMARK), member.getSourceFileName()); jsDoc.recordType(typeExpr.copy()); jsDoc.recordNoCollapse(); builder.jsDocInfo(jsDoc.build()); membersToDeclare.put(memberName, builder.build());
private JSDocInfo buildNamespaceJSDoc() { JSDocInfoBuilder builder = new JSDocInfoBuilder(false); builder.recordConstancy(); builder.recordSuppressions(ImmutableSet.of("const", "duplicate")); return builder.build(); }
IR.exprResult(IR.assign(NodeUtil.newQName(compiler, qualifiedPath + fnName), fnValue)); exprResult.useSourceInfoIfMissingFromForTree(behaviorFunction.name); JSDocInfoBuilder info = JSDocInfoBuilder.maybeCopyFrom(behaviorFunction.info); info.addSuppression("unusedPrivateMembers"); info.overwriteVisibility(Visibility.PUBLIC); exprResult.getFirstChild().setJSDocInfo(info.build()); block.addChildToBack(exprResult); nameToExprResult.put(fnName, exprResult); JSDocInfoBuilder info = JSDocInfoBuilder.maybeCopyFrom(behaviorProp.info); info = new JSDocInfoBuilder(true); if (behaviorProp.info != null && behaviorProp.info.getReturnType() != null) { info.recordType(behaviorProp.info.getReturnType()); exprResult.getFirstChild().setJSDocInfo(info.build()); block.addChildToBack(exprResult); nameToExprResult.put(propName, exprResult);
private void suppressDefaultValues(Node behaviorValue) { for (MemberDefinition property : PolymerPassStaticUtils.extractProperties( behaviorValue, PolymerClassDefinition.DefinitionType.ObjectLiteral, compiler, /** constructor= */ null)) { if (!property.value.isObjectLit()) { continue; } Node defaultValue = NodeUtil.getFirstPropMatchingKey(property.value, "value"); if (defaultValue == null || !defaultValue.isFunction()) { continue; } Node defaultValueKey = defaultValue.getParent(); JSDocInfoBuilder suppressDoc = JSDocInfoBuilder.maybeCopyFrom(defaultValueKey.getJSDocInfo()); suppressDoc.addSuppression("checkTypes"); suppressDoc.addSuppression("globalThis"); suppressDoc.addSuppression("visibility"); defaultValueKey.setJSDocInfo(suppressDoc.build()); } }
compiler.report(JSError.make(member, CONFLICTING_GETTER_SETTER_TYPE, memberName)); } else { JSDocInfoBuilder jsDoc = new JSDocInfoBuilder(false); jsDoc.recordType(typeExpr); if (member.getJSDocInfo() != null && member.getJSDocInfo().isExport()) { jsDoc.recordExport(); jsDoc.recordNoCollapse(); membersToDeclare.put(memberName, jsDoc.build());
/** * Adds the generated setter for a readonly property. * @see https://www.polymer-project.org/0.8/docs/devguide/properties.html#read-only */ 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()); 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 addInterfaceExterns}. info.recordOverride(); exprResNode.getFirstChild().setJSDocInfo(info.build()); return exprResNode; }
continue; JSDocInfoBuilder info = JSDocInfoBuilder.maybeCopyFrom(staticMember.getJSDocInfo()); Node function = staticMember.getLastChild(); Node sourceInfoNode = function; if (param.getJSDocInfo() != null) { String name = param.getString(); info.recordParameter(name, param.getJSDocInfo().getType()); IR.getprop(subclassNameNode.cloneTree(), IR.string(memberName)), IR.getprop(superclassNameNode.cloneTree(), IR.string(memberName))); info.addSuppression("visibility"); assign.setJSDocInfo(info.build()); Node exprResult = IR.exprResult(assign); exprResult.useSourceInfoIfMissingFromForTree(sourceInfoNode);
JSDocInfoBuilder info = JSDocInfoBuilder.maybeCopyFrom(staticGetProp.getJSDocInfo()); JSTypeExpression unknown = new JSTypeExpression(new Node(Token.QMARK), "<synthetic>"); info.recordType(unknown); // In case there wasn't a type specified on the base class. info.addSuppression("visibility"); getprop.setJSDocInfo(info.build());