1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 package org.antlr.mojo.antlr4;
30
31 import org.antlr.v4.Tool;
32 import org.antlr.v4.runtime.misc.NotNull;
33 import org.antlr.v4.tool.ANTLRMessage;
34 import org.antlr.v4.tool.ANTLRToolListener;
35 import org.apache.maven.plugin.logging.Log;
36 import org.sonatype.plexus.build.incremental.BuildContext;
37 import org.stringtemplate.v4.ST;
38
39 import java.io.File;
40
41
42
43
44
45
46
47 public class Antlr4ErrorLog implements ANTLRToolListener {
48
49 private final Tool tool;
50 private final BuildContext buildContext;
51 private final Log log;
52
53
54
55
56
57
58 public Antlr4ErrorLog(@NotNull Tool tool, @NotNull BuildContext buildContext, @NotNull Log log) {
59 this.tool = tool;
60 this.buildContext = buildContext;
61 this.log = log;
62 }
63
64
65
66
67
68
69
70
71 @Override
72 public void info(String message) {
73 if (tool.errMgr.formatWantsSingleLineMessage()) {
74 message = message.replace('\n', ' ');
75 }
76 log.info(message);
77 }
78
79
80
81
82
83
84
85
86 @Override
87 public void error(ANTLRMessage message) {
88 ST msgST = tool.errMgr.getMessageTemplate(message);
89 String outputMsg = msgST.render();
90 if (tool.errMgr.formatWantsSingleLineMessage()) {
91 outputMsg = outputMsg.replace('\n', ' ');
92 }
93
94 log.error(outputMsg);
95
96 if (message.fileName != null) {
97 String text = message.getMessageTemplate(false).render();
98 buildContext.addMessage(new File(message.fileName), message.line, message.charPosition, text, BuildContext.SEVERITY_ERROR, message.getCause());
99 }
100 }
101
102
103
104
105
106
107
108
109 @Override
110 public void warning(ANTLRMessage message) {
111 ST msgST = tool.errMgr.getMessageTemplate(message);
112 String outputMsg = msgST.render();
113 if (tool.errMgr.formatWantsSingleLineMessage()) {
114 outputMsg = outputMsg.replace('\n', ' ');
115 }
116
117 log.warn(outputMsg);
118
119 if (message.fileName != null) {
120 String text = message.getMessageTemplate(false).render();
121 buildContext.addMessage(new File(message.fileName), message.line, message.charPosition, text, BuildContext.SEVERITY_WARNING, message.getCause());
122 }
123 }
124 }