Skip to content

Commit 9ad6e16

Browse files
committed
Add a MessagerAppender to replace classic processingEvent.getMessager().printMessage(...)
1 parent 1ad320d commit 9ad6e16

8 files changed

Lines changed: 191 additions & 58 deletions

File tree

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/AndroidAnnotationProcessor.java‎

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import javax.lang.model.SourceVersion;
4141
import javax.lang.model.element.Element;
4242
import javax.lang.model.element.TypeElement;
43-
import javax.tools.Diagnostic;
4443

4544
import org.androidannotations.annotations.AfterInject;
4645
import org.androidannotations.annotations.AfterTextChange;
@@ -315,13 +314,10 @@ public synchronized void init(ProcessingEnvironment processingEnv) {
315314
loadPropertyFile();
316315
loadApiPropertyFile();
317316
} catch (Exception e) {
318-
messager.printMessage(Diagnostic.Kind.ERROR, "AndroidAnnotations processing failed: " + e.getMessage());
317+
LOGGER.error("Can't load API or core properties files", e);
319318
}
320319

321320
timeStats.setMessager(messager);
322-
323-
messager.printMessage(Diagnostic.Kind.NOTE, "Starting AndroidAnnotations annotation processing");
324-
325321
}
326322

327323
private void checkApiAndCoreVersions() throws VersionMismatchException {
@@ -654,21 +650,15 @@ private ModelProcessor buildModelProcessor(IRClass rClass, AndroidSystemServices
654650

655651
private void generateSources(ProcessResult processResult) throws IOException {
656652
timeStats.start("Generate Sources");
657-
Messager messager = processingEnv.getMessager();
658-
messager.printMessage(Diagnostic.Kind.NOTE, "Number of files generated by AndroidAnnotations: " + processResult.codeModel.countArtifacts());
659-
CodeModelGenerator modelGenerator = new CodeModelGenerator(processingEnv.getFiler(), messager, getAAProcessorVersion());
653+
LOGGER.info("Number of files generated by AndroidAnnotations: {}", processResult.codeModel.countArtifacts());
654+
CodeModelGenerator modelGenerator = new CodeModelGenerator(processingEnv.getFiler(), processingEnv.getMessager(), getAAProcessorVersion());
660655
modelGenerator.generate(processResult);
661656
timeStats.stop("Generate Sources");
662657
}
663658

664659
private void handleException(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv, ProcessingException e) {
665660
String errorMessage = errorHelper.getErrorMessage(processingEnv, e, getAAProcessorVersion());
666661

667-
LOGGER.error("Something went wront : {}", errorMessage);
668-
669-
Messager messager = processingEnv.getMessager();
670-
messager.printMessage(Diagnostic.Kind.ERROR, errorMessage);
671-
672662
/*
673663
* Printing exception as an error on a random element. The exception is
674664
* not related to this element, but otherwise it wouldn't show up in
@@ -678,7 +668,9 @@ private void handleException(Set<? extends TypeElement> annotations, RoundEnviro
678668
Iterator<? extends TypeElement> iterator = annotations.iterator();
679669
if (iterator.hasNext()) {
680670
Element element = roundEnv.getElementsAnnotatedWith(iterator.next()).iterator().next();
681-
messager.printMessage(Diagnostic.Kind.ERROR, errorMessage, element);
671+
LOGGER.error("Something went wront : {}", errorMessage, element);
672+
} else {
673+
LOGGER.error("Something went wront : {}", errorMessage);
682674
}
683675
}
684676

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/logger/Formatter.java‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ public String buildLog(Level level, String loggerName, String message, Throwable
2828
stringBuilder.append('\n').append(stackTraceToString(thr));
2929
}
3030

31-
stringBuilder.append('\n');
32-
3331
return stringBuilder.toString();
3432
}
3533

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.androidannotations.logger;
22

3+
import javax.lang.model.element.Element;
4+
35
public class Logger {
46

57
private final LoggerContext loggerContext;
@@ -11,43 +13,63 @@ public Logger(LoggerContext loggerContext, String name) {
1113
}
1214

1315
public void trace(String message, Object... args) {
14-
log(Level.TRACE, message, null, args);
16+
trace(message, null, args);
17+
}
18+
19+
public void trace(String message, Element element, Object... args) {
20+
log(Level.TRACE, message, element, null, args);
1521
}
1622

1723
public void debug(String message, Object... args) {
18-
log(Level.DEBUG, message, null, args);
24+
debug(message, null, args);
25+
}
26+
27+
public void debug(String message, Element element, Object... args) {
28+
log(Level.DEBUG, message, element, null, args);
1929
}
2030

2131
public void info(String message, Object... args) {
22-
log(Level.INFO, message, null, args);
32+
info(message, null, args);
33+
}
34+
35+
public void info(String message, Element element, Object... args) {
36+
log(Level.INFO, message, element, null, args);
2337
}
2438

2539
public void warn(String message, Object... args) {
26-
log(Level.WARN, message, null, args);
40+
warn(message, null, null, args);
41+
}
42+
43+
public void warn(String message, Element element, Object... args) {
44+
warn(message, element, null, args);
2745
}
2846

29-
public void warn(String message, Throwable thr, Object... args) {
30-
log(Level.WARN, message, thr, args);
47+
public void warn(String message, Element element, Throwable thr, Object... args) {
48+
log(Level.WARN, message, element, thr, args);
3149
}
3250

3351
public void error(String message, Object... args) {
34-
log(Level.ERROR, message, null, args);
52+
error(message, null, null, args);
53+
}
54+
55+
public void error(String message, Element element, Object... args) {
56+
error(message, element, null, args);
3557
}
3658

37-
public void error(String message, Throwable thr, Object... args) {
38-
log(Level.ERROR, message, thr, args);
59+
public void error(String message, Element element, Throwable thr, Object... args) {
60+
log(Level.ERROR, message, element, thr, args);
3961
}
4062

4163
public boolean isLoggable(Level level) {
4264
return level.isGreaterOrEquals(loggerContext.getCurrentLevel());
4365
}
4466

45-
private void log(Level level, String message, Throwable thr, Object... args) {
67+
private void log(Level level, String message, Element element, Throwable thr, Object... args) {
4668
if (!isLoggable(level)) {
4769
return;
4870
}
4971

50-
loggerContext.writeLog(level, name, message, thr, args);
72+
loggerContext.writeLog(level, name, message, element, thr, args);
5173
}
5274

5375
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/logger/LoggerContext.java‎

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
package org.androidannotations.logger;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
36
import javax.annotation.processing.ProcessingEnvironment;
7+
import javax.lang.model.element.Element;
8+
9+
import org.androidannotations.logger.appender.Appender;
10+
import org.androidannotations.logger.appender.FileAppender;
11+
import org.androidannotations.logger.appender.MessagerAppender;
412

513
public class LoggerContext {
614

@@ -10,7 +18,7 @@ public class LoggerContext {
1018
private static final Level DEFAULT_LEVEL = Level.DEBUG;
1119

1220
private Level currentLevel = DEFAULT_LEVEL;
13-
private Appender appender = new Appender();
21+
private List<Appender> appenders = new ArrayList<Appender>();
1422
private Formatter formatter = new Formatter();
1523

1624
public static LoggerContext getInstance() {
@@ -25,11 +33,16 @@ public static LoggerContext getInstance() {
2533
}
2634

2735
LoggerContext() {
36+
// appenders.add(new ConsoleAppender());
37+
appenders.add(new FileAppender());
38+
appenders.add(new MessagerAppender());
2839
}
2940

30-
public void writeLog(Level level, String loggerName, String message, Throwable thr, Object... args) {
41+
public void writeLog(Level level, String loggerName, String message, Element element, Throwable thr, Object... args) {
3142
String log = formatter.buildLog(level, loggerName, message, thr, args);
32-
appender.append(log);
43+
for (Appender appender : appenders) {
44+
appender.append(level, element, log);
45+
}
3346
}
3447

3548
public Level getCurrentLevel() {
@@ -41,14 +54,18 @@ public void setCurrentLevel(Level currentLevel) {
4154
}
4255

4356
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
44-
appender.setProcessingEnv(processingEnv);
45-
appender.resolveLogFile();
57+
for (Appender appender : appenders) {
58+
appender.setProcessingEnv(processingEnv);
59+
appender.open();
60+
}
4661

4762
resolveLogLevel(processingEnv);
4863
}
4964

5065
public void close() {
51-
appender.closeFile();
66+
for (Appender appender : appenders) {
67+
appender.close();
68+
}
5269
}
5370

5471
private void resolveLogLevel(ProcessingEnvironment processingEnv) {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.androidannotations.logger.appender;
2+
3+
import javax.annotation.processing.ProcessingEnvironment;
4+
import javax.lang.model.element.Element;
5+
6+
import org.androidannotations.logger.Level;
7+
8+
public abstract class Appender {
9+
10+
protected ProcessingEnvironment processingEnv;
11+
12+
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
13+
this.processingEnv = processingEnv;
14+
}
15+
16+
public abstract void open();
17+
18+
public abstract void append(Level level, Element element, String message);
19+
20+
public abstract void close();
21+
22+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.androidannotations.logger.appender;
2+
3+
import javax.lang.model.element.Element;
4+
5+
import org.androidannotations.logger.Level;
6+
7+
public class ConsoleAppender extends Appender {
8+
9+
@Override
10+
public void open() {
11+
}
12+
13+
@Override
14+
public void append(Level level, Element element, String message) {
15+
if (level.isSmaller(Level.ERROR)) {
16+
System.out.println(message);
17+
} else {
18+
System.err.println(message);
19+
}
20+
}
21+
22+
@Override
23+
public void close() {
24+
}
25+
26+
}

AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/logger/Appender.java renamed to AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/logger/appender/FileAppender.java

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.androidannotations.logger;
1+
package org.androidannotations.logger.appender;
22

33
import java.io.File;
44
import java.io.FileNotFoundException;
@@ -7,28 +7,34 @@
77

88
import javax.annotation.processing.Messager;
99
import javax.annotation.processing.ProcessingEnvironment;
10+
import javax.lang.model.element.Element;
1011
import javax.tools.Diagnostic.Kind;
1112

1213
import org.androidannotations.helper.FileHelper;
14+
import org.androidannotations.logger.Level;
15+
import org.androidannotations.logger.LoggerContext;
1316

14-
public class Appender {
17+
public class FileAppender extends Appender {
1518

1619
private static final String DEFAULT_FILENAME = "androidannotations.log";
1720

1821
private File file;
1922
private FileOutputStream outputStream;
20-
private ProcessingEnvironment processingEnv;
2123

22-
public synchronized void openFile() {
23-
try {
24-
outputStream = new FileOutputStream(file, true);
25-
} catch (FileNotFoundException e) {
26-
e.printStackTrace();
24+
@Override
25+
public synchronized void open() {
26+
if (!isStreamOpened()) {
27+
try {
28+
outputStream = new FileOutputStream(file, true);
29+
} catch (FileNotFoundException e) {
30+
e.printStackTrace();
31+
}
2732
}
2833
}
2934

30-
public synchronized void closeFile() {
31-
if (outputStream != null) {
35+
@Override
36+
public synchronized void close() {
37+
if (isStreamOpened()) {
3238
try {
3339
outputStream.close();
3440
} catch (IOException e) {
@@ -38,20 +44,26 @@ public synchronized void closeFile() {
3844
}
3945
}
4046

41-
public synchronized void append(String log) {
42-
if (!isFileOpened()) {
43-
openFile();
47+
@Override
48+
public synchronized void append(Level level, Element element, String message) {
49+
if (isStreamOpened()) {
50+
try {
51+
message += "\n";
52+
outputStream.write(message.getBytes());
53+
outputStream.flush();
54+
} catch (IOException e) {
55+
e.printStackTrace();
56+
}
4457
}
58+
}
4559

46-
try {
47-
outputStream.write(log.getBytes());
48-
outputStream.flush();
49-
} catch (IOException e) {
50-
e.printStackTrace();
51-
}
60+
@Override
61+
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
62+
super.setProcessingEnv(processingEnv);
63+
resolveLogFile();
5264
}
5365

54-
public void resolveLogFile() {
66+
private void resolveLogFile() {
5567
Messager messager = processingEnv.getMessager();
5668
if (processingEnv.getOptions().containsKey(LoggerContext.LOG_FILE_OPTION)) {
5769
file = resolveLogFileInSpecifiedPath();
@@ -80,12 +92,8 @@ private File resolveLogFileInParentsDirectories() {
8092
return new File(outputDirectory, DEFAULT_FILENAME);
8193
}
8294

83-
public boolean isFileOpened() {
95+
private boolean isStreamOpened() {
8496
return outputStream != null;
8597
}
8698

87-
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
88-
this.processingEnv = processingEnv;
89-
}
90-
9199
}

0 commit comments

Comments
 (0)