1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

builder fixes

This commit is contained in:
David Inglis 2002-10-28 14:05:29 +00:00
parent 113211c2e4
commit d6eb399569
3 changed files with 50 additions and 15 deletions

View file

@ -1,3 +1,10 @@
2002-10-28 David Inglis
* src/.../core/resources/ACBuilder.java
Added check for duplicate markers.
* src/.../internal/core/CBuilder.java
Added check for canceled build and throws OperationCanceledException exception
2002-10-25 Alain Magloire 2002-10-25 Alain Magloire
The debugger needs to know the endian of a binary. For example The debugger needs to know the endian of a binary. For example

View file

@ -5,7 +5,6 @@ package org.eclipse.cdt.core.resources;
* All Rights Reserved. * All Rights Reserved.
*/ */
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.IMarkerGenerator; import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.cdt.core.model.ICModelMarker; import org.eclipse.cdt.core.model.ICModelMarker;
@ -29,36 +28,51 @@ public abstract class ACBuilder extends IncrementalProjectBuilder implements IMa
*/ */
//public void addMarker(IFile file, int lineNumber, String errorDesc, int severity) { //public void addMarker(IFile file, int lineNumber, String errorDesc, int severity) {
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) {
try { try {
IMarker marker= file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER); IMarker[] cur = file.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_ONE);
/*
* Try to find matching markers and don't put in duplicates
*/
if ((cur != null) && (cur.length > 0)) {
for (int i = 0; i < cur.length; i++) {
if ((((Integer) cur[i].getAttribute(IMarker.LOCATION)).intValue() == lineNumber)
&& (((Integer) cur[i].getAttribute(IMarker.SEVERITY)).intValue() == severity)
&& (((String) cur[i].getAttribute(IMarker.MESSAGE)).equals(errorDesc))) {
return;
}
}
}
IMarker marker = file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
marker.setAttribute(IMarker.LOCATION, lineNumber); marker.setAttribute(IMarker.LOCATION, lineNumber);
marker.setAttribute(IMarker.MESSAGE, errorDesc); marker.setAttribute(IMarker.MESSAGE, errorDesc);
marker.setAttribute(IMarker.SEVERITY, mapMarkerSeverity(severity)); marker.setAttribute(IMarker.SEVERITY, mapMarkerSeverity(severity));
marker.setAttribute(IMarker.LINE_NUMBER, lineNumber); marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
marker.setAttribute(IMarker.CHAR_START, -1); marker.setAttribute(IMarker.CHAR_START, -1);
marker.setAttribute(IMarker.CHAR_END, -1); marker.setAttribute(IMarker.CHAR_END, -1);
if(errorVar != null) { if (errorVar != null) {
marker.setAttribute(ICModelMarker.C_MODEL_MARKER_VARIABLE, errorVar); marker.setAttribute(ICModelMarker.C_MODEL_MARKER_VARIABLE, errorVar);
} }
} catch (CoreException e) { }
catch (CoreException e) {
CCorePlugin.log(e.getStatus()); CCorePlugin.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;
} }
public abstract IPath getWorkingDirectory(); public abstract IPath getWorkingDirectory();
} }

View file

@ -29,6 +29,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor;
@ -57,6 +58,7 @@ public class CBuilder extends ACBuilder {
if ( isClean ) { if ( isClean ) {
forgetLastBuiltState(); forgetLastBuiltState();
} }
checkCancel(monitor);
return getProject().getReferencedProjects(); return getProject().getReferencedProjects();
} }
@ -64,6 +66,7 @@ public class CBuilder extends ACBuilder {
private boolean invokeMake(boolean fullBuild, IProgressMonitor monitor) { private boolean invokeMake(boolean fullBuild, IProgressMonitor monitor) {
boolean isClean = false; boolean isClean = false;
boolean fatalBuild = false; boolean fatalBuild = false;
boolean isCanceled = false;
IProject currProject= getProject(); IProject currProject= getProject();
SubProgressMonitor subMonitor = null; SubProgressMonitor subMonitor = null;
@ -117,6 +120,8 @@ public class CBuilder extends ACBuilder {
launcher.execute(makepath, userArgs, env, workingDirectory); launcher.execute(makepath, userArgs, env, workingDirectory);
if (launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(), subMonitor) != CommandLauncher.OK) if (launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(), subMonitor) != CommandLauncher.OK)
errMsg = launcher.getErrorMessage(); errMsg = launcher.getErrorMessage();
isCanceled = monitor.isCanceled();
monitor.setCanceled(false); monitor.setCanceled(false);
subMonitor = new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN); subMonitor = new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN);
subMonitor.subTask("Refresh From Local"); subMonitor.subTask("Refresh From Local");
@ -141,6 +146,7 @@ public class CBuilder extends ACBuilder {
fatalBuild = epm.reportProblems(); fatalBuild = epm.reportProblems();
} }
subMonitor.done(); subMonitor.done();
monitor.setCanceled(isCanceled);
} }
} catch (Exception e) { } catch (Exception e) {
CCorePlugin.log(e); CCorePlugin.log(e);
@ -149,6 +155,14 @@ public class CBuilder extends ACBuilder {
return (isClean || fatalBuild); return (isClean || fatalBuild);
} }
/**
* Check whether the build has been canceled.
*/
public void checkCancel(IProgressMonitor monitor) {
if (monitor != null && monitor.isCanceled())
throw new OperationCanceledException();
}
private String[] parseArguments(boolean fullBuild, String override_args) { private String[] parseArguments(boolean fullBuild, String override_args) {
ArrayList list= new ArrayList(); ArrayList list= new ArrayList();
IProject currProject = getProject(); IProject currProject = getProject();