我正在尝试替换此代码:
nil
以此
input = input[/str|con|dex|wis|int|cha/] || ''
我看到了拦截器和注释,但我做不到。
这可能吗?
答案 0 :(得分:0)
这是绝对可能的。 Project Lombok提供您想要的确切功能。您只需根据需要扩展EclipseAnnotationHandler或JavacAnnotationHandler来创建自己的注释。
下面提供了示例注释处理程序(WithUser)供参考。如果在方法上使用,则整个方法将被if(false){...}
块包围。在处理程序( HandleWithUser.java )上用您自己的表达式替换false
。
@WithUser
public void doThing(){
System.out.println("Hello World");
}
注释处理后
public void doThing(){
if (false){
System.out.println("Hello World");
}
}
设置龙目岛项目
git clone https://github.com/rzwitserloot/lombok.git
cd lombok
ant eclipse
在Eclipse上打开Lombok项目并创建以下文件。
WithUser.java
package lombok;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
@Retention(RetentionPolicy.SOURCE)
public @interface WithUser {
}
HandleWithUser.java
package lombok.javac.handlers;
import static lombok.javac.handlers.JavacHandlerUtil.setGeneratedBy;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.Annotation;
import org.eclipse.jdt.internal.compiler.ast.IfStatement;
import org.eclipse.jdt.internal.compiler.ast.Statement;
import org.mangosdk.spi.ProviderFor;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
import com.sun.tools.javac.tree.JCTree.JCIf;
import com.sun.tools.javac.tree.JCTree.JCLiteral;
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
import com.sun.tools.javac.tree.JCTree.JCStatement;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.List;
import org.eclipse.jdt.internal.compiler.ast.FalseLiteral;
import lombok.WithUser;
import lombok.core.AnnotationValues;
import lombok.javac.JavacAnnotationHandler;
import lombok.javac.JavacNode;
import lombok.javac.JavacTreeMaker;
@ProviderFor(JavacAnnotationHandler.class)
public class HandleWithUser extends JavacAnnotationHandler<WithUser>{
@Override
public void handle(AnnotationValues<WithUser> annotationValues, JCAnnotation ast, JavacNode annotationNode) {
JavacNode annotation = annotationNode.up();
JCMethodDecl method = (JCMethodDecl)annotation.get();
List<JCStatement> contents = (List<JCStatement>) method.body.stats;
JCTree source = annotation.get();
JavacTreeMaker maker = annotationNode.getTreeMaker();
JCLiteral falseLiteral = maker.Literal(false);
JCIf ifStatement = maker.If(falseLiteral, maker.Block(0, contents), null);
Context context = annotationNode.getContext();
JCStatement ifBlock = setGeneratedBy(ifStatement, source, context);
method.body.stats = List.of(ifBlock);
annotation.rebuild();
}
}
生成 lombok.jar
ant dist
测试
确保在类路径中包含lombok.jar
javac -cp lombok.jar Test.java
有关更多信息,请访问https://projectlombok.org/contributing/contributing