[jeka] IDEA-54867 [flex] improve mxmlc ant task result presentation: detect errors and links to related files

This commit is contained in:
Alexander Doroshko
2011-11-29 17:28:45 +04:00
parent b05e88db36
commit e6b199a2b4
7 changed files with 56 additions and 21 deletions
@@ -18,9 +18,6 @@ package com.intellij.rt.ant.execution;
import java.lang.reflect.InvocationTargetException;
public final class AntMain2 {
public static final int MSG_VERBOSE = 3;
public static final int MSG_ERR = 0;
public static final int MSG_WARN = 1;
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
IdeaAntLogger2.guardStreams();
+4
View File
@@ -9,6 +9,10 @@
<resource-bundle>com.intellij.lang.ant.resources.AntActionsBundle</resource-bundle>
<depends>com.intellij.properties</depends>
<extensionPoints>
<extensionPoint name="AntMessageCustomizer" interface="com.intellij.lang.ant.config.execution.AntMessageCustomizer"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<projectService serviceInterface="com.intellij.lang.ant.config.AntConfiguration" serviceImplementation="com.intellij.lang.ant.config.impl.AntConfigurationImpl"/>
<projectService serviceInterface="com.intellij.lang.ant.config.impl.AntWorkspaceConfiguration" serviceImplementation="com.intellij.lang.ant.config.impl.AntWorkspaceConfiguration"/>
@@ -48,7 +48,6 @@ import com.intellij.openapi.wm.WindowManager;
import com.intellij.openapi.wm.ex.IdeFocusTraversalPolicy;
import com.intellij.peer.PeerFactory;
import com.intellij.problems.WolfTheProblemSolver;
import com.intellij.rt.ant.execution.AntMain2;
import com.intellij.ui.content.*;
import com.intellij.util.text.DateFormatUtil;
import com.intellij.util.ui.UIUtil;
@@ -76,14 +75,17 @@ public final class AntBuildMessageView extends JPanel implements DataProvider, O
private static final Key<AntBuildMessageView> KEY = Key.create("BuildMessageView.KEY");
private static final String BUILD_CONTENT_NAME = AntBundle.message("ant.build.tab.content.title");
public static final int PRIORITY_ERR = 0;
public static final int PRIORITY_WARN = 1;
public static final int PRIORITY_BRIEF = 2;
public static final int PRIORITY_VERBOSE = 3;
private OutputParser myParsingThread;
private final Project myProject;
private final JPanel myMessagePanel;
private AntBuildFileBase myBuildFile;
private final String[] myTargets;
private static final int VERBOSE_MODE = AntMain2.MSG_VERBOSE;
private static final int BRIEF_MODE = AntMain2.MSG_VERBOSE - 1;
private int myPriorityThreshold = BRIEF_MODE;
private int myPriorityThreshold = PRIORITY_BRIEF;
private int myErrorCount;
private int myWarningCount;
private boolean myIsOutputPaused = false;
@@ -98,6 +100,8 @@ public final class AntBuildMessageView extends JPanel implements DataProvider, O
private JPanel myProgressPanel;
private final AntMessageCustomizer[] myMessageCustomizers = AntMessageCustomizer.EP_NAME.getExtensions();
private final Timer myScrollerTimer = UIUtil.createNamedTimer("Ant message view timer", 1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (myTreeView != null && myCommandsProcessedCount < myLog.size()) {
@@ -161,14 +165,14 @@ public final class AntBuildMessageView extends JPanel implements DataProvider, O
}
public void setVerboseMode(boolean verbose) {
changeDetalizationLevel(verbose ? VERBOSE_MODE : BRIEF_MODE);
changeDetalizationLevel(verbose ? PRIORITY_VERBOSE : PRIORITY_BRIEF);
if (myBuildFile != null) {
myBuildFile.setVerboseMode(verbose);
}
}
public boolean isVerboseMode() {
return myPriorityThreshold == VERBOSE_MODE;
return myPriorityThreshold == PRIORITY_VERBOSE;
}
private synchronized void changeDetalizationLevel(int priorityThreshold) {
@@ -380,9 +384,27 @@ public final class AntBuildMessageView extends JPanel implements DataProvider, O
addCommand(new StartTaskCommand(taskName));
}
public void outputMessage(String message, int priority) {
updateErrorAndWarningCounters(priority);
addMessage(MessageType.MESSAGE, priority, message, null, 0, 0);
public void outputMessage(final String text, final int priority) {
final AntMessage customizedMessage = getCustomizedMessage(text, priority);
final AntMessage message = customizedMessage != null
? customizedMessage
: new AntMessage(MessageType.MESSAGE, priority, text, null, 0, 0);
updateErrorAndWarningCounters(message.getPriority());
addCommand(new AddMessageCommand(message));
}
@Nullable
private AntMessage getCustomizedMessage(final String text, final int priority) {
AntMessage customizedMessage = null;
for (AntMessageCustomizer customizer : myMessageCustomizers) {
customizedMessage = customizer.createCustomizedMessage(text, priority);
if (customizedMessage != null) {
break;
}
}
return customizedMessage;
}
public void outputError(String error, int priority) {
@@ -394,7 +416,7 @@ public final class AntBuildMessageView extends JPanel implements DataProvider, O
}
public void outputException(String exception) {
updateErrorAndWarningCounters(0);
updateErrorAndWarningCounters(PRIORITY_ERR);
AntMessage message = createErrorMessage(MessageType.ERROR, 0, exception);
addCommand(new AddExceptionCommand(message));
WolfTheProblemSolver wolf = WolfTheProblemSolver.getInstance(myProject);
@@ -403,10 +425,10 @@ public final class AntBuildMessageView extends JPanel implements DataProvider, O
private void updateErrorAndWarningCounters(int priority) {
if (priority == AntMain2.MSG_ERR) {
if (priority == PRIORITY_ERR) {
myErrorCount++;
}
else if (priority == AntMain2.MSG_WARN) {
else if (priority == PRIORITY_WARN) {
myWarningCount++;
}
}
@@ -474,7 +496,7 @@ public final class AntBuildMessageView extends JPanel implements DataProvider, O
}
public void outputJavacMessage(MessageType type, String[] text, VirtualFile file, String url, int line, int column) {
int priority = type == MessageType.ERROR ? AntMain2.MSG_ERR : AntMain2.MSG_VERBOSE;
int priority = type == MessageType.ERROR ? PRIORITY_ERR : PRIORITY_VERBOSE;
updateErrorAndWarningCounters(priority);
AntMessage message = new AntMessage(type, priority, text, file, line, column);
addCommand(new AddJavacMessageCommand(message, url));
@@ -22,7 +22,7 @@ import com.intellij.util.StringBuilderSpinAllocator;
import java.util.ArrayList;
import java.util.StringTokenizer;
final class AntMessage {
public final class AntMessage {
private final AntBuildMessageView.MessageType myType;
private final int myPriority;
private final String myText;
@@ -0,0 +1,14 @@
package com.intellij.lang.ant.config.execution;
import com.intellij.openapi.extensions.ExtensionPointName;
import org.jetbrains.annotations.Nullable;
public abstract class AntMessageCustomizer {
public static final ExtensionPointName<AntMessageCustomizer> EP_NAME = ExtensionPointName.create("AntSupport.AntMessageCustomizer");
@Nullable
public AntMessage createCustomizedMessage(String text, int priority) {
return null;
}
}
@@ -17,7 +17,6 @@ package com.intellij.lang.ant.config.execution;
import com.intellij.lang.ant.AntIcons;
import com.intellij.openapi.util.IconLoader;
import com.intellij.rt.ant.execution.AntMain2;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.MultilineTreeCellRenderer;
import com.intellij.ui.SideBorder;
@@ -69,7 +68,7 @@ final class MessageTreeRenderer extends MultilineTreeCellRenderer {
icon = PlatformIcons.TASK_ICON;
}
else if (type == AntBuildMessageView.MessageType.MESSAGE) {
if (node.getPriority() == AntMain2.MSG_WARN) {
if (node.getPriority() == AntBuildMessageView.PRIORITY_WARN) {
icon = myWarningIcon;
}
else {
@@ -27,7 +27,6 @@ import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.rt.ant.execution.AntMain2;
import com.intellij.rt.ant.execution.IdeaAntLogger2;
import com.intellij.util.text.StringTokenizer;
import org.jetbrains.annotations.NonNls;
@@ -146,7 +145,7 @@ public class OutputParser{
if (IdeaAntLogger2.MESSAGE == tagName) {
if (myIsEcho) {
myMessageView.outputMessage(tagValue, AntMain2.MSG_VERBOSE);
myMessageView.outputMessage(tagValue, AntBuildMessageView.PRIORITY_VERBOSE);
}
else {
myMessageView.outputMessage(tagValue, priority);