Skip to content

Commit 1c9d514

Browse files
committed
Refactoring
1 parent cc2cfc7 commit 1c9d514

9 files changed

Lines changed: 172 additions & 38 deletions

File tree

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@
133133
import org.androidannotations.helper.ErrorHelper;
134134
import org.androidannotations.helper.Option;
135135
import org.androidannotations.helper.TimeStats;
136+
import org.androidannotations.logger.Level;
136137
import org.androidannotations.logger.Logger;
138+
import org.androidannotations.logger.LoggerContext;
137139
import org.androidannotations.logger.LoggerFactory;
138140
import org.androidannotations.model.AndroidRes;
139141
import org.androidannotations.model.AndroidSystemServices;
@@ -300,8 +302,9 @@ public class AndroidAnnotationProcessor extends AbstractProcessor {
300302
@Override
301303
public synchronized void init(ProcessingEnvironment processingEnv) {
302304
super.init(processingEnv);
305+
LoggerContext.getInstance().setProcessingEnv(processingEnv);
303306

304-
LOGGER.warn("test: {}", processingEnv);
307+
LOGGER.warn("Initialize AndroidAnnotationProcessor with options {}", processingEnv.getOptions());
305308

306309
Messager messager = processingEnv.getMessager();
307310

@@ -332,6 +335,13 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
332335
timeStats.clear();
333336
timeStats.start("Whole Processing");
334337

338+
Set<? extends Element> rootElements = roundEnv.getRootElements();
339+
if (LOGGER.isLoggable(Level.TRACE)) {
340+
LOGGER.trace("Start processing for {} annotations {} on {} elements {}", annotations.size(), annotations, rootElements.size(), rootElements);
341+
} else {
342+
LOGGER.info("Start processing for {} annotations on {} elements", annotations.size(), rootElements.size());
343+
}
344+
335345
try {
336346
checkApiAndCoreVersions();
337347
processThrowing(annotations, roundEnv);
@@ -342,6 +352,10 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
342352
}
343353
timeStats.stop("Whole Processing");
344354
timeStats.logStats();
355+
356+
LOGGER.info("Finish processing");
357+
358+
LoggerContext.getInstance().close();
345359
return true;
346360
}
347361

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package org.androidannotations.logger;
2+
3+
import java.io.File;
4+
import java.io.FileNotFoundException;
5+
import java.io.FileOutputStream;
6+
import java.io.IOException;
7+
8+
import javax.annotation.processing.Messager;
9+
import javax.annotation.processing.ProcessingEnvironment;
10+
import javax.tools.Diagnostic.Kind;
11+
12+
public class Appender {
13+
14+
private File file;
15+
private FileOutputStream outputStream;
16+
private ProcessingEnvironment processingEnv;
17+
18+
public synchronized void openFile() {
19+
try {
20+
outputStream = new FileOutputStream(file, true);
21+
} catch (FileNotFoundException e) {
22+
e.printStackTrace();
23+
}
24+
}
25+
26+
public synchronized void closeFile() {
27+
if (outputStream != null) {
28+
try {
29+
outputStream.close();
30+
} catch (IOException e) {
31+
e.printStackTrace();
32+
}
33+
outputStream = null;
34+
}
35+
}
36+
37+
public synchronized void append(String log) {
38+
if (!isFileOpened()) {
39+
openFile();
40+
}
41+
42+
try {
43+
outputStream.write(log.getBytes());
44+
outputStream.flush();
45+
} catch (IOException e) {
46+
e.printStackTrace();
47+
}
48+
}
49+
50+
public void resolveLogFile() {
51+
if (file == null) {
52+
if (processingEnv.getOptions().containsKey(LoggerContext.LOG_FILE_OPTION)) {
53+
file = resolveLogFileInSpecifiedPath();
54+
} else {
55+
file = resolveLogFileInParentsDirectories();
56+
}
57+
}
58+
}
59+
60+
private File resolveLogFileInSpecifiedPath() {
61+
String path = processingEnv.getOptions().get(LoggerContext.LOG_FILE_OPTION);
62+
return new File(path);
63+
}
64+
65+
private File resolveLogFileInParentsDirectories() {
66+
// TODO
67+
68+
if (file == null) {
69+
Messager messager = processingEnv.getMessager();
70+
messager.printMessage(Kind.ERROR, "Can't resolve log file path");
71+
}
72+
return null;
73+
}
74+
75+
public boolean isFileOpened() {
76+
return outputStream != null;
77+
}
78+
79+
public void setFile(File file) {
80+
this.file = file;
81+
}
82+
83+
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
84+
this.processingEnv = processingEnv;
85+
}
86+
87+
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ public class Formatter {
1313
private static final String ARGS_PATTERN = "{}";
1414
private static final int ARGS_PATTERN_LENGTH = ARGS_PATTERN.length();
1515

16-
public static String buildLog(Level level, String loggerName, String message, Throwable thr, Object... args) {
16+
public String buildLog(Level level, String loggerName, String message, Throwable thr, Object... args) {
1717
String fullMessage = buildFullMessage(message, args);
1818
StringBuilder stringBuilder = new StringBuilder(fullMessage.length());
1919

2020
stringBuilder.append(DATE_FORMAT.format(new Date())) //
21-
.append(" [").append(Thread.currentThread().getName()).append("] ") //
21+
.append(" [").append(Thread.currentThread().getName()).append("]") //
2222
.append(" ").append(level.name) //
2323
.append(" ").append(loggerName) //
2424
.append(" - ").append(fullMessage);
@@ -33,7 +33,7 @@ public static String buildLog(Level level, String loggerName, String message, Th
3333
return stringBuilder.toString();
3434
}
3535

36-
public static String buildFullMessage(String message, Object... args) {
36+
public String buildFullMessage(String message, Object... args) {
3737
StringBuilder stringBuilder = new StringBuilder(message.length());
3838
int lastIndex = 0;
3939
int argIndex = 0;
@@ -60,14 +60,14 @@ public static String buildFullMessage(String message, Object... args) {
6060
return stringBuilder.toString();
6161
}
6262

63-
private static String formatArgument(Object arg) {
63+
private String formatArgument(Object arg) {
6464
if (arg != null && arg.getClass().isArray()) {
6565
return Arrays.toString((Object[]) arg);
6666
}
6767
return arg.toString();
6868
}
6969

70-
private static String stackTraceToString(Throwable e) {
70+
private String stackTraceToString(Throwable e) {
7171
StringWriter writer = new StringWriter();
7272
PrintWriter pw = new PrintWriter(writer);
7373
e.printStackTrace(pw);

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ private Level(int weight, String name) {
1515
this.name = name;
1616
}
1717

18-
public boolean isGreaterOrEqual(Level l) {
18+
public boolean isGreaterOrEquals(Level l) {
1919
return weight >= l.weight;
2020
}
2121

22+
public boolean isSmaller(Level l) {
23+
return weight < l.weight;
24+
}
2225
}

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
public class Logger {
44

5+
private final LoggerContext loggerContext;
56
private final String name;
67

7-
public Logger(String name) {
8+
public Logger(LoggerContext loggerContext, String name) {
9+
this.loggerContext = loggerContext;
810
this.name = name;
911
}
1012

@@ -36,12 +38,16 @@ public void error(String message, Throwable thr, Object... args) {
3638
log(Level.ERROR, message, thr, args);
3739
}
3840

41+
public boolean isLoggable(Level level) {
42+
return level.isGreaterOrEquals(loggerContext.getCurrentLevel());
43+
}
44+
3945
private void log(Level level, String message, Throwable thr, Object... args) {
40-
if (LoggerContext.getInstance().getCurrentLevel().isGreaterOrEqual(level)) {
46+
if (!isLoggable(level)) {
4147
return;
4248
}
4349

44-
LoggerContext.getInstance().writeLog(level, name, message, thr, args);
50+
loggerContext.writeLog(level, name, message, thr, args);
4551
}
4652

4753
}
Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package org.androidannotations.logger;
22

33
import java.io.File;
4-
import java.io.FileNotFoundException;
5-
import java.io.FileOutputStream;
6-
import java.io.IOException;
4+
5+
import javax.annotation.processing.ProcessingEnvironment;
76

87
public class LoggerContext {
98

9+
public static final String LOG_FILE_OPTION = "logFile";
10+
public static final String LOG_LEVEL_OPTION = "logLevel";
1011
private static LoggerContext INSTANCE = null;
1112
private static final Level DEFAULT_LEVEL = Level.DEBUG;
1213

1314
private Level currentLevel = DEFAULT_LEVEL;
14-
private FileOutputStream outputStream;
15-
private File fileLog;
15+
private Appender appender = new Appender();
16+
private Formatter formatter = new Formatter();
1617

1718
public static LoggerContext getInstance() {
1819
if (INSTANCE == null) {
@@ -25,24 +26,12 @@ public static LoggerContext getInstance() {
2526
return INSTANCE;
2627
}
2728

28-
private LoggerContext() {
29-
fileLog = new File("androidannotations.log");
30-
try {
31-
outputStream = new FileOutputStream(fileLog, true);
32-
} catch (FileNotFoundException e) {
33-
e.printStackTrace();
34-
}
29+
LoggerContext() {
3530
}
3631

3732
public void writeLog(Level level, String loggerName, String message, Throwable thr, Object... args) {
38-
String log = Formatter.buildLog(level, loggerName, message, thr, args);
39-
40-
try {
41-
outputStream.write(log.getBytes());
42-
outputStream.flush();
43-
} catch (IOException e) {
44-
e.printStackTrace();
45-
}
33+
String log = formatter.buildLog(level, loggerName, message, thr, args);
34+
appender.append(log);
4635
}
4736

4837
public Level getCurrentLevel() {
@@ -53,4 +42,17 @@ public void setCurrentLevel(Level currentLevel) {
5342
this.currentLevel = currentLevel;
5443
}
5544

45+
public void setFileLog(String path) {
46+
appender.setFile(new File(path));
47+
}
48+
49+
public void setProcessingEnv(ProcessingEnvironment processingEnv) {
50+
appender.setProcessingEnv(processingEnv);
51+
appender.resolveLogFile();
52+
}
53+
54+
public void close() {
55+
appender.closeFile();
56+
}
57+
5658
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ private static Logger getLogger(String name) {
1818

1919
Logger logger = LOGGER_CACHE.get(name);
2020
if (logger == null) {
21-
logger = new Logger(name);
21+
logger = new Logger(LoggerContext.getInstance(), name);
2222
LOGGER_CACHE.put(name, logger);
2323
}
2424

‎AndroidAnnotations/androidannotations/src/test/java/org/androidannotations/logger/FormatterTest.java‎

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
public class FormatterTest {
1010

11+
private Formatter formatter = new Formatter();
12+
1113
class SomeObject {
1214
String name;
1315

@@ -23,28 +25,28 @@ public String toString() {
2325

2426
@Test
2527
public void testBuildFullMessage_string() throws Exception {
26-
Assert.assertEquals("This is a test", Formatter.buildFullMessage("{} is a test", "This"));
27-
Assert.assertEquals("This is a test", Formatter.buildFullMessage("This is a {}", "test"));
28-
Assert.assertEquals("This is a test", Formatter.buildFullMessage("This {} {} test", "is", "a"));
29-
Assert.assertEquals("This is a test", Formatter.buildFullMessage("This {} a test", "is", "a"));
28+
Assert.assertEquals("This is a test", formatter.buildFullMessage("{} is a test", "This"));
29+
Assert.assertEquals("This is a test", formatter.buildFullMessage("This is a {}", "test"));
30+
Assert.assertEquals("This is a test", formatter.buildFullMessage("This {} {} test", "is", "a"));
31+
Assert.assertEquals("This is a test", formatter.buildFullMessage("This {} a test", "is", "a"));
3032
}
3133

3234
@Test
3335
public void testBuildFullMessage_int_array() throws Exception {
3436
Integer[] values = new Integer[] { 1, 2 };
35-
Assert.assertEquals("Values = [1, 2]", Formatter.buildFullMessage("Values = {}", new Object[] { values }));
37+
Assert.assertEquals("Values = [1, 2]", formatter.buildFullMessage("Values = {}", new Object[] { values }));
3638
}
3739

3840
@Test
3941
public void testBuildFullMessage_object_array() throws Exception {
4042
SomeObject[] values = new SomeObject[] { new SomeObject("a"), new SomeObject("b") };
41-
Assert.assertEquals("Objects = [a, b]", Formatter.buildFullMessage("Objects = {}", new Object[] { values }));
43+
Assert.assertEquals("Objects = [a, b]", formatter.buildFullMessage("Objects = {}", new Object[] { values }));
4244
}
4345

4446
@Test
4547
public void testBuildFullMessage_list() throws Exception {
4648
List<SomeObject> values = Arrays.asList(new SomeObject("a"), new SomeObject("b"));
47-
Assert.assertEquals("Objects = [a, b]", Formatter.buildFullMessage("Objects = {}", values));
49+
Assert.assertEquals("Objects = [a, b]", formatter.buildFullMessage("Objects = {}", values));
4850
}
4951

5052
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.androidannotations.logger;
2+
3+
import junit.framework.Assert;
4+
5+
import org.junit.Test;
6+
7+
public class LoggerTest {
8+
9+
@Test
10+
public void testIsLoggable() throws Exception {
11+
LoggerContext loggerContext = LoggerContext.getInstance();
12+
loggerContext.setCurrentLevel(Level.INFO);
13+
Logger logger = new Logger(loggerContext, getClass().getName());
14+
15+
Assert.assertFalse(logger.isLoggable(Level.DEBUG));
16+
Assert.assertTrue(logger.isLoggable(Level.INFO));
17+
Assert.assertTrue(logger.isLoggable(Level.WARN));
18+
}
19+
20+
}

0 commit comments

Comments
 (0)