package org.gsonformat.intellij.process; import com.intellij.psi.*; import org.gsonformat.intellij.entity.ClassEntity; import java.util.regex.Pattern; /** * Created by dim on 16/11/7. */ class JackProcessor extends Processor { @Override protected void onStartGenerateClass(PsiElementFactory factory, ClassEntity classEntity, PsiClass parentClass, IProcessor visitor) { super.onStartGenerateClass(factory, classEntity, parentClass, visitor); } @Override public void onStarProcess(ClassEntity classEntity, PsiElementFactory factory, PsiClass cls, IProcessor visitor) { super.onStarProcess(classEntity, factory, cls, visitor); injectAnnotation(factory, cls); } @Override protected void onEndGenerateClass(PsiElementFactory factory, ClassEntity classEntity, PsiClass parentClass, PsiClass generateClass, IProcessor visitor) { super.onEndGenerateClass(factory, classEntity, parentClass, generateClass, visitor); injectAnnotation(factory, generateClass); } private void injectAnnotation(PsiElementFactory factory, PsiClass generateClass) { if (factory == null || generateClass == null) { return; } PsiModifierList modifierList = generateClass.getModifierList(); PsiElement firstChild = modifierList.getFirstChild(); Pattern pattern = Pattern.compile("@.*?JsonIgnoreProperties"); if (firstChild != null && !pattern.matcher(firstChild.getText()).find()) { PsiAnnotation annotationFromText = factory.createAnnotationFromText("@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true)", generateClass); modifierList.addBefore(annotationFromText, firstChild); } } }