1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 18:56:02 +02:00

Bug 282894: [Scanner Discovery] duplicate "Error launching external scanner info generator" warning

This commit is contained in:
Andrew Gvozdev 2011-04-23 22:03:13 +00:00
parent 8f6af04d2a
commit 850a56e5d7
3 changed files with 104 additions and 110 deletions

View file

@ -18,8 +18,9 @@ import org.eclipse.osgi.util.NLS;
*/ */
public class Messages extends NLS { public class Messages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.cdt.make.core.messages.messages"; //$NON-NLS-1$ private static final String BUNDLE_NAME = "org.eclipse.cdt.make.core.messages.messages"; //$NON-NLS-1$
public static String SCMarkerGenerator_0; public static String SCMarkerGenerator_Add_Markers;
public static String SCMarkerGenerator_1; public static String SCMarkerGenerator_Error_Adding_Markers;
public static String SCMarkerGenerator_Discovery_Options_Page;
static { static {
// initialize resource bundle // initialize resource bundle
NLS.initializeMessages(BUNDLE_NAME, Messages.class); NLS.initializeMessages(BUNDLE_NAME, Messages.class);

View file

@ -8,5 +8,6 @@
# Contributors: # Contributors:
# IBM Corporation - initial API and implementation # IBM Corporation - initial API and implementation
############################################################################### ###############################################################################
SCMarkerGenerator_0=Add markers to project SCMarkerGenerator_Add_Markers=Add Scanner Discovery markers
SCMarkerGenerator_1=Error adding markers. SCMarkerGenerator_Error_Adding_Markers=Error adding markers.
SCMarkerGenerator_Discovery_Options_Page=[Discovery Options] page in project properties

View file

@ -34,123 +34,115 @@ import org.eclipse.core.runtime.jobs.Job;
*/ */
public class SCMarkerGenerator implements IMarkerGenerator { public class SCMarkerGenerator implements IMarkerGenerator {
/** /**
* *
*/ */
public SCMarkerGenerator() { public SCMarkerGenerator() {
super(); super();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.IMarkerGenerator#addMarker(org.eclipse.core.resources.IResource, int, java.lang.String, int, java.lang.String) * @see org.eclipse.cdt.core.IMarkerGenerator#addMarker(org.eclipse.core.resources.IResource, int, java.lang.String, int, java.lang.String)
*/ */
public void addMarker(IResource file, int lineNumber, String errorDesc, int severity, String errorVar) { public void addMarker(IResource file, int lineNumber, String errorDesc, int severity, String errorVar) {
ProblemMarkerInfo info = new ProblemMarkerInfo(file, lineNumber, errorDesc, severity, errorVar); ProblemMarkerInfo info = new ProblemMarkerInfo(file, lineNumber, errorDesc, severity, errorVar);
addMarker(info); addMarker(info);
} }
/* (non-Javadoc)
/* (non-Javadoc)
* @see org.eclipse.cdt.core.IMarkerGenerator#addMarker(org.eclipse.cdt.core.ProblemMarkerInfo) * @see org.eclipse.cdt.core.IMarkerGenerator#addMarker(org.eclipse.cdt.core.ProblemMarkerInfo)
*/ */
public void addMarker(final ProblemMarkerInfo problemMarkerInfo) { public void addMarker(final ProblemMarkerInfo problemMarkerInfo) {
try { // we have to add the marker in the job or we can deadlock other
IMarker[] cur = problemMarkerInfo.file.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_ONE); // threads that are responding to a resource delta by doing something
/* // that accesses the project description
* Try to find matching markers and don't put in duplicates Job markerJob = new Job(Messages.SCMarkerGenerator_Add_Markers) {
*/
if ((cur != null) && (cur.length > 0)) {
for (int i = 0; i < cur.length; i++) {
int line = ((Integer) cur[i].getAttribute(IMarker.LINE_NUMBER)).intValue();
int sev = ((Integer) cur[i].getAttribute(IMarker.SEVERITY)).intValue();
String mesg = (String) cur[i].getAttribute(IMarker.MESSAGE);
if (line == problemMarkerInfo.lineNumber && sev == mapMarkerSeverity(problemMarkerInfo.severity) && mesg.equals(problemMarkerInfo.description)) {
return;
}
}
}
// we have to add the marker in the job or we can deadlock other @Override
// threads that are responding to a resource delta by doing something protected IStatus run(IProgressMonitor monitor) {
// that accesses the project description IMarker marker;
Job markerJob = new Job(Messages.SCMarkerGenerator_0) { try {
IMarker[] cur = problemMarkerInfo.file.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_ONE);
@Override /*
protected IStatus run(IProgressMonitor monitor) { * Try to find matching markers and don't put in duplicates
IMarker marker; */
try { if ((cur != null) && (cur.length > 0)) {
marker = problemMarkerInfo.file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER); for (int i = 0; i < cur.length; i++) {
marker.setAttribute(IMarker.MESSAGE, problemMarkerInfo.description); int line = ((Integer) cur[i].getAttribute(IMarker.LINE_NUMBER)).intValue();
marker.setAttribute(IMarker.SEVERITY, mapMarkerSeverity(problemMarkerInfo.severity)); int sev = ((Integer) cur[i].getAttribute(IMarker.SEVERITY)).intValue();
marker.setAttribute(IMarker.LINE_NUMBER, problemMarkerInfo.lineNumber); String mesg = (String) cur[i].getAttribute(IMarker.MESSAGE);
marker.setAttribute(IMarker.CHAR_START, -1); if (line == problemMarkerInfo.lineNumber && sev == mapMarkerSeverity(problemMarkerInfo.severity) && mesg.equals(problemMarkerInfo.description)) {
marker.setAttribute(IMarker.CHAR_END, -1); return Status.OK_STATUS;
}
if (problemMarkerInfo.variableName != null) { }
marker.setAttribute(ICModelMarker.C_MODEL_MARKER_VARIABLE, problemMarkerInfo.variableName);
}
if (problemMarkerInfo.externalPath != null) {
marker.setAttribute(ICModelMarker.C_MODEL_MARKER_EXTERNAL_LOCATION, problemMarkerInfo.externalPath.toOSString());
}
} catch (CoreException e) {
return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), Messages.SCMarkerGenerator_1, e);
} }
} catch (CoreException e) {
return Status.OK_STATUS; return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), Messages.SCMarkerGenerator_Error_Adding_Markers, e);
} }
}; try {
marker = problemMarkerInfo.file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
marker.setAttribute(IMarker.MESSAGE, problemMarkerInfo.description);
marker.setAttribute(IMarker.SEVERITY, mapMarkerSeverity(problemMarkerInfo.severity));
marker.setAttribute(IMarker.LINE_NUMBER, problemMarkerInfo.lineNumber);
marker.setAttribute(IMarker.CHAR_START, -1);
marker.setAttribute(IMarker.CHAR_END, -1);
markerJob.setRule(problemMarkerInfo.file); if (problemMarkerInfo.variableName != null) {
markerJob.schedule(); marker.setAttribute(ICModelMarker.C_MODEL_MARKER_VARIABLE, problemMarkerInfo.variableName);
}
marker.setAttribute(IMarker.LOCATION, Messages.SCMarkerGenerator_Discovery_Options_Page);
} catch (CoreException e) {
return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), Messages.SCMarkerGenerator_Error_Adding_Markers, e);
}
} return Status.OK_STATUS;
catch (CoreException e) { }
MakeCorePlugin.log(e.getStatus()); };
}
markerJob.setRule(problemMarkerInfo.file);
markerJob.schedule();
} }
public void removeMarker(IResource file, int lineNumber, String errorDesc, int severity, String errorVar) { public void removeMarker(IResource file, int lineNumber, String errorDesc, int severity, String errorVar) {
IWorkspace workspace = file.getWorkspace(); IWorkspace workspace = file.getWorkspace();
// remove specific marker // remove specific marker
try { try {
IMarker[] markers = file.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_ONE); IMarker[] markers = file.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_ONE);
if (markers != null) { if (markers != null) {
List<IMarker> exactMarkers = new ArrayList<IMarker>(); List<IMarker> exactMarkers = new ArrayList<IMarker>();
for (int i = 0; i < markers.length; i++) { for (int i = 0; i < markers.length; i++) {
IMarker marker = markers[i]; IMarker marker = markers[i];
int location = ((Integer) marker.getAttribute(IMarker.LINE_NUMBER)).intValue(); int location = ((Integer) marker.getAttribute(IMarker.LINE_NUMBER)).intValue();
String error = (String) marker.getAttribute(IMarker.MESSAGE); String error = (String) marker.getAttribute(IMarker.MESSAGE);
int sev = ((Integer) marker.getAttribute(IMarker.SEVERITY)).intValue(); int sev = ((Integer) marker.getAttribute(IMarker.SEVERITY)).intValue();
if (location == lineNumber && if (location == lineNumber &&
errorDesc.equals(error) && errorDesc.equals(error) &&
sev == severity) { sev == severity) {
exactMarkers.add(marker); exactMarkers.add(marker);
} }
} }
if (exactMarkers.size() > 0) { if (exactMarkers.size() > 0) {
workspace.deleteMarkers(exactMarkers.toArray(new IMarker[exactMarkers.size()])); workspace.deleteMarkers(exactMarkers.toArray(new IMarker[exactMarkers.size()]));
} }
} }
} }
catch (CoreException e) { catch (CoreException e) {
MakeCorePlugin.log(e.getStatus()); MakeCorePlugin.log(e.getStatus());
} }
} }
int mapMarkerSeverity(int severity) { int mapMarkerSeverity(int severity) {
switch (severity) { switch (severity) {
case SEVERITY_ERROR_BUILD : case SEVERITY_ERROR_BUILD :
case SEVERITY_ERROR_RESOURCE : case SEVERITY_ERROR_RESOURCE :
return IMarker.SEVERITY_ERROR; return IMarker.SEVERITY_ERROR;
case SEVERITY_INFO : case SEVERITY_INFO :
return IMarker.SEVERITY_INFO; return IMarker.SEVERITY_INFO;
case SEVERITY_WARNING : case SEVERITY_WARNING :
return IMarker.SEVERITY_WARNING; return IMarker.SEVERITY_WARNING;
} }
return IMarker.SEVERITY_ERROR; return IMarker.SEVERITY_ERROR;
} }
} }