...
[repair.git] / Repair / RepairCompiler / MCC / IR / SimpleIRErrorReporter.java
1 package MCC.IR;
2
3 import java.util.Vector;
4
5 public class SimpleIRErrorReporter implements IRErrorReporter {
6     
7     public boolean error;
8
9     String filename;
10     Vector messages;
11     
12
13     public SimpleIRErrorReporter () {
14         messages = new Vector();
15         error = false;
16         filename = null;
17     }
18
19     public void setFilename(String filename) {
20         this.filename = new String(filename + ":");
21     } 
22
23     public void report(ParseNode v, String s) {
24
25         LinedMessage sem = new LinedMessage();
26         sem.error = true;
27         sem.pn = v;
28         sem.message = s;        
29
30         add(sem);
31         
32         error = true;
33     }
34
35     public void warn(ParseNode v, String s) {
36         
37         LinedMessage sem = new LinedMessage();
38         sem.error = false;
39         sem.pn = v;
40         sem.message = s;
41         
42         add(sem);
43     }
44
45
46     private boolean messageExists(LinedMessage sem) {
47         for (int i = 0; i < messages.size(); i++) {
48             
49             LinedMessage cur = (LinedMessage) messages.elementAt(i);
50             
51             if (cur.message.equals(sem.message))
52                 return true;
53         }
54         return false;
55     }
56     
57
58     private void add(LinedMessage sem) {
59
60         if (messageExists(sem)) 
61             return;
62
63         if (sem.pn == null) {
64             messages.addElement(sem);
65             return;
66         }
67
68         int i;
69         for (i = 0; i < messages.size(); i++) {
70
71             LinedMessage cur = (LinedMessage)messages.elementAt(i);
72
73             if (cur.pn.getLine() > sem.pn.getLine()) {
74                 break;
75             }
76         }
77
78         messages.insertElementAt(sem, i);
79     }
80
81     public String toString() {
82         String output = new String();
83
84         for (int i = 0; i < messages.size(); i++) {
85             LinedMessage sem = (LinedMessage)messages.elementAt(i);
86             if (sem.error) {
87                 output += "Semantic Error";
88             } else {
89                 output += "Semantic Warning";
90             }
91
92             if (sem.pn != null) {
93                 output += ": " + filename + ": "+sem.pn.getLine() + ": ";
94             } else {
95                 output += ": ";
96             }
97
98             output += sem.message;
99             output += "\n";
100         }
101         return output;
102     }
103 }
104
105 class LinedMessage {
106     boolean error;
107     public ParseNode pn;
108     public String message;
109 }