package com.github.setial.intellijjavadocs.generator.impl;
import com.github.setial.intellijjavadocs.model.JavaDoc;
import com.github.setial.intellijjavadocs.model.settings.JavaDocSettings;
import com.github.setial.intellijjavadocs.model.settings.Level;
import com.github.setial.intellijjavadocs.utils.JavaDocUtils;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiEnumConstant;
import com.intellij.psi.PsiField;
import freemarker.template.Template;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
/**
* The type Field java doc generator.
*
* @author Sergey Timofiychuk
*/
public class FieldJavaDocGenerator extends AbstractJavaDocGenerator<PsiField> {
/**
* Instantiates a new Field java doc generator.
*
* @param project the Project
*/
public FieldJavaDocGenerator(@NotNull Project project) {
super(project);
}
@Nullable
@Override
protected JavaDoc generateJavaDoc(@NotNull PsiField element) {
JavaDocSettings configuration = getSettings().getConfiguration();
if (configuration != null && !configuration.getGeneralSettings().getLevels().contains(Level.FIELD) ||
!shouldGenerate(element.getModifierList())) {
return null;
}
Template template = getDocTemplateManager().getFieldTemplate(element);
Map<String, Object> params = getDefaultParameters(element);
PsiClass parent = findClassElement(element);
if (parent != null) {
params.put("typeName", getDocTemplateProcessor().buildDescription(parent.getName(), false));
}
String javaDocText = getDocTemplateProcessor().merge(template, params);
return JavaDocUtils.toJavaDoc(javaDocText, getPsiElementFactory());
}
private PsiClass findClassElement(PsiElement element) {
PsiClass parentClass = null;
if (element != null) {
PsiElement parent = element.getParent();
if (parent != null && parent instanceof PsiClass) {
parentClass = (PsiClass) parent;
} else {
parentClass = findClassElement(parent);
}
}
return parentClass;
}
}