*/
public static final String OUTPUT_PREFIX = "IDEA_ANT_INTEGRATION";
- private final Thread myMainThread;
- private final Stack myCallingTasks = new Stack();
++ private final ThreadLocal myCallingTasks = new ThreadLocal() {
++ protected Object initialValue() {
++ return new Stack();
++ }
++ };
+
private final Priority myMessagePriority = new MessagePriority();
private final Priority myTargetPriority = new StatePriority(Project.MSG_INFO);
private final Priority myTaskPriority = new StatePriority(Project.MSG_INFO);
}
public synchronized void taskStarted(BuildEvent event) {
- if (Thread.currentThread() == myMainThread) {
- myCallingTasks.push(event.getTask().getTaskName());
- }
-- myTaskPriority.sendMessage(TASK, event.getPriority(), event.getTask().getTaskName());
++ final String taskName = event.getTask().getTaskName();
++ getTaskCallStack().push(taskName);
++ myTaskPriority.sendMessage(TASK, event.getPriority(), taskName);
}
public synchronized void taskFinished(BuildEvent event) {
-- sendException(event, true);
-- myTaskPriority.sendMessage(TASK_END, event.getPriority(), event.getException());
- if (Thread.currentThread() == myMainThread) {
- myCallingTasks.pop();
++ try {
++ sendException(event, true);
++ myTaskPriority.sendMessage(TASK_END, event.getPriority(), event.getException());
++ }
++ finally {
++ getTaskCallStack().pop();
+ }
}
public synchronized void messageLogged(BuildEvent event) {
private boolean sendException(BuildEvent event, boolean isFailOnError) {
Throwable exception = event.getException();
if (exception != null) {
- if (isFailOnError) {
- if (isFailOnError && !isInTryCatch()) {
++ final boolean insideTryTask = getTaskCallStack().contains("try");
++ if (isFailOnError && !insideTryTask) {
myAlwaysSend.sendMessage(EXCEPTION, event.getPriority(), exception);
return true;
}
- myMessagePriority.sendMessage(MESSAGE, Project.MSG_WARN, exception.getMessage());
- myMessagePriority.sendMessage(MESSAGE, isInTryCatch() ? Project.MSG_VERBOSE : Project.MSG_WARN, exception.getMessage());
++ myMessagePriority.sendMessage(MESSAGE, insideTryTask? Project.MSG_VERBOSE : Project.MSG_WARN, exception.getMessage());
}
return false;
}
return packet;
}
++ private Stack getTaskCallStack() {
++ return (Stack)myCallingTasks.get();
++ }
++
private abstract class Priority {
protected void peformSendMessage(char id, int priority, String text) {
PacketWriter packet = createPacket(id, priority);