36
36
public class CompilerMessageMatcher {
37
37
/** Line Number (starting at 1) */
38
38
private final List <Integer > lineNumbers = new ArrayList <Integer >();
39
+ private final List <Long > positions = new ArrayList <Long >();
39
40
private final List <List <String >> messages = new ArrayList <List <String >>();
40
41
private boolean optional ;
41
42
@@ -48,14 +49,17 @@ public boolean isOptional() {
48
49
public static CompilerMessageMatcher asCompilerMessageMatcher (CompilerMessage message ) {
49
50
CompilerMessageMatcher cmm = new CompilerMessageMatcher ();
50
51
cmm .lineNumbers .add ((int ) message .getLine ());
52
+ cmm .positions .add (message .getPosition ());
51
53
cmm .messages .add (Arrays .asList (message .getMessage ().split ("\\ s+" )));
52
54
return cmm ;
53
55
}
54
56
55
57
@ Override public String toString () {
56
58
StringBuilder out = new StringBuilder ();
57
59
for (int i = 0 ; i < lineNumbers .size (); i ++) {
58
- out .append (lineNumbers .get (i )).append (" " );
60
+ out .append (lineNumbers .get (i ));
61
+ if (positions .get (i ) != null ) out .append (":" ).append (positions .get (i ));
62
+ out .append (" " );
59
63
for (String part : messages .get (i )) out .append (part ).append (" " );
60
64
if (out .length () > 0 ) out .setLength (out .length () - 1 );
61
65
out .append (" |||| " );
@@ -68,6 +72,7 @@ public boolean matches(CompilerMessage message) {
68
72
outer :
69
73
for (int i = 0 ; i < lineNumbers .size (); i ++) {
70
74
if (message .getLine () != lineNumbers .get (i )) continue ;
75
+ if (positions .get (i ) != null && !positions .get (i ).equals (message .getPosition ())) continue ;
71
76
for (String token : messages .get (i )) {
72
77
if (!message .getMessage ().contains (token )) continue outer ;
73
78
}
@@ -87,7 +92,7 @@ public static List<CompilerMessageMatcher> readAll(InputStream rawIn) throws IOE
87
92
return out ;
88
93
}
89
94
90
- private static final Pattern PATTERN = Pattern .compile ("^(-?\\ d+) (.*)$" );
95
+ private static final Pattern PATTERN = Pattern .compile ("^(-?\\ d+)(?::( \\ d+))? (.*)$" );
91
96
92
97
private static CompilerMessageMatcher read (String line ) {
93
98
line = line .trim ();
@@ -107,7 +112,8 @@ private static CompilerMessageMatcher read(String line) {
107
112
Matcher m = PATTERN .matcher (part );
108
113
if (!m .matches ()) throw new IllegalArgumentException ("Typo in test file: " + line );
109
114
cmm .lineNumbers .add (Integer .parseInt (m .group (1 )));
110
- cmm .messages .add (Arrays .asList (m .group (2 ).split ("\\ s+" )));
115
+ cmm .positions .add (m .group (2 ) != null ? Long .parseLong (m .group (2 )) : null );
116
+ cmm .messages .add (Arrays .asList (m .group (3 ).split ("\\ s+" )));
111
117
}
112
118
113
119
return cmm ;
0 commit comments