mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-06 07:45:50 +02:00
bug 302720: [Error Parser] Build preferences should store only customized error parsers
This commit is contained in:
parent
11b3b8cbe7
commit
0593978730
11 changed files with 273 additions and 75 deletions
|
@ -403,10 +403,17 @@ public class RegexErrorParserTests extends TestCase {
|
||||||
assertEquals(firstName, retrieved2.getName());
|
assertEquals(firstName, retrieved2.getName());
|
||||||
assertTrue(retrieved2 instanceof ErrorParserNamedWrapper);
|
assertTrue(retrieved2 instanceof ErrorParserNamedWrapper);
|
||||||
assertEquals(dummy2, ((ErrorParserNamedWrapper)retrieved2).getErrorParser());
|
assertEquals(dummy2, ((ErrorParserNamedWrapper)retrieved2).getErrorParser());
|
||||||
|
|
||||||
|
IErrorParserNamed retrieved2_ext = ErrorParserManager.getErrorParserExtensionCopy(firstId);
|
||||||
|
assertNotNull(retrieved2_ext);
|
||||||
|
assertEquals(firstName, retrieved2_ext.getName());
|
||||||
|
assertEquals(firstErrorParser, retrieved2_ext);
|
||||||
}
|
}
|
||||||
// reset available parsers
|
// reset available parsers
|
||||||
{
|
{
|
||||||
ErrorParserManager.setUserDefinedErrorParsers(null);
|
ErrorParserManager.setUserDefinedErrorParsers(null);
|
||||||
|
String[] userDefinedIds = ErrorParserManager.getUserDefinedErrorParserIds();
|
||||||
|
assertNull(userDefinedIds);
|
||||||
|
|
||||||
String all = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserAvailableIds());
|
String all = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserAvailableIds());
|
||||||
assertEquals(false, all.contains(TESTING_ID));
|
assertEquals(false, all.contains(TESTING_ID));
|
||||||
|
@ -431,6 +438,9 @@ public class RegexErrorParserTests extends TestCase {
|
||||||
// reset parsers
|
// reset parsers
|
||||||
{
|
{
|
||||||
ErrorParserManager.setUserDefinedErrorParsers(null);
|
ErrorParserManager.setUserDefinedErrorParsers(null);
|
||||||
|
String[] userDefinedIds = ErrorParserManager.getUserDefinedErrorParserIds();
|
||||||
|
assertNull(userDefinedIds);
|
||||||
|
|
||||||
String all = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserAvailableIds());
|
String all = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserAvailableIds());
|
||||||
String extensions = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserExtensionIds());
|
String extensions = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserExtensionIds());
|
||||||
assertEquals(all, extensions);
|
assertEquals(all, extensions);
|
||||||
|
@ -439,6 +449,9 @@ public class RegexErrorParserTests extends TestCase {
|
||||||
ErrorParserManager.setUserDefinedErrorParsers(new IErrorParserNamed[] {
|
ErrorParserManager.setUserDefinedErrorParsers(new IErrorParserNamed[] {
|
||||||
new ErrorParserNamedWrapper(TESTING_ID, TESTING_NAME, new DummyErrorParser()),
|
new ErrorParserNamedWrapper(TESTING_ID, TESTING_NAME, new DummyErrorParser()),
|
||||||
});
|
});
|
||||||
|
String userDefinedIds = ErrorParserManager.toDelimitedString(ErrorParserManager.getUserDefinedErrorParserIds());
|
||||||
|
assertEquals(TESTING_ID, userDefinedIds);
|
||||||
|
|
||||||
String all = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserAvailableIds());
|
String all = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserAvailableIds());
|
||||||
String extensions = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserExtensionIds());
|
String extensions = ErrorParserManager.toDelimitedString(ErrorParserManager.getErrorParserExtensionIds());
|
||||||
assertFalse(all.equals(extensions));
|
assertFalse(all.equals(extensions));
|
||||||
|
|
|
@ -164,7 +164,7 @@ public class ErrorParserManager extends OutputStream {
|
||||||
}
|
}
|
||||||
fErrorParsers = new LinkedHashMap<String, IErrorParser[]>(parsersIDs.length);
|
fErrorParsers = new LinkedHashMap<String, IErrorParser[]>(parsersIDs.length);
|
||||||
for (String parsersID : parsersIDs) {
|
for (String parsersID : parsersIDs) {
|
||||||
IErrorParser errorParser = ErrorParserExtensionManager.getErrorParserCopy(parsersID);
|
IErrorParser errorParser = getErrorParserCopy(parsersID);
|
||||||
if (errorParser!=null) {
|
if (errorParser!=null) {
|
||||||
fErrorParsers.put(parsersID, new IErrorParser[] {errorParser} );
|
fErrorParsers.put(parsersID, new IErrorParser[] {errorParser} );
|
||||||
}
|
}
|
||||||
|
@ -748,6 +748,14 @@ outer:
|
||||||
return hasErrors;
|
return hasErrors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return default error parsers IDs to be used if error parser list is empty.
|
||||||
|
* @since 5.3
|
||||||
|
*/
|
||||||
|
public static String[] getUserDefinedErrorParserIds() {
|
||||||
|
return ErrorParserExtensionManager.getUserDefinedErrorParserIds();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set and store in workspace area user defined error parsers.
|
* Set and store in workspace area user defined error parsers.
|
||||||
*
|
*
|
||||||
|
@ -797,14 +805,24 @@ outer:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param id - ID of error parser
|
* @param id - ID of error parser
|
||||||
* @return cloned copy of error parser. Note that {@link ErrorParserNamedWrapper} returns
|
* @return cloned copy of error parser or {@code null}.
|
||||||
* shallow copy with the same instance of underlying error parser.
|
* Note that {@link ErrorParserNamedWrapper} returns shallow copy with the same instance
|
||||||
|
* of underlying error parser.
|
||||||
* @since 5.2
|
* @since 5.2
|
||||||
*/
|
*/
|
||||||
public static IErrorParserNamed getErrorParserCopy(String id) {
|
public static IErrorParserNamed getErrorParserCopy(String id) {
|
||||||
return ErrorParserExtensionManager.getErrorParserCopy(id);
|
return ErrorParserExtensionManager.getErrorParserCopy(id, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param id - ID of error parser
|
||||||
|
* @return cloned copy of error parser as defined by its extension point or {@code null}.
|
||||||
|
* @since 5.3
|
||||||
|
*/
|
||||||
|
public static IErrorParserNamed getErrorParserExtensionCopy(String id) {
|
||||||
|
return ErrorParserExtensionManager.getErrorParserCopy(id, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ids - array of error parser IDs
|
* @param ids - array of error parser IDs
|
||||||
* @return error parser IDs delimited with error parser delimiter ";"
|
* @return error parser IDs delimited with error parser delimiter ";"
|
||||||
|
|
|
@ -20,11 +20,10 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
@ -44,7 +43,9 @@ import org.eclipse.cdt.core.IMarkerGenerator;
|
||||||
import org.eclipse.cdt.core.errorparsers.ErrorParserNamedWrapper;
|
import org.eclipse.cdt.core.errorparsers.ErrorParserNamedWrapper;
|
||||||
import org.eclipse.cdt.core.errorparsers.RegexErrorParser;
|
import org.eclipse.cdt.core.errorparsers.RegexErrorParser;
|
||||||
import org.eclipse.cdt.core.errorparsers.RegexErrorPattern;
|
import org.eclipse.cdt.core.errorparsers.RegexErrorPattern;
|
||||||
|
import org.eclipse.cdt.core.resources.ResourcesUtil;
|
||||||
import org.eclipse.cdt.internal.core.XmlUtil;
|
import org.eclipse.cdt.internal.core.XmlUtil;
|
||||||
|
import org.eclipse.core.filesystem.URIUtil;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IConfigurationElement;
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
import org.eclipse.core.runtime.IExtension;
|
import org.eclipse.core.runtime.IExtension;
|
||||||
|
@ -101,6 +102,34 @@ public class ErrorParserExtensionManager {
|
||||||
private static LinkedHashMap<String, IErrorParserNamed> fUserDefinedErrorParsers = null;
|
private static LinkedHashMap<String, IErrorParserNamed> fUserDefinedErrorParsers = null;
|
||||||
private static List<String> fDefaultErrorParserIds = null;
|
private static List<String> fDefaultErrorParserIds = null;
|
||||||
|
|
||||||
|
private static class ErrorParserComparator implements Comparator<IErrorParserNamed> {
|
||||||
|
// For the error parsers taken from platform extensions following sorting order applies:
|
||||||
|
// - first regular error parsers
|
||||||
|
// - then deprecated ones
|
||||||
|
// - then contributed by test plugin
|
||||||
|
// inside the same category sort by parser name
|
||||||
|
public int compare(IErrorParserNamed errorParser1, IErrorParserNamed errorParser2) {
|
||||||
|
final String TEST_PLUGIN_ID="org.eclipse.cdt.core.tests"; //$NON-NLS-1$
|
||||||
|
final String DEPRECATED=CCorePlugin.getResourceString("CCorePlugin.Deprecated"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
boolean isTestPlugin1 = errorParser1.getId().startsWith(TEST_PLUGIN_ID);
|
||||||
|
boolean isTestPlugin2 = errorParser2.getId().startsWith(TEST_PLUGIN_ID);
|
||||||
|
if (isTestPlugin1==true && isTestPlugin2==false)
|
||||||
|
return 1;
|
||||||
|
if (isTestPlugin1==false && isTestPlugin2==true)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
boolean isDeprecated1 = errorParser1.getName().contains(DEPRECATED);
|
||||||
|
boolean isDeprecated2 = errorParser2.getName().contains(DEPRECATED);
|
||||||
|
if (isDeprecated1==true && isDeprecated2==false)
|
||||||
|
return 1;
|
||||||
|
if (isDeprecated1==false && isDeprecated2==true)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return errorParser1.getName().compareTo(errorParser2.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
loadUserDefinedErrorParsers();
|
loadUserDefinedErrorParsers();
|
||||||
loadDefaultErrorParserIds();
|
loadDefaultErrorParserIds();
|
||||||
|
@ -122,12 +151,12 @@ public class ErrorParserExtensionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doc!=null) {
|
if (doc!=null) {
|
||||||
Set<IErrorParserNamed> errorParsers = new LinkedHashSet<IErrorParserNamed>();
|
Set<IErrorParserNamed> sortedErrorParsers = new TreeSet<IErrorParserNamed>(new ErrorParserComparator());
|
||||||
loadErrorParserExtensions(doc, errorParsers);
|
loadErrorParserExtensions(doc, sortedErrorParsers);
|
||||||
|
|
||||||
if (errorParsers.size()>0) {
|
if (sortedErrorParsers.size()>0) {
|
||||||
fUserDefinedErrorParsers = new LinkedHashMap<String, IErrorParserNamed>();
|
fUserDefinedErrorParsers = new LinkedHashMap<String, IErrorParserNamed>();
|
||||||
for (IErrorParserNamed errorParser : errorParsers) {
|
for (IErrorParserNamed errorParser : sortedErrorParsers) {
|
||||||
fUserDefinedErrorParsers.put(errorParser.getId(), errorParser);
|
fUserDefinedErrorParsers.put(errorParser.getId(), errorParser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,34 +241,7 @@ public class ErrorParserExtensionManager {
|
||||||
* @noreference This method is not intended to be referenced by clients.
|
* @noreference This method is not intended to be referenced by clients.
|
||||||
*/
|
*/
|
||||||
synchronized public static void loadErrorParserExtensions() {
|
synchronized public static void loadErrorParserExtensions() {
|
||||||
Set<IErrorParserNamed> sortedErrorParsers = new TreeSet<IErrorParserNamed>(new Comparator<IErrorParserNamed>() {
|
Set<IErrorParserNamed> sortedErrorParsers = new TreeSet<IErrorParserNamed>(new ErrorParserComparator());
|
||||||
// For the error parsers taken from platform extensions following sorting order applies:
|
|
||||||
// - first regular error parsers
|
|
||||||
// - then deprecated ones
|
|
||||||
// - then contributed by test plugin
|
|
||||||
// inside the same category sort by parser name
|
|
||||||
public int compare(IErrorParserNamed errorParser1, IErrorParserNamed errorParser2) {
|
|
||||||
final String TEST_PLUGIN_ID="org.eclipse.cdt.core.tests"; //$NON-NLS-1$
|
|
||||||
final String DEPRECATED=CCorePlugin.getResourceString("CCorePlugin.Deprecated"); //$NON-NLS-1$
|
|
||||||
|
|
||||||
boolean isTestPlugin1 = errorParser1.getId().startsWith(TEST_PLUGIN_ID);
|
|
||||||
boolean isTestPlugin2 = errorParser2.getId().startsWith(TEST_PLUGIN_ID);
|
|
||||||
if (isTestPlugin1==true && isTestPlugin2==false)
|
|
||||||
return 1;
|
|
||||||
if (isTestPlugin1==false && isTestPlugin2==true)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
boolean isDeprecated1 = errorParser1.getName().contains(DEPRECATED);
|
|
||||||
boolean isDeprecated2 = errorParser2.getName().contains(DEPRECATED);
|
|
||||||
if (isDeprecated1==true && isDeprecated2==false)
|
|
||||||
return 1;
|
|
||||||
if (isDeprecated1==false && isDeprecated2==true)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return errorParser1.getName().compareTo(errorParser2.getName());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
loadErrorParserExtensions(Platform.getExtensionRegistry(), sortedErrorParsers);
|
loadErrorParserExtensions(Platform.getExtensionRegistry(), sortedErrorParsers);
|
||||||
|
|
||||||
fExtensionErrorParsers.clear();
|
fExtensionErrorParsers.clear();
|
||||||
|
@ -287,15 +289,44 @@ public class ErrorParserExtensionManager {
|
||||||
*/
|
*/
|
||||||
private static void recalculateAvailableErrorParsers() {
|
private static void recalculateAvailableErrorParsers() {
|
||||||
fAvailableErrorParsers.clear();
|
fAvailableErrorParsers.clear();
|
||||||
if (fUserDefinedErrorParsers!=null) {
|
// put default parsers on top of the list
|
||||||
fAvailableErrorParsers.putAll(fUserDefinedErrorParsers);
|
List<String> ids = new ArrayList<String>();
|
||||||
}
|
if (fDefaultErrorParserIds!=null) {
|
||||||
for (IErrorParserNamed errorParser : fExtensionErrorParsers.values()) {
|
for (String id : fDefaultErrorParserIds) {
|
||||||
String id = errorParser.getId();
|
IErrorParserNamed errorParser = null;
|
||||||
if (!fAvailableErrorParsers.containsKey(id)) {
|
if (fUserDefinedErrorParsers!=null) {
|
||||||
fAvailableErrorParsers.put(id, errorParser);
|
errorParser = fUserDefinedErrorParsers.get(id);
|
||||||
|
}
|
||||||
|
if (errorParser==null) {
|
||||||
|
errorParser = fExtensionErrorParsers.get(id);
|
||||||
|
}
|
||||||
|
if (errorParser!=null) {
|
||||||
|
fAvailableErrorParsers.put(id, errorParser);
|
||||||
|
ids.add(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// then the rest in the order defined by comparator
|
||||||
|
Set<IErrorParserNamed> sortedErrorParsers = new TreeSet<IErrorParserNamed>(new ErrorParserComparator());
|
||||||
|
|
||||||
|
if (fUserDefinedErrorParsers!=null) {
|
||||||
|
for (String id : fUserDefinedErrorParsers.keySet()) {
|
||||||
|
if (!ids.contains(id)) {
|
||||||
|
IErrorParserNamed errorParser = fUserDefinedErrorParsers.get(id);
|
||||||
|
sortedErrorParsers.add(errorParser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String id : fExtensionErrorParsers.keySet()) {
|
||||||
|
if (!ids.contains(id)) {
|
||||||
|
IErrorParserNamed errorParser = fExtensionErrorParsers.get(id);
|
||||||
|
sortedErrorParsers.add(errorParser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (IErrorParserNamed errorParser : sortedErrorParsers) {
|
||||||
|
fAvailableErrorParsers.put(errorParser.getId(), errorParser);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -456,6 +487,7 @@ public class ErrorParserExtensionManager {
|
||||||
transformer.transform(source, result);
|
transformer.transform(source, result);
|
||||||
|
|
||||||
fileStream.close();
|
fileStream.close();
|
||||||
|
ResourcesUtil.refreshWorkspaceFiles(URIUtil.toURI(location));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -627,7 +659,7 @@ public class ErrorParserExtensionManager {
|
||||||
* Return error parser as stored in internal list.
|
* Return error parser as stored in internal list.
|
||||||
*
|
*
|
||||||
* @noreference This method is not intended to be referenced by clients.
|
* @noreference This method is not intended to be referenced by clients.
|
||||||
* Use {@link #getErrorParserCopy(String)} instead.
|
* Use {@link #getErrorParserCopy(String, boolean)} instead.
|
||||||
*
|
*
|
||||||
* @param id - ID of error parser
|
* @param id - ID of error parser
|
||||||
* @return internal instance of error parser
|
* @return internal instance of error parser
|
||||||
|
@ -662,9 +694,11 @@ public class ErrorParserExtensionManager {
|
||||||
if (errorParsers==null) {
|
if (errorParsers==null) {
|
||||||
fUserDefinedErrorParsers = null;
|
fUserDefinedErrorParsers = null;
|
||||||
} else {
|
} else {
|
||||||
|
Set<IErrorParserNamed> sortedErrorParsers = new TreeSet<IErrorParserNamed>(new ErrorParserComparator());
|
||||||
|
sortedErrorParsers.addAll(Arrays.asList(errorParsers));
|
||||||
fUserDefinedErrorParsers= new LinkedHashMap<String, IErrorParserNamed>();
|
fUserDefinedErrorParsers= new LinkedHashMap<String, IErrorParserNamed>();
|
||||||
// set customized list
|
// set customized list
|
||||||
for (IErrorParserNamed errorParser : errorParsers) {
|
for (IErrorParserNamed errorParser : sortedErrorParsers) {
|
||||||
fUserDefinedErrorParsers.put(errorParser.getId(), errorParser);
|
fUserDefinedErrorParsers.put(errorParser.getId(), errorParser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -686,6 +720,15 @@ public class ErrorParserExtensionManager {
|
||||||
return fExtensionErrorParsers.keySet().toArray(new String[0]);
|
return fExtensionErrorParsers.keySet().toArray(new String[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return default error parsers IDs to be used if error parser list is empty.
|
||||||
|
*/
|
||||||
|
public static String[] getUserDefinedErrorParserIds() {
|
||||||
|
if (fUserDefinedErrorParsers!=null)
|
||||||
|
return fUserDefinedErrorParsers.keySet().toArray(new String[0]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set and store default error parsers IDs to be used if error parser list is empty.
|
* Set and store default error parsers IDs to be used if error parser list is empty.
|
||||||
*
|
*
|
||||||
|
@ -711,6 +754,7 @@ public class ErrorParserExtensionManager {
|
||||||
} else {
|
} else {
|
||||||
fDefaultErrorParserIds = new ArrayList<String>(Arrays.asList(ids));
|
fDefaultErrorParserIds = new ArrayList<String>(Arrays.asList(ids));
|
||||||
}
|
}
|
||||||
|
recalculateAvailableErrorParsers();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -725,11 +769,12 @@ public class ErrorParserExtensionManager {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param id - ID of error parser
|
* @param id - ID of error parser
|
||||||
|
* @param isExtension - if {@code true} get unmodified copy of error parser defined as extension
|
||||||
* @return cloned copy of error parser. Note that {@link ErrorParserNamedWrapper} returns
|
* @return cloned copy of error parser. Note that {@link ErrorParserNamedWrapper} returns
|
||||||
* shallow copy with the same instance of underlying error parser.
|
* shallow copy with the same instance of underlying error parser.
|
||||||
*/
|
*/
|
||||||
public static IErrorParserNamed getErrorParserCopy(String id) {
|
public static IErrorParserNamed getErrorParserCopy(String id, boolean isExtension) {
|
||||||
IErrorParserNamed errorParser = fAvailableErrorParsers.get(id);
|
IErrorParserNamed errorParser = isExtension ? fExtensionErrorParsers.get(id) : fAvailableErrorParsers.get(id);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (errorParser instanceof RegexErrorParser) {
|
if (errorParser instanceof RegexErrorParser) {
|
||||||
|
@ -743,5 +788,4 @@ public class ErrorParserExtensionManager {
|
||||||
return errorParser;
|
return errorParser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
BIN
core/org.eclipse.cdt.ui/icons/obj16/extension_obj.gif
Normal file
BIN
core/org.eclipse.cdt.ui/icons/obj16/extension_obj.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 186 B |
BIN
core/org.eclipse.cdt.ui/icons/obj16/flask.png
Normal file
BIN
core/org.eclipse.cdt.ui/icons/obj16/flask.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 481 B |
BIN
core/org.eclipse.cdt.ui/icons/obj16/person-me.gif
Normal file
BIN
core/org.eclipse.cdt.ui/icons/obj16/person-me.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 307 B |
|
@ -143,6 +143,7 @@ public class Messages extends NLS {
|
||||||
public static String ErrorParsTab_label_DefaultRegexErrorParserName;
|
public static String ErrorParsTab_label_DefaultRegexErrorParserName;
|
||||||
public static String ErrorParsTab_label_EnterName;
|
public static String ErrorParsTab_label_EnterName;
|
||||||
public static String ErrorParsTab_message_ConfirmReset;
|
public static String ErrorParsTab_message_ConfirmReset;
|
||||||
|
public static String ErrorParsTab_Reset;
|
||||||
public static String ErrorParsTab_title_Add;
|
public static String ErrorParsTab_title_Add;
|
||||||
public static String ErrorParsTab_title_ConfirmReset;
|
public static String ErrorParsTab_title_ConfirmReset;
|
||||||
public static String ErrorParsTab_title_Edit;
|
public static String ErrorParsTab_title_Edit;
|
||||||
|
|
|
@ -209,6 +209,7 @@ ErrorParsTab_error_IllegalCharacter=Special character ''{0}'' is not allowed
|
||||||
ErrorParsTab_label_EnterName=Enter name of new error parser:
|
ErrorParsTab_label_EnterName=Enter name of new error parser:
|
||||||
ErrorParsTab_label_DefaultRegexErrorParserName=Regex Error Parser
|
ErrorParsTab_label_DefaultRegexErrorParserName=Regex Error Parser
|
||||||
ErrorParsTab_message_ConfirmReset=Are you sure you want to delete all customized error parsers?
|
ErrorParsTab_message_ConfirmReset=Are you sure you want to delete all customized error parsers?
|
||||||
|
ErrorParsTab_Reset=Reset
|
||||||
ErrorParsTab_title_Add=Add Regex Error Parser
|
ErrorParsTab_title_Add=Add Regex Error Parser
|
||||||
ErrorParsTab_title_ConfirmReset=Confirm Resetting Error Parsers
|
ErrorParsTab_title_ConfirmReset=Confirm Resetting Error Parsers
|
||||||
ErrorParsTab_title_Edit=Edit Regex Error Parser name
|
ErrorParsTab_title_Edit=Edit Regex Error Parser name
|
||||||
|
|
|
@ -39,6 +39,10 @@ import org.eclipse.swt.graphics.Image;
|
||||||
* <br>
|
* <br>
|
||||||
* and {@link org.eclipse.ui.ide.IDE.SharedImages}.
|
* and {@link org.eclipse.ui.ide.IDE.SharedImages}.
|
||||||
* </p>
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* Note that org.eclipse.cdt.ui.tests.misc.CDTSharedImagesTests will verify
|
||||||
|
* existence of the images defined here.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @noextend This class is not intended to be subclassed by clients.
|
* @noextend This class is not intended to be subclassed by clients.
|
||||||
* @noinstantiate This class is not intended to be instantiated by clients.
|
* @noinstantiate This class is not intended to be instantiated by clients.
|
||||||
|
@ -115,6 +119,10 @@ public class CDTSharedImages {
|
||||||
public static final String IMG_OBJS_IMPORT_SETTINGS = "icons/obj16/import_settings_wiz.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_IMPORT_SETTINGS = "icons/obj16/import_settings_wiz.gif"; //$NON-NLS-1$
|
||||||
public static final String IMG_OBJS_EXPORT_SETTINGS = "icons/obj16/export_settings_wiz.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_EXPORT_SETTINGS = "icons/obj16/export_settings_wiz.gif"; //$NON-NLS-1$
|
||||||
public static final String IMG_OBJS_INCCONT = "icons/obj16/incc_obj.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_INCCONT = "icons/obj16/incc_obj.gif"; //$NON-NLS-1$
|
||||||
|
public static final String IMG_OBJS_EXTENSION = "icons/obj16/extension_obj.gif"; //$NON-NLS-1$
|
||||||
|
public static final String IMG_OBJS_USER = "icons/obj16/person-me.gif"; //$NON-NLS-1$
|
||||||
|
public static final String IMG_OBJS_CDT_TESTING = "icons/obj16/flask.png"; //$NON-NLS-1$
|
||||||
|
|
||||||
public static final String IMG_OBJS_NLS_NEVER_TRANSLATE = "icons/obj16/never_translate.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_NLS_NEVER_TRANSLATE = "icons/obj16/never_translate.gif"; //$NON-NLS-1$
|
||||||
|
|
||||||
// Breakpoint images
|
// Breakpoint images
|
||||||
|
@ -169,6 +177,8 @@ public class CDTSharedImages {
|
||||||
// overlays
|
// overlays
|
||||||
public static final String IMG_OVR_WARNING = "icons/ovr16/warning_co.gif"; //$NON-NLS-1$
|
public static final String IMG_OVR_WARNING = "icons/ovr16/warning_co.gif"; //$NON-NLS-1$
|
||||||
public static final String IMG_OVR_ERROR = "icons/ovr16/error_co.gif"; //$NON-NLS-1$
|
public static final String IMG_OVR_ERROR = "icons/ovr16/error_co.gif"; //$NON-NLS-1$
|
||||||
|
public static final String IMG_OVR_SETTING = "icons/ovr16/setting_nav.gif"; //$NON-NLS-1$
|
||||||
|
public static final String IMG_OVR_INACTIVE = "icons/ovr16/inactive_co.gif"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The method finds URL of the image corresponding to the key which could be project-relative path
|
* The method finds URL of the image corresponding to the key which could be project-relative path
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.ui.dialogs;
|
package org.eclipse.cdt.ui.dialogs;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.runtime.Assert;
|
import org.eclipse.core.runtime.Assert;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
@ -90,6 +93,8 @@ public final class RegexErrorParserOptionPage extends AbstractCOptionPage {
|
||||||
private RegexErrorParser fErrorParser;
|
private RegexErrorParser fErrorParser;
|
||||||
private boolean fEditable;
|
private boolean fEditable;
|
||||||
|
|
||||||
|
private List<Listener> fListeners = new ArrayList<Listener>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides generic implementation for overridden methods.
|
* Provides generic implementation for overridden methods.
|
||||||
* One purpose is to make it easier for subclasses to operate with {@link RegexErrorPattern},
|
* One purpose is to make it easier for subclasses to operate with {@link RegexErrorPattern},
|
||||||
|
@ -245,6 +250,7 @@ public final class RegexErrorParserOptionPage extends AbstractCOptionPage {
|
||||||
fErrorParser = null;
|
fErrorParser = null;
|
||||||
|
|
||||||
initializeTable();
|
initializeTable();
|
||||||
|
fireEvent();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -673,9 +679,11 @@ public final class RegexErrorParserOptionPage extends AbstractCOptionPage {
|
||||||
moveItem(false);
|
moveItem(false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
applyPatterns();
|
||||||
updateButtons();
|
updateButtons();
|
||||||
|
fireEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addErrorPattern() {
|
private void addErrorPattern() {
|
||||||
|
@ -714,13 +722,8 @@ public final class RegexErrorParserOptionPage extends AbstractCOptionPage {
|
||||||
fTableViewer.insert(item, newPos);
|
fTableViewer.insert(item, newPos);
|
||||||
fTable.setSelection(newPos);
|
fTable.setSelection(newPos);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
private void applyPatterns() {
|
||||||
*
|
|
||||||
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performApply(org.eclipse.core.runtime.IProgressMonitor)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void performApply(IProgressMonitor monitor) throws CoreException {
|
|
||||||
if (fErrorParser!=null && fEditable) {
|
if (fErrorParser!=null && fEditable) {
|
||||||
fErrorParser.clearPatterns();
|
fErrorParser.clearPatterns();
|
||||||
for (TableItem tableItem : fTable.getItems()) {
|
for (TableItem tableItem : fTable.getItems()) {
|
||||||
|
@ -732,6 +735,16 @@ public final class RegexErrorParserOptionPage extends AbstractCOptionPage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performApply(org.eclipse.core.runtime.IProgressMonitor)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void performApply(IProgressMonitor monitor) throws CoreException {
|
||||||
|
applyPatterns();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -741,4 +754,24 @@ public final class RegexErrorParserOptionPage extends AbstractCOptionPage {
|
||||||
public void performDefaults() {
|
public void performDefaults() {
|
||||||
// ErrorParsTas.performDefaults() will do all the work
|
// ErrorParsTas.performDefaults() will do all the work
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 5.3
|
||||||
|
*/
|
||||||
|
public void addListener(Listener listener){
|
||||||
|
fListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 5.3
|
||||||
|
*/
|
||||||
|
public void removeListener(Listener listener){
|
||||||
|
fListeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fireEvent() {
|
||||||
|
for (Listener listener : fListeners) {
|
||||||
|
listener.handleEvent(new Event());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,13 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.ui.newui;
|
package org.eclipse.cdt.ui.newui;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -28,6 +30,7 @@ import org.eclipse.jface.layout.PixelConverter;
|
||||||
import org.eclipse.jface.viewers.CheckStateChangedEvent;
|
import org.eclipse.jface.viewers.CheckStateChangedEvent;
|
||||||
import org.eclipse.jface.viewers.CheckboxTableViewer;
|
import org.eclipse.jface.viewers.CheckboxTableViewer;
|
||||||
import org.eclipse.jface.viewers.ICheckStateListener;
|
import org.eclipse.jface.viewers.ICheckStateListener;
|
||||||
|
import org.eclipse.jface.viewers.IDecoration;
|
||||||
import org.eclipse.jface.viewers.IStructuredContentProvider;
|
import org.eclipse.jface.viewers.IStructuredContentProvider;
|
||||||
import org.eclipse.jface.viewers.LabelProvider;
|
import org.eclipse.jface.viewers.LabelProvider;
|
||||||
import org.eclipse.jface.viewers.Viewer;
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
@ -37,9 +40,12 @@ import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.custom.SashForm;
|
import org.eclipse.swt.custom.SashForm;
|
||||||
import org.eclipse.swt.events.SelectionAdapter;
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
import org.eclipse.swt.events.SelectionEvent;
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.graphics.Image;
|
||||||
import org.eclipse.swt.layout.GridData;
|
import org.eclipse.swt.layout.GridData;
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Event;
|
||||||
|
import org.eclipse.swt.widgets.Listener;
|
||||||
import org.eclipse.swt.widgets.Table;
|
import org.eclipse.swt.widgets.Table;
|
||||||
import org.eclipse.swt.widgets.TableItem;
|
import org.eclipse.swt.widgets.TableItem;
|
||||||
import org.eclipse.ui.PlatformUI;
|
import org.eclipse.ui.PlatformUI;
|
||||||
|
@ -47,12 +53,14 @@ import org.osgi.service.prefs.BackingStoreException;
|
||||||
|
|
||||||
import com.ibm.icu.text.MessageFormat;
|
import com.ibm.icu.text.MessageFormat;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.ErrorParserManager;
|
import org.eclipse.cdt.core.ErrorParserManager;
|
||||||
import org.eclipse.cdt.core.IErrorParserNamed;
|
import org.eclipse.cdt.core.IErrorParserNamed;
|
||||||
import org.eclipse.cdt.core.errorparsers.RegexErrorParser;
|
import org.eclipse.cdt.core.errorparsers.RegexErrorParser;
|
||||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||||
import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription;
|
import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription;
|
||||||
import org.eclipse.cdt.core.settings.model.ICResourceDescription;
|
import org.eclipse.cdt.core.settings.model.ICResourceDescription;
|
||||||
|
import org.eclipse.cdt.ui.CDTSharedImages;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.dialogs.ICOptionPage;
|
import org.eclipse.cdt.ui.dialogs.ICOptionPage;
|
||||||
import org.eclipse.cdt.ui.dialogs.IInputStatusValidator;
|
import org.eclipse.cdt.ui.dialogs.IInputStatusValidator;
|
||||||
|
@ -87,6 +95,7 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
MOVEUP_STR,
|
MOVEUP_STR,
|
||||||
MOVEDOWN_STR,
|
MOVEDOWN_STR,
|
||||||
};
|
};
|
||||||
|
private static final String RESET_STR = Messages.ErrorParsTab_Reset;
|
||||||
|
|
||||||
private static final String OOPS = "OOPS"; //$NON-NLS-1$
|
private static final String OOPS = "OOPS"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
@ -94,6 +103,8 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
private CheckboxTableViewer fTableViewer;
|
private CheckboxTableViewer fTableViewer;
|
||||||
private ICConfigurationDescription fCfgDesc;
|
private ICConfigurationDescription fCfgDesc;
|
||||||
|
|
||||||
|
private static Map<String, IErrorParserNamed> fExtensionErrorParsers = null;
|
||||||
|
|
||||||
private final Map<String, IErrorParserNamed> fAvailableErrorParsers = new LinkedHashMap<String, IErrorParserNamed>();
|
private final Map<String, IErrorParserNamed> fAvailableErrorParsers = new LinkedHashMap<String, IErrorParserNamed>();
|
||||||
private final Map<String, ICOptionPage> fOptionsPageMap = new HashMap<String, ICOptionPage>();
|
private final Map<String, ICOptionPage> fOptionsPageMap = new HashMap<String, ICOptionPage>();
|
||||||
private ICOptionPage fCurrentOptionsPage = null;
|
private ICOptionPage fCurrentOptionsPage = null;
|
||||||
|
@ -156,6 +167,34 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
}
|
}
|
||||||
return OOPS;
|
return OOPS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Image getImage(Object element) {
|
||||||
|
final String TEST_PLUGIN_ID = "org.eclipse.cdt.core.tests"; //$NON-NLS-1$
|
||||||
|
final String DEPRECATED = CCorePlugin.getResourceString("CCorePlugin.Deprecated"); //$NON-NLS-1$
|
||||||
|
if (element instanceof String) {
|
||||||
|
String id = (String) element;
|
||||||
|
String[] extIds = ErrorParserManager.getErrorParserExtensionIds();
|
||||||
|
if (Arrays.asList(extIds).contains(id)) {
|
||||||
|
String imageKey = CDTSharedImages.IMG_OBJS_EXTENSION;
|
||||||
|
if (id.startsWith(TEST_PLUGIN_ID))
|
||||||
|
imageKey = CDTSharedImages.IMG_OBJS_CDT_TESTING;
|
||||||
|
|
||||||
|
String[] overlayKeys = new String[5];
|
||||||
|
IErrorParserNamed errorParser = fAvailableErrorParsers.get(id);
|
||||||
|
IErrorParserNamed errorParserExt = fExtensionErrorParsers.get(id);
|
||||||
|
if (!errorParser.equals(errorParserExt)) {
|
||||||
|
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING;
|
||||||
|
} else if (errorParser.getName().contains(DEPRECATED)) {
|
||||||
|
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_INACTIVE;
|
||||||
|
}
|
||||||
|
return CDTSharedImages.getImageOverlaid(imageKey, overlayKeys);
|
||||||
|
}
|
||||||
|
return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_USER);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
fTableViewer.addCheckStateListener(new ICheckStateListener() {
|
fTableViewer.addCheckStateListener(new ICheckStateListener() {
|
||||||
|
@ -191,6 +230,14 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initMapParsers() {
|
private void initMapParsers() {
|
||||||
|
if (fExtensionErrorParsers==null) {
|
||||||
|
fExtensionErrorParsers = new LinkedHashMap<String, IErrorParserNamed>();
|
||||||
|
String[] idsExt = ErrorParserManager.getErrorParserExtensionIds();
|
||||||
|
for (String idExt : idsExt) {
|
||||||
|
IErrorParserNamed errorParserExt = ErrorParserManager.getErrorParserExtensionCopy(idExt);
|
||||||
|
fExtensionErrorParsers.put(idExt, errorParserExt);
|
||||||
|
}
|
||||||
|
}
|
||||||
fAvailableErrorParsers.clear();
|
fAvailableErrorParsers.clear();
|
||||||
fOptionsPageMap.clear();
|
fOptionsPageMap.clear();
|
||||||
for (String id : ErrorParserManager.getErrorParserAvailableIds()) {
|
for (String id : ErrorParserManager.getErrorParserAvailableIds()) {
|
||||||
|
@ -220,7 +267,7 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
displaySelectedOptionPage();
|
displaySelectedOptionPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeOptionsPage(String id) {
|
private void initializeOptionsPage(final String id) {
|
||||||
IErrorParserNamed errorParser = fAvailableErrorParsers.get(id);
|
IErrorParserNamed errorParser = fAvailableErrorParsers.get(id);
|
||||||
if (errorParser!=null) {
|
if (errorParser!=null) {
|
||||||
String name = errorParser.getName();
|
String name = errorParser.getName();
|
||||||
|
@ -229,6 +276,12 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
if (errorParser instanceof RegexErrorParser) {
|
if (errorParser instanceof RegexErrorParser) {
|
||||||
// allow to edit only for Build Settings Preference Page (where cfgd==null)
|
// allow to edit only for Build Settings Preference Page (where cfgd==null)
|
||||||
RegexErrorParserOptionPage optionsPage = new RegexErrorParserOptionPage((RegexErrorParser) errorParser, isErrorParsersEditable());
|
RegexErrorParserOptionPage optionsPage = new RegexErrorParserOptionPage((RegexErrorParser) errorParser, isErrorParsersEditable());
|
||||||
|
optionsPage.addListener(new Listener() {
|
||||||
|
public void handleEvent(Event event) {
|
||||||
|
fTableViewer.refresh(id);
|
||||||
|
updateButtons();
|
||||||
|
}
|
||||||
|
});
|
||||||
fOptionsPageMap.put(id, optionsPage);
|
fOptionsPageMap.put(id, optionsPage);
|
||||||
optionsPage.setContainer(page);
|
optionsPage.setContainer(page);
|
||||||
optionsPage.createControl(fCompositeForOptionsPage);
|
optionsPage.createControl(fCompositeForOptionsPage);
|
||||||
|
@ -382,15 +435,25 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fTableViewer.remove(fTableViewer.getElementAt(n));
|
String id = (String)fTableViewer.getElementAt(n);
|
||||||
|
if (fExtensionErrorParsers.containsKey(id)) {
|
||||||
|
// Reset
|
||||||
|
fAvailableErrorParsers.put(id, ErrorParserManager.getErrorParserExtensionCopy(id));
|
||||||
|
fTableViewer.refresh(id);
|
||||||
|
initializeOptionsPage(id);
|
||||||
|
displaySelectedOptionPage();
|
||||||
|
} else {
|
||||||
|
// Delete
|
||||||
|
fTableViewer.remove(id);
|
||||||
|
|
||||||
|
int last = fTable.getItemCount() - 1;
|
||||||
|
if (n>last)
|
||||||
|
n = last;
|
||||||
|
if (n>=0)
|
||||||
|
fTable.setSelection(n);
|
||||||
|
|
||||||
int last = fTable.getItemCount() - 1;
|
saveChecked();
|
||||||
if (n>last)
|
}
|
||||||
n = last;
|
|
||||||
if (n>=0)
|
|
||||||
fTable.setSelection(n);
|
|
||||||
|
|
||||||
saveChecked();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -416,6 +479,15 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if error parser with this id shown to user differs from error parser defined as extension.
|
||||||
|
*/
|
||||||
|
private boolean isModified(String id) {
|
||||||
|
IErrorParserNamed errorParser = fAvailableErrorParsers.get(id);
|
||||||
|
IErrorParserNamed errorParserExt = fExtensionErrorParsers.get(id);
|
||||||
|
return ! errorParser.equals(errorParserExt);
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.ui.newui.AbstractCPropertyTab#updateButtons()
|
* @see org.eclipse.cdt.ui.newui.AbstractCPropertyTab#updateButtons()
|
||||||
*/
|
*/
|
||||||
|
@ -427,11 +499,17 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
boolean selected = pos >= 0 && pos <= last;
|
boolean selected = pos >= 0 && pos <= last;
|
||||||
String id = (String)fTableViewer.getElementAt(pos);
|
String id = (String)fTableViewer.getElementAt(pos);
|
||||||
|
|
||||||
|
boolean isExtensionId = isExtensionId(id);
|
||||||
|
boolean canDelete = !isExtensionId && isErrorParsersEditable();
|
||||||
|
boolean canReset = isExtensionId && isErrorParsersEditable() && isModified(id);
|
||||||
|
|
||||||
|
buttonSetText(BUTTON_DELETE, isExtensionId ? RESET_STR : DEL_STR);
|
||||||
|
|
||||||
buttonSetEnabled(BUTTON_ADD, isErrorParsersEditable());
|
buttonSetEnabled(BUTTON_ADD, isErrorParsersEditable());
|
||||||
buttonSetEnabled(BUTTON_EDIT, isErrorParsersEditable() && selected);
|
buttonSetEnabled(BUTTON_EDIT, isErrorParsersEditable() && selected);
|
||||||
buttonSetEnabled(BUTTON_DELETE, isErrorParsersEditable() && selected && !isExtensionId(id));
|
buttonSetEnabled(BUTTON_DELETE, (canDelete || canReset) && selected);
|
||||||
buttonSetEnabled(BUTTON_MOVEUP, selected && pos != 0);
|
buttonSetEnabled(BUTTON_MOVEUP, selected && pos!=0);
|
||||||
buttonSetEnabled(BUTTON_MOVEDOWN, selected && pos != last);
|
buttonSetEnabled(BUTTON_MOVEDOWN, selected && pos!=last);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -471,13 +549,13 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
if (fCfgDesc==null) {
|
if (fCfgDesc==null) {
|
||||||
// Build Settings page
|
// Build Settings page
|
||||||
try {
|
try {
|
||||||
IErrorParserNamed[] errorParsers = new IErrorParserNamed[fTable.getItemCount()];
|
List<IErrorParserNamed> errorParsersList = new ArrayList<IErrorParserNamed>(fTable.getItemCount());
|
||||||
int i=0;
|
|
||||||
for (TableItem item : fTable.getItems()) {
|
for (TableItem item : fTable.getItems()) {
|
||||||
if (item.getData() instanceof String) {
|
if (item.getData() instanceof String) {
|
||||||
String id = (String) item.getData();
|
String id = (String) item.getData();
|
||||||
errorParsers[i] = fAvailableErrorParsers.get(id);
|
if (isModified(id)) {
|
||||||
i++;
|
errorParsersList.add(fAvailableErrorParsers.get(id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,8 +563,8 @@ public class ErrorParsTab extends AbstractCPropertyTab {
|
||||||
String[] checkedErrorParserIds = new String[checkedElements.length];
|
String[] checkedErrorParserIds = new String[checkedElements.length];
|
||||||
System.arraycopy(checkedElements, 0, checkedErrorParserIds, 0, checkedElements.length);
|
System.arraycopy(checkedElements, 0, checkedErrorParserIds, 0, checkedElements.length);
|
||||||
|
|
||||||
ErrorParserManager.setUserDefinedErrorParsers(errorParsers);
|
|
||||||
ErrorParserManager.setDefaultErrorParserIds(checkedErrorParserIds);
|
ErrorParserManager.setDefaultErrorParserIds(checkedErrorParserIds);
|
||||||
|
ErrorParserManager.setUserDefinedErrorParsers(errorParsersList.toArray(new IErrorParserNamed[errorParsersList.size()]));
|
||||||
} catch (BackingStoreException e) {
|
} catch (BackingStoreException e) {
|
||||||
CUIPlugin.log(Messages.ErrorParsTab_error_OnApplyingSettings, e);
|
CUIPlugin.log(Messages.ErrorParsTab_error_OnApplyingSettings, e);
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue