Skip to content

Commit 065e69f

Browse files
committed
Fix possible npe error and don't freeze the view
1 parent 66527f5 commit 065e69f

File tree

2 files changed

+70
-44
lines changed

2 files changed

+70
-44
lines changed

tmc-plugin/nbproject/genfiles.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ [email protected]
55
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
66
nbproject/build-impl.xml.data.CRC32=76201e38
77
nbproject/build-impl.xml.script.CRC32=72a9c69e
8-
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.71.1
8+
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.67.1

tmc-plugin/src/fi/helsinki/cs/tmc/spyware/eventsources/WindowStatechangesEventSource.java

Lines changed: 69 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.logging.Level;
2727
import java.util.logging.Logger;
2828
import javax.accessibility.Accessible;
29+
import javax.accessibility.AccessibleContext;
2930
import javax.swing.text.Document;
3031
import javax.swing.text.JTextComponent;
3132
import org.netbeans.api.annotations.common.NullAllowed;
@@ -58,52 +59,61 @@ void startListening() {
5859
*/
5960
@Override
6061
public void propertyChange(PropertyChangeEvent evt) {
61-
FileObject changedFile = getChangedFile();
62-
63-
Exercise exercise = getExercise(changedFile);
64-
String eventName = underscorify(evt.getPropertyName());
62+
try {
63+
FileObject changedFile = getChangedFile();
64+
65+
Exercise exercise = getExercise(changedFile);
66+
String eventName = underscorify(evt.getPropertyName());
67+
68+
LoggableEvent event;
69+
if (exercise != null) {
70+
log.log(Level.FINER, "Exercise: {0}", exercise);
71+
String filePath = TmcFileUtils.tryGetPathRelativeToProject(changedFile);
72+
String data = JsonMaker.create()
73+
.add("new_value", toStringWithObjects(evt.getNewValue()))
74+
.add("old_value", toStringWithObjects(evt.getOldValue()))
75+
.add("file", toStringWithObjects(filePath))
76+
.toString();
77+
78+
event = new LoggableEvent(exercise, eventName, data.getBytes(Charset.forName("UTF-8")));
79+
} else {
80+
String data = JsonMaker.create()
81+
.add("new_value", toStringWithObjects(evt.getNewValue()))
82+
.add("old_value", toStringWithObjects(evt.getOldValue()))
83+
.add("non_tmc_project", true)
84+
.toString();
85+
event = new LoggableEvent(eventName, data.getBytes(Charset.forName("UTF-8")));
86+
}
6587

66-
LoggableEvent event;
67-
if (exercise != null) {
68-
log.log(Level.FINER, "Exercise: {0}", exercise);
69-
String filePath = TmcFileUtils.tryGetPathRelativeToProject(changedFile);
70-
String data = JsonMaker.create()
71-
.add("new_value", toStringWithObjects(evt.getNewValue()))
72-
.add("old_value", toStringWithObjects(evt.getOldValue()))
73-
.add("file", toStringWithObjects(filePath))
74-
.toString();
75-
event = new LoggableEvent(exercise, eventName, data.getBytes(Charset.forName("UTF-8")));
76-
} else {
77-
String data = JsonMaker.create()
78-
.add("new_value", toStringWithObjects(evt.getNewValue()))
79-
.add("old_value", toStringWithObjects(evt.getOldValue()))
80-
.add("non_tmc_project", true)
81-
.toString();
82-
event = new LoggableEvent(eventName, data.getBytes(Charset.forName("UTF-8")));
88+
receiver.receiveEvent(event);
89+
} catch (Exception e) {
90+
log.log(Level.WARNING, "Error in window event listener: {0}", e);
8391
}
84-
85-
receiver.receiveEvent(event);
8692
}
8793

8894
/**
8995
* Logs window events.
9096
*/
9197
private void reactToEvent(String action, WindowEvent event) {
92-
String data = JsonMaker.create()
93-
.add("new_state", event.getNewState())
94-
.add("old_state", event.getOldState())
95-
.toString();
96-
if (courseDb != null) {
97-
Course course = courseDb.getCurrentCourse();
98-
if (course != null) {
99-
receiver.receiveEvent(
100-
new LoggableEvent(course, action, data.getBytes(Charset.forName("UTF-8"))));
98+
try {
99+
String data = JsonMaker.create()
100+
.add("new_state", event.getNewState())
101+
.add("old_state", event.getOldState())
102+
.toString();
103+
if (courseDb != null) {
104+
Course course = courseDb.getCurrentCourse();
105+
if (course != null) {
106+
receiver.receiveEvent(
107+
new LoggableEvent(course, action, data.getBytes(Charset.forName("UTF-8"))));
108+
} else {
109+
receiver.receiveEvent(
110+
new LoggableEvent(action, data.getBytes(Charset.forName("UTF-8"))));
111+
}
101112
} else {
102-
receiver.receiveEvent(
103-
new LoggableEvent(action, data.getBytes(Charset.forName("UTF-8"))));
113+
log.log(Level.WARNING, "Coursedb is null");
104114
}
105-
} else {
106-
log.log(Level.WARNING, "Coursedb is null");
115+
} catch (Exception e) {
116+
log.log(Level.WARNING, "Error in window event listener: {0}", e);
107117
}
108118
}
109119

@@ -152,14 +162,30 @@ private Exercise getExercise(@NullAllowed FileObject obj) {
152162
}
153163

154164
private String toStringWithObjects(Object object) {
155-
if (object == null) {
156-
return "null";
157-
} else if (object instanceof Mode) {
158-
return ((Mode) object).getName();
159-
} else if (object instanceof Accessible) {
160-
return ((Accessible) object).getAccessibleContext().getAccessibleName();
165+
try {
166+
if (object == null) {
167+
return "null";
168+
} else if (object instanceof Mode) {
169+
return ((Mode) object).getName();
170+
} else if (object instanceof Accessible) {
171+
try {
172+
Accessible acc = (Accessible) object;
173+
AccessibleContext context = acc.getAccessibleContext();
174+
if (context != null) {
175+
String str = context.getAccessibleName();
176+
if (str != null) {
177+
return str;
178+
}
179+
}
180+
} catch (Exception e) {
181+
log.log(Level.WARNING, "Windowstate exception error: {0}", e);
182+
return "accessible_exception";
183+
}
184+
}
185+
return object.toString();
186+
} catch (Exception e) {
187+
return "error";
161188
}
162-
return object.toString();
163189
}
164190

165191
private String underscorify(String string) {

0 commit comments

Comments
 (0)