mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-15 04:18:44 +00:00
Handlers and testcases for @Slf4j
This commit is contained in:
1 parent
d269cdcaf1
commit
c38a64a556
6 files changed
+62
-26
No files matched your search
@@ -38,6 +38,7 @@ import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
|
||||
import org.eclipse.jdt.internal.compiler.ast.MessageSend;
|
||||
import org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.StringLiteral;
|
||||
import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
|
||||
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
|
||||
@@ -48,7 +49,7 @@ public class HandleLog {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public static void processAnnotation(LoggingFramework framework, AnnotationValues<? extends java.lang.annotation.Annotation> annotation, Annotation source, EclipseNode annotationNode) {
|
||||
public static void processAnnotation(LoggingFramework framework, AnnotationValues<? extends java.lang.annotation.Annotation> annotation, Annotation source, EclipseNode annotationNode, String loggerCategory) {
|
||||
EclipseNode owner = annotationNode.up();
|
||||
switch (owner.getKind()) {
|
||||
case TYPE:
|
||||
@@ -71,7 +72,7 @@ public class HandleLog {
|
||||
|
||||
ClassLiteralAccess loggingType = selfType(owner, source);
|
||||
|
||||
FieldDeclaration fieldDeclaration = createField(framework, source, loggingType);
|
||||
FieldDeclaration fieldDeclaration = createField(framework, source, loggingType, loggerCategory);
|
||||
fieldDeclaration.traverse(new SetGeneratedByVisitor(source), typeDecl.staticInitializerScope);
|
||||
// TODO temporary workaround for issue 217. http://code.google.com/p/projectlombok/issues/detail?id=217
|
||||
// injectFieldSuppressWarnings(owner, fieldDeclaration);
|
||||
@@ -97,7 +98,7 @@ public class HandleLog {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static FieldDeclaration createField(LoggingFramework framework, Annotation source, ClassLiteralAccess loggingType) {
|
||||
public static FieldDeclaration createField(LoggingFramework framework, Annotation source, ClassLiteralAccess loggingType, String loggerCategory) {
|
||||
int pS = source.sourceStart, pE = source.sourceEnd;
|
||||
long p = (long)pS << 32 | pE;
|
||||
|
||||
@@ -116,7 +117,12 @@ public class HandleLog {
|
||||
factoryMethodCall.receiver = createNameReference(framework.getLoggerFactoryTypeName(), source);
|
||||
factoryMethodCall.selector = framework.getLoggerFactoryMethodName().toCharArray();
|
||||
|
||||
Expression parameter = framework.createFactoryParameter(loggingType, source);
|
||||
Expression parameter;
|
||||
if (loggerCategory == null || loggerCategory.trim().length() == 0) {
|
||||
parameter = framework.createFactoryParameter(loggingType, source);
|
||||
} else {
|
||||
parameter = new StringLiteral(loggerCategory.toCharArray(), pS, pE, 0);
|
||||
}
|
||||
|
||||
factoryMethodCall.arguments = new Expression[] { parameter };
|
||||
factoryMethodCall.nameSourcePosition = p;
|
||||
@@ -155,7 +161,7 @@ public class HandleLog {
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleCommonsLog extends EclipseAnnotationHandler<lombok.extern.apachecommons.CommonsLog> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.apachecommons.CommonsLog> annotation, Annotation source, EclipseNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.COMMONS, annotation, source, annotationNode);
|
||||
processAnnotation(LoggingFramework.COMMONS, annotation, source, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +171,7 @@ public class HandleLog {
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleJulLog extends EclipseAnnotationHandler<lombok.extern.java.Log> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.java.Log> annotation, Annotation source, EclipseNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.JUL, annotation, source, annotationNode);
|
||||
processAnnotation(LoggingFramework.JUL, annotation, source, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,7 +181,7 @@ public class HandleLog {
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleLog4jLog extends EclipseAnnotationHandler<lombok.extern.log4j.Log4j> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.log4j.Log4j> annotation, Annotation source, EclipseNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.LOG4J, annotation, source, annotationNode);
|
||||
processAnnotation(LoggingFramework.LOG4J, annotation, source, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,7 +191,7 @@ public class HandleLog {
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleLog4j2Log extends EclipseAnnotationHandler<lombok.extern.log4j.Log4j2> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.log4j.Log4j2> annotation, Annotation source, EclipseNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.LOG4J2, annotation, source, annotationNode);
|
||||
processAnnotation(LoggingFramework.LOG4J2, annotation, source, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,7 +201,7 @@ public class HandleLog {
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleSlf4jLog extends EclipseAnnotationHandler<lombok.extern.slf4j.Slf4j> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.slf4j.Slf4j> annotation, Annotation source, EclipseNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.SLF4J, annotation, source, annotationNode);
|
||||
processAnnotation(LoggingFramework.SLF4J, annotation, source, annotationNode, annotation.getInstance().value());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,7 +211,7 @@ public class HandleLog {
|
||||
@ProviderFor(EclipseAnnotationHandler.class)
|
||||
public static class HandleXSlf4jLog extends EclipseAnnotationHandler<lombok.extern.slf4j.XSlf4j> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.slf4j.XSlf4j> annotation, Annotation source, EclipseNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.XSLF4J, annotation, source, annotationNode);
|
||||
processAnnotation(LoggingFramework.XSLF4J, annotation, source, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
@@ -57,4 +57,8 @@ import java.lang.annotation.Target;
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target(ElementType.TYPE)
|
||||
public @interface Slf4j {
|
||||
/**
|
||||
* Sets the category of the constructed Logger. By default, it will use the type where the annotation is placed.
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
@@ -25,7 +25,9 @@ import static lombok.javac.handlers.JavacHandlerUtil.*;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.core.AnnotationValues;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import lombok.javac.JavacAnnotationHandler;
|
||||
import lombok.javac.JavacNode;
|
||||
import lombok.javac.JavacTreeMaker;
|
||||
@@ -47,10 +49,10 @@ public class HandleLog {
|
||||
private HandleLog() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public static void processAnnotation(LoggingFramework framework, AnnotationValues<?> annotation, JavacNode annotationNode) {
|
||||
|
||||
public static void processAnnotation(LoggingFramework framework, AnnotationValues<?> annotation, JavacNode annotationNode, String loggerCategory) {
|
||||
deleteAnnotationIfNeccessary(annotationNode, framework.getAnnotationClass());
|
||||
|
||||
|
||||
JavacNode typeNode = annotationNode.up();
|
||||
switch (typeNode.getKind()) {
|
||||
case TYPE:
|
||||
@@ -58,14 +60,14 @@ public class HandleLog {
|
||||
annotationNode.addError("@Log is legal only on classes and enums.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (fieldExists("log", typeNode)!= MemberExistsResult.NOT_EXISTS) {
|
||||
annotationNode.addWarning("Field 'log' already exists.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
JCFieldAccess loggingType = selfType(typeNode);
|
||||
createField(framework, typeNode, loggingType, annotationNode.get());
|
||||
createField(framework, typeNode, loggingType, annotationNode.get(), loggerCategory);
|
||||
break;
|
||||
default:
|
||||
annotationNode.addError("@Log is legal only on types.");
|
||||
@@ -79,16 +81,22 @@ public class HandleLog {
|
||||
return maker.Select(maker.Ident(name), typeNode.toName("class"));
|
||||
}
|
||||
|
||||
public static boolean createField(LoggingFramework framework, JavacNode typeNode, JCFieldAccess loggingType, JCTree source) {
|
||||
public static boolean createField(LoggingFramework framework, JavacNode typeNode, JCFieldAccess loggingType, JCTree source, String loggerCategory) {
|
||||
JavacTreeMaker maker = typeNode.getTreeMaker();
|
||||
|
||||
// private static final <loggerType> log = <factoryMethod>(<parameter>);
|
||||
JCExpression loggerType = chainDotsString(typeNode, framework.getLoggerTypeName());
|
||||
JCExpression factoryMethod = chainDotsString(typeNode, framework.getLoggerFactoryMethodName());
|
||||
|
||||
JCExpression loggerName = framework.createFactoryParameter(typeNode, loggingType);
|
||||
|
||||
JCExpression loggerName;
|
||||
if (loggerCategory == null || loggerCategory.trim().length() == 0) {
|
||||
loggerName = framework.createFactoryParameter(typeNode, loggingType);
|
||||
} else {
|
||||
loggerName = maker.Literal(loggerCategory);
|
||||
}
|
||||
|
||||
JCMethodInvocation factoryMethodCall = maker.Apply(List.<JCExpression>nil(), factoryMethod, List.<JCExpression>of(loggerName));
|
||||
|
||||
|
||||
JCVariableDecl fieldDecl = recursiveSetGeneratedBy(maker.VarDef(
|
||||
maker.Modifiers(Flags.PRIVATE | Flags.FINAL | Flags.STATIC),
|
||||
typeNode.toName("log"), loggerType, factoryMethodCall), source, typeNode.getContext());
|
||||
@@ -103,7 +111,7 @@ public class HandleLog {
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleCommonsLog extends JavacAnnotationHandler<lombok.extern.apachecommons.CommonsLog> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.apachecommons.CommonsLog> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.COMMONS, annotation, annotationNode);
|
||||
processAnnotation(LoggingFramework.COMMONS, annotation, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +121,7 @@ public class HandleLog {
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleJulLog extends JavacAnnotationHandler<lombok.extern.java.Log> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.java.Log> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.JUL, annotation, annotationNode);
|
||||
processAnnotation(LoggingFramework.JUL, annotation, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,7 +131,7 @@ public class HandleLog {
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleLog4jLog extends JavacAnnotationHandler<lombok.extern.log4j.Log4j> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.log4j.Log4j> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.LOG4J, annotation, annotationNode);
|
||||
processAnnotation(LoggingFramework.LOG4J, annotation, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,7 +141,7 @@ public class HandleLog {
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleLog4j2Log extends JavacAnnotationHandler<lombok.extern.log4j.Log4j2> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.log4j.Log4j2> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.LOG4J2, annotation, annotationNode);
|
||||
processAnnotation(LoggingFramework.LOG4J2, annotation, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,7 +151,7 @@ public class HandleLog {
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleSlf4jLog extends JavacAnnotationHandler<lombok.extern.slf4j.Slf4j> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.slf4j.Slf4j> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.SLF4J, annotation, annotationNode);
|
||||
processAnnotation(LoggingFramework.SLF4J, annotation, annotationNode, annotation.getInstance().value());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,7 +161,7 @@ public class HandleLog {
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public static class HandleXSlf4jLog extends JavacAnnotationHandler<lombok.extern.slf4j.XSlf4j> {
|
||||
@Override public void handle(AnnotationValues<lombok.extern.slf4j.XSlf4j> annotation, JCAnnotation ast, JavacNode annotationNode) {
|
||||
processAnnotation(LoggingFramework.XSLF4J, annotation, annotationNode);
|
||||
processAnnotation(LoggingFramework.XSLF4J, annotation, annotationNode, "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,4 +11,9 @@ class LoggerSlf4jOuter {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Inner.class);
|
||||
}
|
||||
}
|
||||
|
||||
class LoggerSlf4jWithDifferentLoggerName {
|
||||
@java.lang.SuppressWarnings("all")
|
||||
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger("DifferentLogger");
|
||||
}
|
||||
@@ -27,4 +27,13 @@ class LoggerSlf4jOuter {
|
||||
LoggerSlf4jOuter() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
||||
@Slf4j("DifferentLogger") class LoggerSlf4jWithDifferentLoggerName {
|
||||
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger("DifferentLogger");
|
||||
<clinit>() {
|
||||
}
|
||||
LoggerSlf4jWithDifferentLoggerName() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
@@ -13,4 +13,8 @@ class LoggerSlf4jOuter {
|
||||
static class Inner {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Slf4j("DifferentLogger")
|
||||
class LoggerSlf4jWithDifferentLoggerName {
|
||||
}
|
||||
Reference in new issue
Block a user