mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
IDEA-141243 Support ant-contrib try/catch-task (by Martin Zdarsky https://github.com/zdary)
This commit is contained in:
@@ -24,6 +24,7 @@ import java.io.PrintStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Stack;
|
||||
|
||||
public final class IdeaAntLogger2 extends DefaultLogger {
|
||||
static SegmentedOutputStream ourErr;
|
||||
@@ -46,6 +47,12 @@ public final class IdeaAntLogger2 extends DefaultLogger {
|
||||
*/
|
||||
public static final String OUTPUT_PREFIX = "IDEA_ANT_INTEGRATION";
|
||||
|
||||
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);
|
||||
@@ -87,12 +94,19 @@ public final class IdeaAntLogger2 extends DefaultLogger {
|
||||
}
|
||||
|
||||
public synchronized void taskStarted(BuildEvent event) {
|
||||
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());
|
||||
try {
|
||||
sendException(event, true);
|
||||
myTaskPriority.sendMessage(TASK_END, event.getPriority(), event.getException());
|
||||
}
|
||||
finally {
|
||||
getTaskCallStack().pop();
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void messageLogged(BuildEvent event) {
|
||||
@@ -136,11 +150,12 @@ public final class IdeaAntLogger2 extends DefaultLogger {
|
||||
private boolean sendException(BuildEvent event, boolean isFailOnError) {
|
||||
Throwable exception = event.getException();
|
||||
if (exception != null) {
|
||||
if (isFailOnError) {
|
||||
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, insideTryTask? Project.MSG_VERBOSE : Project.MSG_WARN, exception.getMessage());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -165,6 +180,10 @@ public final class IdeaAntLogger2 extends DefaultLogger {
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user