package pl.mg6.hrisey.intellij.plugin.processor.clazz; import com.intellij.ide.util.PropertiesComponent; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementFactory; import com.intellij.psi.PsiField; import com.intellij.psi.PsiModifier; import com.intellij.psi.PsiType; import de.plushnikov.intellij.plugin.problem.ProblemBuilder; import de.plushnikov.intellij.plugin.processor.clazz.AbstractClassProcessor; import de.plushnikov.intellij.plugin.psi.LombokLightFieldBuilder; import de.plushnikov.intellij.plugin.settings.ProjectSettings; import hrisey.Parcelable; import org.jetbrains.annotations.NotNull; import java.util.List; public class ParcelableFieldsProcessor extends AbstractClassProcessor { public ParcelableFieldsProcessor() { super(PsiField.class, Parcelable.class); } @Override public boolean isEnabled(@NotNull PropertiesComponent propertiesComponent) { return ProjectSettings.isEnabled(propertiesComponent, ProjectSettings.IS_THIRD_PARTY_ENABLED); } @Override protected boolean validate(@NotNull PsiAnnotation psiAnnotation, @NotNull PsiClass psiClass, @NotNull ProblemBuilder builder) { return true; } @Override protected void generatePsiElements(@NotNull PsiClass psiClass, @NotNull PsiAnnotation psiAnnotation, @NotNull List<? super PsiElement> target) { target.add(generateCreator(psiClass, psiAnnotation)); } private PsiElement generateCreator(PsiClass psiClass, PsiAnnotation psiAnnotation) { PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(psiClass.getProject()); PsiType creatorType = elementFactory.createTypeFromText("android.os.Parcelable.Creator<" + psiClass.getName() + ">", psiClass); return new LombokLightFieldBuilder(psiClass.getManager(), "CREATOR", creatorType) .withModifier(PsiModifier.PUBLIC) .withModifier(PsiModifier.STATIC) .withModifier(PsiModifier.FINAL) .withContainingClass(psiClass) .withNavigationElement(psiAnnotation); } }