/**
* Copyright (c) 2017-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.litho.specmodels.generator;
import com.facebook.litho.specmodels.generator.TypeSpecDataHolder.JavadocSpec;
import com.facebook.litho.specmodels.model.PropJavadocModel;
import com.facebook.litho.specmodels.model.PropModel;
import com.facebook.litho.specmodels.model.SpecModel;
/**
* Class that generates the state methods for a Component.
*/
public class JavadocGenerator {
private JavadocGenerator() {
}
public static TypeSpecDataHolder generate(SpecModel specModel) {
final TypeSpecDataHolder.Builder typeSpecDataHolder = TypeSpecDataHolder.newBuilder();
final String classJavadoc = specModel.getClassJavadoc();
if (classJavadoc != null) {
typeSpecDataHolder
.addJavadoc(new JavadocSpec(classJavadoc))
.addJavadoc(new JavadocSpec("<p>\n"));
}
for (PropModel prop : specModel.getProps()) {
final String propTag = prop.isOptional() ? "@prop-optional" : "@prop-required";
// Adds javadoc with following format:
// @prop-required name type javadoc.
// This can be changed later to use clear demarcation for fields.
// This is a block tag and cannot support inline tags like "{@link something}".
typeSpecDataHolder.addJavadoc(
new JavadocSpec(
"$L $L $L $L\n",
propTag,
prop.getName(),
prop.getType(),
getPropJavadocForProp(specModel, prop)));
}
return typeSpecDataHolder.build();
}
private static String getPropJavadocForProp(SpecModel specModel, PropModel prop) {
for (PropJavadocModel propJavadoc : specModel.getPropJavadocs()) {
if (prop.getName().equals(propJavadoc.propName)) {
return propJavadoc.javadoc;
}
}
return "";
}
}