mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-04 14:55:41 +02:00
[Arduino] Force reindex when changing build configs.
Also fixes duplicate markers being created by the error parser. Change-Id: I02d2430df40e62d8a329bfe0ea8728e06afca059
This commit is contained in:
parent
eca5073324
commit
d3e0ebc390
3 changed files with 34 additions and 15 deletions
|
@ -55,6 +55,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
|||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.content.IContentType;
|
||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
||||
import org.osgi.service.prefs.BackingStoreException;
|
||||
|
||||
|
@ -148,6 +149,9 @@ public class ArduinoBuildConfiguration {
|
|||
IProjectDescription projectDesc = project.getDescription();
|
||||
projectDesc.setActiveBuildConfig(config.getName());
|
||||
project.setDescription(projectDesc, monitor);
|
||||
|
||||
// Reindex - assuming for now each config has different compiler settings
|
||||
CCorePlugin.getIndexManager().reindex(CoreModel.getDefault().create(project));
|
||||
}
|
||||
|
||||
public IEclipsePreferences getSettings() {
|
||||
|
@ -534,20 +538,25 @@ public class ArduinoBuildConfiguration {
|
|||
}
|
||||
|
||||
public IScannerInfo getScannerInfo(IResource resource) throws CoreException {
|
||||
// what language is this resource and pick the right path;
|
||||
switch (CCorePlugin.getContentType(resource.getProject(), resource.getName()).getId()) {
|
||||
case CCorePlugin.CONTENT_TYPE_CXXSOURCE:
|
||||
case CCorePlugin.CONTENT_TYPE_CXXHEADER:
|
||||
if (cppScannerInfo == null) {
|
||||
cppScannerInfo = calculateScannerInfo("recipe.cpp.o.pattern", resource); //$NON-NLS-1$
|
||||
IContentType contentType = CCorePlugin.getContentType(resource.getProject(), resource.getName());
|
||||
if (contentType != null) {
|
||||
// what language is this resource and pick the right path;
|
||||
switch (contentType.getId()) {
|
||||
case CCorePlugin.CONTENT_TYPE_CXXSOURCE:
|
||||
case CCorePlugin.CONTENT_TYPE_CXXHEADER:
|
||||
if (cppScannerInfo == null) {
|
||||
cppScannerInfo = calculateScannerInfo("recipe.cpp.o.pattern", resource); //$NON-NLS-1$
|
||||
}
|
||||
return cppScannerInfo;
|
||||
default:
|
||||
if (cScannerInfo == null) {
|
||||
cScannerInfo = calculateScannerInfo("recipe.c.o.pattern", resource); //$NON-NLS-1$
|
||||
}
|
||||
return cScannerInfo;
|
||||
}
|
||||
return cppScannerInfo;
|
||||
default:
|
||||
if (cScannerInfo == null) {
|
||||
cScannerInfo = calculateScannerInfo("recipe.c.o.pattern", resource); //$NON-NLS-1$
|
||||
}
|
||||
return cScannerInfo;
|
||||
}
|
||||
// use the cpp scanner info if all else fails
|
||||
return cppScannerInfo;
|
||||
}
|
||||
|
||||
public void clearScannerInfoCache() {
|
||||
|
@ -643,7 +652,7 @@ public class ArduinoBuildConfiguration {
|
|||
|
||||
@Override
|
||||
protected String getMessage(Matcher matcher) {
|
||||
return matcher.group(5);
|
||||
return matcher.group(matcher.groupCount());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,6 +8,7 @@ import org.eclipse.cdt.core.model.ICModelMarker;
|
|||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IMarker;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
public abstract class ArduinoErrorParser extends ArduinoConsoleParser {
|
||||
|
@ -38,13 +39,21 @@ public abstract class ArduinoErrorParser extends ArduinoConsoleParser {
|
|||
|
||||
protected abstract int getLinkLength(Matcher matcher);
|
||||
|
||||
public IMarker generateMarker(IFolder buildDirectory, String text) {
|
||||
public IMarker generateMarker(IFolder buildDirectory, String text) throws CoreException {
|
||||
Matcher matcher = errorPattern.matcher(text);
|
||||
if (matcher.matches()) {
|
||||
String fileName = getFileName(matcher);
|
||||
|
||||
IFile file = buildDirectory.getFile(fileName);
|
||||
if (file.exists()) {
|
||||
for (IMarker marker : file.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false,
|
||||
IResource.DEPTH_ZERO)) {
|
||||
if (marker.getAttribute(IMarker.SEVERITY, -1) == getSeverity(matcher)
|
||||
&& marker.getAttribute(IMarker.LINE_NUMBER, -1) == getLineNumber(matcher)
|
||||
&& marker.getAttribute(IMarker.MESSAGE, "").equals(getMessage(matcher))) { //$NON-NLS-1$
|
||||
return marker;
|
||||
}
|
||||
}
|
||||
try {
|
||||
IMarker marker = file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
|
||||
marker.setAttribute(IMarker.MESSAGE, getMessage(matcher));
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.eclipse.cdt.arduino.ui.internal.launch;
|
|||
import org.eclipse.cdt.arduino.core.internal.console.ArduinoErrorParser;
|
||||
import org.eclipse.cdt.arduino.ui.internal.Activator;
|
||||
import org.eclipse.core.resources.IMarker;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.jface.text.BadLocationException;
|
||||
import org.eclipse.ui.console.PatternMatchEvent;
|
||||
|
||||
|
@ -22,7 +23,7 @@ public class ArduinoErrorMatchListener extends ArduinoPatternMatchListener {
|
|||
event.getOffset() + marker.getAttribute(ArduinoErrorParser.LINK_OFFSET, 0),
|
||||
marker.getAttribute(ArduinoErrorParser.LINK_LENGTH, event.getLength()));
|
||||
}
|
||||
} catch (BadLocationException e) {
|
||||
} catch (BadLocationException | CoreException e) {
|
||||
Activator.log(e);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue