Skip to content
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add a MessagerAppender to replace classic processingEvent.getMessager…
…().printMessage(...)
  • Loading branch information
DayS committed Dec 6, 2013
commit 9ad6e162fd5425974684d0e6de4d5dcab4dab01b
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;

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

timeStats.setMessager(messager);

messager.printMessage(Diagnostic.Kind.NOTE, "Starting AndroidAnnotations annotation processing");

}

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

private void generateSources(ProcessResult processResult) throws IOException {
timeStats.start("Generate Sources");
Messager messager = processingEnv.getMessager();
messager.printMessage(Diagnostic.Kind.NOTE, "Number of files generated by AndroidAnnotations: " + processResult.codeModel.countArtifacts());
CodeModelGenerator modelGenerator = new CodeModelGenerator(processingEnv.getFiler(), messager, getAAProcessorVersion());
LOGGER.info("Number of files generated by AndroidAnnotations: {}", processResult.codeModel.countArtifacts());
CodeModelGenerator modelGenerator = new CodeModelGenerator(processingEnv.getFiler(), processingEnv.getMessager(), getAAProcessorVersion());
modelGenerator.generate(processResult);
timeStats.stop("Generate Sources");
}

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

LOGGER.error("Something went wront : {}", errorMessage);

Messager messager = processingEnv.getMessager();
messager.printMessage(Diagnostic.Kind.ERROR, errorMessage);

/*
* Printing exception as an error on a random element. The exception is
* not related to this element, but otherwise it wouldn't show up in
Expand All @@ -678,7 +668,9 @@ private void handleException(Set<? extends TypeElement> annotations, RoundEnviro
Iterator<? extends TypeElement> iterator = annotations.iterator();
if (iterator.hasNext()) {
Element element = roundEnv.getElementsAnnotatedWith(iterator.next()).iterator().next();
messager.printMessage(Diagnostic.Kind.ERROR, errorMessage, element);
LOGGER.error("Something went wront : {}", errorMessage, element);
} else {
LOGGER.error("Something went wront : {}", errorMessage);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ public String buildLog(Level level, String loggerName, String message, Throwable
stringBuilder.append('\n').append(stackTraceToString(thr));
}

stringBuilder.append('\n');

return stringBuilder.toString();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.androidannotations.logger;

import javax.lang.model.element.Element;

public class Logger {

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

public void trace(String message, Object... args) {
log(Level.TRACE, message, null, args);
trace(message, null, args);
}

public void trace(String message, Element element, Object... args) {
log(Level.TRACE, message, element, null, args);
}

public void debug(String message, Object... args) {
log(Level.DEBUG, message, null, args);
debug(message, null, args);
}

public void debug(String message, Element element, Object... args) {
log(Level.DEBUG, message, element, null, args);
}

public void info(String message, Object... args) {
log(Level.INFO, message, null, args);
info(message, null, args);
}

public void info(String message, Element element, Object... args) {
log(Level.INFO, message, element, null, args);
}

public void warn(String message, Object... args) {
log(Level.WARN, message, null, args);
warn(message, null, null, args);
}

public void warn(String message, Element element, Object... args) {
warn(message, element, null, args);
}

public void warn(String message, Throwable thr, Object... args) {
log(Level.WARN, message, thr, args);
public void warn(String message, Element element, Throwable thr, Object... args) {
log(Level.WARN, message, element, thr, args);
}

public void error(String message, Object... args) {
log(Level.ERROR, message, null, args);
error(message, null, null, args);
}

public void error(String message, Element element, Object... args) {
error(message, element, null, args);
}

public void error(String message, Throwable thr, Object... args) {
log(Level.ERROR, message, thr, args);
public void error(String message, Element element, Throwable thr, Object... args) {
log(Level.ERROR, message, element, thr, args);
}

public boolean isLoggable(Level level) {
return level.isGreaterOrEquals(loggerContext.getCurrentLevel());
}

private void log(Level level, String message, Throwable thr, Object... args) {
private void log(Level level, String message, Element element, Throwable thr, Object... args) {
if (!isLoggable(level)) {
return;
}

loggerContext.writeLog(level, name, message, thr, args);
loggerContext.writeLog(level, name, message, element, thr, args);
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
package org.androidannotations.logger;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.Element;

import org.androidannotations.logger.appender.Appender;
import org.androidannotations.logger.appender.FileAppender;
import org.androidannotations.logger.appender.MessagerAppender;

public class LoggerContext {

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

private Level currentLevel = DEFAULT_LEVEL;
private Appender appender = new Appender();
private List<Appender> appenders = new ArrayList<Appender>();
private Formatter formatter = new Formatter();

public static LoggerContext getInstance() {
Expand All @@ -25,11 +33,16 @@ public static LoggerContext getInstance() {
}

LoggerContext() {
// appenders.add(new ConsoleAppender());
appenders.add(new FileAppender());
appenders.add(new MessagerAppender());
}

public void writeLog(Level level, String loggerName, String message, Throwable thr, Object... args) {
public void writeLog(Level level, String loggerName, String message, Element element, Throwable thr, Object... args) {
String log = formatter.buildLog(level, loggerName, message, thr, args);
appender.append(log);
for (Appender appender : appenders) {
appender.append(level, element, log);
}
}

public Level getCurrentLevel() {
Expand All @@ -41,14 +54,18 @@ public void setCurrentLevel(Level currentLevel) {
}

public void setProcessingEnv(ProcessingEnvironment processingEnv) {
appender.setProcessingEnv(processingEnv);
appender.resolveLogFile();
for (Appender appender : appenders) {
appender.setProcessingEnv(processingEnv);
appender.open();
}

resolveLogLevel(processingEnv);
}

public void close() {
appender.closeFile();
for (Appender appender : appenders) {
appender.close();
}
}

private void resolveLogLevel(ProcessingEnvironment processingEnv) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.androidannotations.logger.appender;

import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.Element;

import org.androidannotations.logger.Level;

public abstract class Appender {

protected ProcessingEnvironment processingEnv;

public void setProcessingEnv(ProcessingEnvironment processingEnv) {
this.processingEnv = processingEnv;
}

public abstract void open();

public abstract void append(Level level, Element element, String message);

public abstract void close();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.androidannotations.logger.appender;

import javax.lang.model.element.Element;

import org.androidannotations.logger.Level;

public class ConsoleAppender extends Appender {

@Override
public void open() {
}

@Override
public void append(Level level, Element element, String message) {
if (level.isSmaller(Level.ERROR)) {
System.out.println(message);
} else {
System.err.println(message);
}
}

@Override
public void close() {
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.androidannotations.logger;
package org.androidannotations.logger.appender;

import java.io.File;
import java.io.FileNotFoundException;
Expand All @@ -7,28 +7,34 @@

import javax.annotation.processing.Messager;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.Element;
import javax.tools.Diagnostic.Kind;

import org.androidannotations.helper.FileHelper;
import org.androidannotations.logger.Level;
import org.androidannotations.logger.LoggerContext;

public class Appender {
public class FileAppender extends Appender {

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

private File file;
private FileOutputStream outputStream;
private ProcessingEnvironment processingEnv;

public synchronized void openFile() {
try {
outputStream = new FileOutputStream(file, true);
} catch (FileNotFoundException e) {
e.printStackTrace();
@Override
public synchronized void open() {
if (!isStreamOpened()) {
try {
outputStream = new FileOutputStream(file, true);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

public synchronized void closeFile() {
if (outputStream != null) {
@Override
public synchronized void close() {
if (isStreamOpened()) {
try {
outputStream.close();
} catch (IOException e) {
Expand All @@ -38,20 +44,26 @@ public synchronized void closeFile() {
}
}

public synchronized void append(String log) {
if (!isFileOpened()) {
openFile();
@Override
public synchronized void append(Level level, Element element, String message) {
if (isStreamOpened()) {
try {
message += "\n";
outputStream.write(message.getBytes());
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}

try {
outputStream.write(log.getBytes());
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
@Override
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
super.setProcessingEnv(processingEnv);
resolveLogFile();
}

public void resolveLogFile() {
private void resolveLogFile() {
Messager messager = processingEnv.getMessager();
if (processingEnv.getOptions().containsKey(LoggerContext.LOG_FILE_OPTION)) {
file = resolveLogFileInSpecifiedPath();
Expand Down Expand Up @@ -80,12 +92,8 @@ private File resolveLogFileInParentsDirectories() {
return new File(outputDirectory, DEFAULT_FILENAME);
}

public boolean isFileOpened() {
private boolean isStreamOpened() {
return outputStream != null;
}

public void setProcessingEnv(ProcessingEnvironment processingEnv) {
this.processingEnv = processingEnv;
}

}
Loading