
com.develhack.lombok.javac.handlers.feature.InitializeFieldsByConstructorHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of develhacked-lombok Show documentation
Show all versions of develhacked-lombok Show documentation
The library enhancing Java classes at compilation by annotations that contained in the Develhack Core Library.
The newest version!
package com.develhack.lombok.javac.handlers.feature;
import lombok.core.AST.Kind;
import lombok.core.AnnotationValues;
import lombok.core.AnnotationValues.AnnotationValueDecodeFail;
import lombok.core.HandlerPriority;
import lombok.javac.JavacAnnotationHandler;
import lombok.javac.JavacNode;
import org.mangosdk.spi.ProviderFor;
import com.develhack.Conditions;
import com.develhack.annotation.feature.Access;
import com.develhack.annotation.feature.InitializeFieldsByConstructor;
import com.develhack.lombok.eclipse.handlers.feature.StringableHandler;
import com.sun.tools.javac.code.Flags;
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.util.List;
@ProviderFor(JavacAnnotationHandler.class)
@HandlerPriority(InitializeFieldsByConstructorHandler.PRIORITY)
public class InitializeFieldsByConstructorHandler extends AbstractFeatureHandler {
public static final int PRIORITY = StringableHandler.PRIORITY + 1;
public InitializeFieldsByConstructorHandler() {
super(InitializeFieldsByConstructor.class);
}
@Override
public void handle(AnnotationValues annotationValues, JCAnnotation ast, JavacNode annotationNode) {
super.handle(annotationValues, ast, annotationNode);
JavacNode typeNode = annotationNode.up();
if (typeNode.getKind() != Kind.TYPE) {
annotationNode.addWarning(String.format("@%s is only applicable to the type.", getAnnotationName()));
return;
}
InitializeFieldsByConstructor ifbc;
try {
ifbc = annotationValues.getInstance();
} catch (AnnotationValueDecodeFail e) {
return;
}
if (ifbc.allFieldsInitializer() != Access.NONE) {
List allInstanceFields = findFields(0, Flags.STATIC | Flags.TRANSIENT,
InitializeFieldsByConstructor.class, true);
if (Conditions.isEmpty(allInstanceFields)) return;
supplementConstructor(ifbc.allFieldsInitializer(), allInstanceFields);
}
if (ifbc.finalFieldsInitializer() != Access.NONE) {
List finalInstanceFields = findFields(Flags.FINAL, Flags.STATIC | Flags.TRANSIENT,
InitializeFieldsByConstructor.class, true);
if (Conditions.isEmpty(finalInstanceFields)) return;
supplementConstructor(ifbc.finalFieldsInitializer(), finalInstanceFields);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy