1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-01 05:15:43 +02:00

Moved ILanguageSettingsChangeListener & ILanguageSettingsChangeEvent to

API package, same for serializeLanguageSettings() &
serializeLanguageSettingsWorkspace()
This commit is contained in:
Andrew Gvozdev 2011-11-27 20:02:02 -05:00
parent f6151d3a72
commit 689c2a5f17
17 changed files with 243 additions and 206 deletions

View file

@ -27,7 +27,6 @@ import org.eclipse.cdt.core.errorparsers.RegexErrorPattern;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.internal.core.ConsoleOutputSniffer; import org.eclipse.cdt.internal.core.ConsoleOutputSniffer;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
@ -40,7 +39,7 @@ import org.eclipse.core.runtime.jobs.Job;
/** /**
* TODO - class description * TODO - class description
* *
* Note: IErrorParser interface is used here to work around {@link ConsoleOutputSniffer} having * Note: IErrorParser interface is used here to work around {@link ConsoleOutputSniffer} having
* no access from CDT core to build packages. TODO - elaborate? * no access from CDT core to build packages. TODO - elaborate?
*/ */
@ -52,7 +51,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
private static final String LEADING_PATH_PATTERN = "\\S+[/\\\\]"; //$NON-NLS-1$ private static final String LEADING_PATH_PATTERN = "\\S+[/\\\\]"; //$NON-NLS-1$
private static final Pattern OPTIONS_PATTERN = Pattern.compile("-[^\\s\"']*(\\s*((\".*?\")|('.*?')|([^-\\s][^\\s]+)))?"); //$NON-NLS-1$ private static final Pattern OPTIONS_PATTERN = Pattern.compile("-[^\\s\"']*(\\s*((\".*?\")|('.*?')|([^-\\s][^\\s]+)))?"); //$NON-NLS-1$
private static final int OPTION_GROUP = 0; private static final int OPTION_GROUP = 0;
/** /**
* Note: design patterns to keep file group the same and matching {@link #FILE_GROUP} * Note: design patterns to keep file group the same and matching {@link #FILE_GROUP}
*/ */
@ -62,8 +61,8 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
"${COMPILER_PATTERN}.*\\s" + "(['\"])(.*\\.${EXTENSIONS_PATTERN})\\${COMPILER_GROUPS+1}(\\s.*)?[\r\n]*" // compiling quoted file "${COMPILER_PATTERN}.*\\s" + "(['\"])(.*\\.${EXTENSIONS_PATTERN})\\${COMPILER_GROUPS+1}(\\s.*)?[\r\n]*" // compiling quoted file
}; };
private static final int FILE_GROUP = 2; private static final int FILE_GROUP = 2;
@SuppressWarnings("nls") @SuppressWarnings("nls")
private String getCompilerCommandPattern() { private String getCompilerCommandPattern() {
String parameter = getCustomParameter(); String parameter = getCustomParameter();
@ -88,7 +87,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
if (line==null) { if (line==null) {
return null; return null;
} }
for (String template : PATTERN_TEMPLATES) { for (String template : PATTERN_TEMPLATES) {
String pattern = makePattern(template); String pattern = makePattern(template);
Matcher fileMatcher = Pattern.compile(pattern).matcher(line); Matcher fileMatcher = Pattern.compile(pattern).matcher(line);
@ -106,7 +105,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
if (line==null || currentResource==null) { if (line==null || currentResource==null) {
return null; return null;
} }
List<String> options = new ArrayList<String>(); List<String> options = new ArrayList<String>();
Matcher optionMatcher = OPTIONS_PATTERN.matcher(line); Matcher optionMatcher = OPTIONS_PATTERN.matcher(line);
while (optionMatcher.find()) { while (optionMatcher.find()) {
@ -134,33 +133,23 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
scheduleSerializingJob(currentCfgDescription); scheduleSerializingJob(currentCfgDescription);
super.shutdown(); super.shutdown();
} }
private void scheduleSerializingJob(final ICConfigurationDescription cfgDescription) { private void scheduleSerializingJob(final ICConfigurationDescription cfgDescription) {
Job job = new Job("Serialize CDT language settings entries") { Job job = new Job("Serialize CDT language settings entries") {
@Override @Override
protected IStatus run(IProgressMonitor monitor) { protected IStatus run(IProgressMonitor monitor) {
// FIXME - remove thread name reassigning IStatus status = Status.OK_STATUS;
Thread thread = getThread();
String oldName = thread.getName();
thread.setName("CDT LSP Serializer,BOP");
IStatus status = null;
try { try {
if (cfgDescription != null) { if (cfgDescription != null) {
LanguageSettingsProvidersSerializer.serializeLanguageSettings(cfgDescription.getProjectDescription()); LanguageSettingsManager.serializeLanguageSettings(cfgDescription.getProjectDescription());
} else { } else {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
} }
} catch (CoreException e) { } catch (CoreException e) {
status = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e); status = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e);
MakeCorePlugin.log(status); MakeCorePlugin.log(status);
} }
if (status == null)
status = Status.OK_STATUS;
thread.setName(oldName);
return status; return status;
} }
@Override @Override
@ -168,7 +157,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
return family == JOB_FAMILY_BUILD_COMMAND_PARSER; return family == JOB_FAMILY_BUILD_COMMAND_PARSER;
} }
}; };
ISchedulingRule rule = null; ISchedulingRule rule = null;
if (currentProject != null) { if (currentProject != null) {
IFolder settingsFolder = currentProject.getFolder(".settings"); IFolder settingsFolder = currentProject.getFolder(".settings");
@ -193,7 +182,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
* Trivial Error Parser which allows highlighting of output lines matching the patterns * Trivial Error Parser which allows highlighting of output lines matching the patterns
* of this parser. Intended for better troubleshooting experience. * of this parser. Intended for better troubleshooting experience.
* Implementers are supposed to add the error parser as an extension. Initialize with * Implementers are supposed to add the error parser as an extension. Initialize with
* build command parser extension ID. * build command parser extension ID.
*/ */
protected static abstract class AbstractBuildCommandPatternHighlighter extends RegexErrorParser implements IErrorParser2 { protected static abstract class AbstractBuildCommandPatternHighlighter extends RegexErrorParser implements IErrorParser2 {
public AbstractBuildCommandPatternHighlighter(String buildCommandParserPluginExtension) { public AbstractBuildCommandPatternHighlighter(String buildCommandParserPluginExtension) {

View file

@ -28,6 +28,7 @@ import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.cdt.core.ProblemMarkerInfo; import org.eclipse.cdt.core.ProblemMarkerInfo;
import org.eclipse.cdt.core.index.IIndexManager; import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent; import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ICProject;
@ -41,7 +42,6 @@ import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.internal.core.ConsoleOutputSniffer; import org.eclipse.cdt.internal.core.ConsoleOutputSniffer;
import org.eclipse.cdt.internal.core.XmlUtil; import org.eclipse.cdt.internal.core.XmlUtil;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsLogger; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsLogger;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.internal.core.MakeMessages; import org.eclipse.cdt.make.internal.core.MakeMessages;
import org.eclipse.cdt.make.internal.core.StreamMonitor; import org.eclipse.cdt.make.internal.core.StreamMonitor;
@ -99,7 +99,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
protected URI mappedRootURI = null; protected URI mappedRootURI = null;
protected URI buildDirURI = null; protected URI buildDirURI = null;
private class SDMarkerGenerator implements IMarkerGenerator { private class SDMarkerGenerator implements IMarkerGenerator {
protected static final String SCANNER_DISCOVERY_PROBLEM_MARKER = MakeCorePlugin.PLUGIN_ID + ".scanner.discovery.problem"; //$NON-NLS-1$ protected static final String SCANNER_DISCOVERY_PROBLEM_MARKER = MakeCorePlugin.PLUGIN_ID + ".scanner.discovery.problem"; //$NON-NLS-1$
protected static final String PROVIDER = "provider"; //$NON-NLS-1$ protected static final String PROVIDER = "provider"; //$NON-NLS-1$
@ -135,14 +135,14 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} catch (CoreException e) { } catch (CoreException e) {
return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), "Error removing markers.", e); return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), "Error removing markers.", e);
} }
// add new marker // add new marker
try { try {
IMarker marker = problemMarkerInfo.file.createMarker(SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER); IMarker marker = problemMarkerInfo.file.createMarker(SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER);
marker.setAttribute(IMarker.MESSAGE, problemMarkerInfo.description); marker.setAttribute(IMarker.MESSAGE, problemMarkerInfo.description);
marker.setAttribute(IMarker.SEVERITY, problemMarkerInfo.severity); marker.setAttribute(IMarker.SEVERITY, problemMarkerInfo.severity);
marker.setAttribute(SDMarkerGenerator.PROVIDER, providerId); marker.setAttribute(SDMarkerGenerator.PROVIDER, providerId);
if (problemMarkerInfo.file instanceof IWorkspaceRoot) { if (problemMarkerInfo.file instanceof IWorkspaceRoot) {
marker.setAttribute(IMarker.LOCATION, "SD90 Providers, [" + providerName + "] options in Preferences"); marker.setAttribute(IMarker.LOCATION, "SD90 Providers, [" + providerName + "] options in Preferences");
} else { } else {
@ -151,7 +151,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} catch (CoreException e) { } catch (CoreException e) {
return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), "Error adding markers.", e); return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), "Error adding markers.", e);
} }
return Status.OK_STATUS; return Status.OK_STATUS;
} }
}; };
@ -159,9 +159,9 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
markerJob.setRule(problemMarkerInfo.file); markerJob.setRule(problemMarkerInfo.file);
markerJob.schedule(); markerJob.schedule();
} }
} }
/** /**
* This ICConsoleParser handles each individual run for one language from * This ICConsoleParser handles each individual run for one language from
* {@link AbstractBuiltinSpecsDetector#runForEachLanguage(ICConfigurationDescription, IPath, String[], IProgressMonitor)} * {@link AbstractBuiltinSpecsDetector#runForEachLanguage(ICConfigurationDescription, IPath, String[], IProgressMonitor)}
@ -220,7 +220,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
// This works as if workspace-wide // This works as if workspace-wide
return null; return null;
} }
@Override @Override
protected String determineLanguage() { protected String determineLanguage() {
// language id is supposed to be set by run(), just return it // language id is supposed to be set by run(), just return it
@ -234,7 +234,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
return mappedRootURI; return mappedRootURI;
} }
@Override @Override
protected URI getBuildDirURI(URI mappedRootURI) { protected URI getBuildDirURI(URI mappedRootURI) {
if (buildDirURI==null) { if (buildDirURI==null) {
@ -246,7 +246,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
@Override @Override
public void registerListener(ICConfigurationDescription cfgDescription) { public void registerListener(ICConfigurationDescription cfgDescription) {
LanguageSettingsLogger.logInfo(getPrefixForLog() + "registerListener [" + System.identityHashCode(this) + "] " + this); LanguageSettingsLogger.logInfo(getPrefixForLog() + "registerListener [" + System.identityHashCode(this) + "] " + this);
currentCfgDescription = cfgDescription; currentCfgDescription = cfgDescription;
execute(); execute();
} }
@ -264,7 +264,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
return; return;
} }
isExecuted = true; isExecuted = true;
Job job = new Job("Discover compiler's built-in language settings") { Job job = new Job("Discover compiler's built-in language settings") {
@Override @Override
protected IStatus run(IProgressMonitor monitor) { protected IStatus run(IProgressMonitor monitor) {
@ -275,7 +275,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
return family == JOB_FAMILY_BUILTIN_SPECS_DETECTOR; return family == JOB_FAMILY_BUILTIN_SPECS_DETECTOR;
} }
}; };
IProject ownerProject = null; IProject ownerProject = null;
if (currentCfgDescription != null) { if (currentCfgDescription != null) {
ICProjectDescription prjDescription = currentCfgDescription.getProjectDescription(); ICProjectDescription prjDescription = currentCfgDescription.getProjectDescription();
@ -292,7 +292,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
job.setRule(rule); job.setRule(rule);
job.schedule(); job.schedule();
// TODO - remove me // TODO - remove me
LanguageSettingsLogger.logInfo(getPrefixForLog() + "Execution scheduled [" + System.identityHashCode(this) + "] " + this); LanguageSettingsLogger.logInfo(getPrefixForLog() + "Execution scheduled [" + System.identityHashCode(this) + "] " + this);
} }
@ -312,24 +312,24 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
MultiStatus status = new MultiStatus(MakeCorePlugin.PLUGIN_ID, IStatus.OK, "Problem running CDT Scanner Discovery provider " + getId(), null); MultiStatus status = new MultiStatus(MakeCorePlugin.PLUGIN_ID, IStatus.OK, "Problem running CDT Scanner Discovery provider " + getId(), null);
boolean isChanged = false; boolean isChanged = false;
mappedRootURI = null; mappedRootURI = null;
buildDirURI = null; buildDirURI = null;
if (monitor == null) { if (monitor == null) {
monitor = new NullProgressMonitor(); monitor = new NullProgressMonitor();
} }
try { try {
List<String> languageIds = getLanguageScope(); List<String> languageIds = getLanguageScope();
if (languageIds != null) { if (languageIds != null) {
int totalWork = TICKS_CLEAN_MARKERS + languageIds.size()*TICKS_RUN_FOR_ONE_LANGUAGE + TICKS_SERIALIZATION; int totalWork = TICKS_CLEAN_MARKERS + languageIds.size()*TICKS_RUN_FOR_ONE_LANGUAGE + TICKS_SERIALIZATION;
monitor.beginTask("CDT Scanner Discovery", totalWork * TICKS_SCALE); monitor.beginTask("CDT Scanner Discovery", totalWork * TICKS_SCALE);
IResource markersResource = currentProject!= null ? currentProject : ResourcesPlugin.getWorkspace().getRoot(); IResource markersResource = currentProject!= null ? currentProject : ResourcesPlugin.getWorkspace().getRoot();
// clear old markers // clear old markers
monitor.subTask("Clearing stale markers"); monitor.subTask("Clearing stale markers");
try { try {
@ -342,19 +342,19 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} catch (CoreException e) { } catch (CoreException e) {
MakeCorePlugin.log(e); MakeCorePlugin.log(e);
} }
if (monitor.isCanceled()) if (monitor.isCanceled())
throw new OperationCanceledException(); throw new OperationCanceledException();
monitor.worked(TICKS_CLEAN_MARKERS * TICKS_SCALE); monitor.worked(TICKS_CLEAN_MARKERS * TICKS_SCALE);
for (String languageId : languageIds) { for (String languageId : languageIds) {
List<ICLanguageSettingEntry> oldEntries = getSettingEntries(cfgDescription, null, languageId); List<ICLanguageSettingEntry> oldEntries = getSettingEntries(cfgDescription, null, languageId);
try { try {
startupForLanguage(languageId); startupForLanguage(languageId);
if (monitor.isCanceled()) if (monitor.isCanceled())
throw new OperationCanceledException(); throw new OperationCanceledException();
runForLanguage(workingDirectory, env, new SubProgressMonitor(monitor, TICKS_RUN_FOR_ONE_LANGUAGE * TICKS_SCALE)); runForLanguage(workingDirectory, env, new SubProgressMonitor(monitor, TICKS_RUN_FOR_ONE_LANGUAGE * TICKS_SCALE));
if (monitor.isCanceled()) if (monitor.isCanceled())
throw new OperationCanceledException(); throw new OperationCanceledException();
@ -367,24 +367,24 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
List<ICLanguageSettingEntry> newEntries = getSettingEntries(cfgDescription, null, languageId); List<ICLanguageSettingEntry> newEntries = getSettingEntries(cfgDescription, null, languageId);
isChanged = isChanged || newEntries != oldEntries; isChanged = isChanged || newEntries != oldEntries;
} }
} }
monitor.subTask("Serializing results"); monitor.subTask("Serializing results");
if (isChanged) { // avoids resource and settings change notifications if (isChanged) { // avoids resource and settings change notifications
try { try {
if (currentCfgDescription != null) { if (currentCfgDescription != null) {
LanguageSettingsProvidersSerializer.serializeLanguageSettings(currentCfgDescription.getProjectDescription()); LanguageSettingsManager.serializeLanguageSettings(currentCfgDescription.getProjectDescription());
} else { } else {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
} }
} catch (CoreException e) { } catch (CoreException e) {
IStatus s = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e); IStatus s = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e);
MakeCorePlugin.log(s); MakeCorePlugin.log(s);
status.merge(s); status.merge(s);
} }
// AG: FIXME - rather send event that ls settings changed // AG: FIXME - rather send event that ls settings changed
if (currentCfgDescription != null) { if (currentCfgDescription != null) {
ICProject icProject = CoreModel.getDefault().create(currentProject); ICProject icProject = CoreModel.getDefault().create(currentProject);
@ -402,7 +402,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
if (monitor.isCanceled()) if (monitor.isCanceled())
throw new OperationCanceledException(); throw new OperationCanceledException();
monitor.worked(TICKS_SERIALIZATION * TICKS_SCALE); monitor.worked(TICKS_SERIALIZATION * TICKS_SCALE);
} catch (OperationCanceledException e) { } catch (OperationCanceledException e) {
if (!status.isOK()) { if (!status.isOK()) {
@ -418,7 +418,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
shutdown(); shutdown();
currentCfgDescription = cfgDescription; // current description gets cleared in super.shutdown(), keep it currentCfgDescription = cfgDescription; // current description gets cleared in super.shutdown(), keep it
} }
return status; return status;
} }
@ -427,7 +427,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
specFile = null; // can get set in resolveCommand() specFile = null; // can get set in resolveCommand()
currentCommandResolved = resolveCommand(currentLanguageId); currentCommandResolved = resolveCommand(currentLanguageId);
detectedSettingEntries = new ArrayList<ICLanguageSettingEntry>(); detectedSettingEntries = new ArrayList<ICLanguageSettingEntry>();
collected = 0; collected = 0;
} }
@ -435,20 +435,20 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
protected void shutdownForLanguage() { protected void shutdownForLanguage() {
if (detectedSettingEntries != null && detectedSettingEntries.size() > 0) { if (detectedSettingEntries != null && detectedSettingEntries.size() > 0) {
collected = detectedSettingEntries.size(); collected = detectedSettingEntries.size();
LanguageSettingsLogger.logInfo(getPrefixForLog() LanguageSettingsLogger.logInfo(getPrefixForLog()
+ getClass().getSimpleName() + " collected " + detectedSettingEntries.size() + " entries" + " for language " + currentLanguageId); + getClass().getSimpleName() + " collected " + detectedSettingEntries.size() + " entries" + " for language " + currentLanguageId);
setSettingEntries(currentCfgDescription, currentResource, currentLanguageId, detectedSettingEntries); setSettingEntries(currentCfgDescription, currentResource, currentLanguageId, detectedSettingEntries);
} }
detectedSettingEntries = null; detectedSettingEntries = null;
currentCommandResolved = null; currentCommandResolved = null;
if (specFile!=null && !preserveSpecFile) { if (specFile!=null && !preserveSpecFile) {
specFile.delete(); specFile.delete();
specFile = null; specFile = null;
} }
currentLanguageId = null; currentLanguageId = null;
} }
@ -473,21 +473,21 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
if (monitor == null) { if (monitor == null) {
monitor = new NullProgressMonitor(); monitor = new NullProgressMonitor();
} }
try { try {
// StreamMonitor will do monitor.beginTask(...) // StreamMonitor will do monitor.beginTask(...)
StreamMonitor streamMon = new StreamMonitor(monitor, errorParserManager, TICKS_STREAM_MONITOR); StreamMonitor streamMon = new StreamMonitor(monitor, errorParserManager, TICKS_STREAM_MONITOR);
OutputStream stdout = streamMon; OutputStream stdout = streamMon;
OutputStream stderr = streamMon; OutputStream stderr = streamMon;
String msg = "Running scanner discovery: " + getName(); String msg = "Running scanner discovery: " + getName();
printLine(stdout, "**** " + msg + " ****" + NEWLINE); printLine(stdout, "**** " + msg + " ****" + NEWLINE);
ConsoleParser consoleParser = new ConsoleParser(); ConsoleParser consoleParser = new ConsoleParser();
ConsoleOutputSniffer sniffer = new ConsoleOutputSniffer(stdout, stderr, new IConsoleParser[] { consoleParser }, errorParserManager); ConsoleOutputSniffer sniffer = new ConsoleOutputSniffer(stdout, stderr, new IConsoleParser[] { consoleParser }, errorParserManager);
OutputStream consoleOut = sniffer.getOutputStream(); OutputStream consoleOut = sniffer.getOutputStream();
OutputStream consoleErr = sniffer.getErrorStream(); OutputStream consoleErr = sniffer.getErrorStream();
boolean isSuccess = false; boolean isSuccess = false;
try { try {
isSuccess = runProgram(currentCommandResolved, env, workingDirectory, monitor, consoleOut, consoleErr); isSuccess = runProgram(currentCommandResolved, env, workingDirectory, monitor, consoleOut, consoleErr);
@ -519,7 +519,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
*/ */
protected boolean runProgram(String command, String[] env, IPath workingDirectory, IProgressMonitor monitor, protected boolean runProgram(String command, String[] env, IPath workingDirectory, IProgressMonitor monitor,
OutputStream consoleOut, OutputStream consoleErr) throws CoreException, IOException { OutputStream consoleOut, OutputStream consoleErr) throws CoreException, IOException {
if (command==null || command.trim().length()==0) { if (command==null || command.trim().length()==0) {
return false; return false;
} }
@ -575,7 +575,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
return false; return false;
} }
printLine(consoleOut, NEWLINE + "**** Collected " + detectedSettingEntries.size() + " entries. ****"); printLine(consoleOut, NEWLINE + "**** Collected " + detectedSettingEntries.size() + " entries. ****");
return true; return true;
} }
@ -601,7 +601,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
String consoleId = MakeCorePlugin.PLUGIN_ID + '.' + getId() + '.' + currentLanguageId; String consoleId = MakeCorePlugin.PLUGIN_ID + '.' + getId() + '.' + currentLanguageId;
String consoleName = getName() + ", " + ld.getName(); String consoleName = getName() + ", " + ld.getName();
URL defaultIcon = Platform.getBundle(PLUGIN_CDT_MAKE_UI_ID).getEntry("icons/obj16/inspect_system.gif"); URL defaultIcon = Platform.getBundle(PLUGIN_CDT_MAKE_UI_ID).getEntry("icons/obj16/inspect_system.gif");
IConsole console = CCorePlugin.getDefault().getConsole(extConsoleId, consoleId, consoleName, defaultIcon); IConsole console = CCorePlugin.getDefault().getConsole(extConsoleId, consoleId, consoleName, defaultIcon);
return console; return console;
} }
@ -642,7 +642,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
if (specExt != null) { if (specExt != null) {
ext = '.' + specExt; ext = '.' + specExt;
} }
String specFileName = SPEC_FILE_BASE + ext; String specFileName = SPEC_FILE_BASE + ext;
IPath workingLocation = MakeCorePlugin.getWorkingDirectory(); IPath workingLocation = MakeCorePlugin.getWorkingDirectory();
IPath fileLocation = workingLocation.append(specFileName); IPath fileLocation = workingLocation.append(specFileName);
@ -664,7 +664,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
/** /**
* Determine file extension by language id. This implementation retrieves first extension * Determine file extension by language id. This implementation retrieves first extension
* from the list as there could be multiple extensions associated with the given language. * from the list as there could be multiple extensions associated with the given language.
* *
* @param languageId - given language ID. * @param languageId - given language ID.
* @return file extension associated with the language or {@code null} if not found. * @return file extension associated with the language or {@code null} if not found.
*/ */
@ -680,7 +680,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
} }
} }
} }
if (ext == null) { if (ext == null) {
MakeCorePlugin.log(new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, "Unable to find file extension for language "+languageId)); MakeCorePlugin.log(new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, "Unable to find file extension for language "+languageId));
} }

View file

@ -23,9 +23,6 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeListener;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
/** /**
@ -83,7 +80,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
@Override @Override
protected void tearDown() throws Exception { protected void tearDown() throws Exception {
LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.unregisterLanguageSettingsChangeListener(mockLseListener);
LanguageSettingsManager.setWorkspaceProviders(null); LanguageSettingsManager.setWorkspaceProviders(null);
super.tearDown(); super.tearDown();
} }
@ -547,7 +544,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -601,7 +598,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -666,7 +663,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -692,7 +689,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription); LanguageSettingsManager.serializeLanguageSettings(prjDescription);
// inspect event // inspect event
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
@ -730,7 +727,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -762,7 +759,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertNull(mockLseListener.getLastEvent()); assertNull(mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_1); LanguageSettingsManager.serializeLanguageSettings(prjDescription_1);
// inspect event // inspect event
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
@ -793,7 +790,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertNull(mockLseListener.getLastEvent()); assertNull(mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_2); LanguageSettingsManager.serializeLanguageSettings(prjDescription_2);
// inspect event // inspect event
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
@ -825,7 +822,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -886,7 +883,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
@ -938,7 +935,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
// Add empty global provider // Add empty global provider
{ {
@ -988,7 +985,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
// get cfgDescriptionId // get cfgDescriptionId
ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false);
@ -1023,7 +1020,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
// get cfgDescriptionId // get cfgDescriptionId
ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false);

View file

@ -304,7 +304,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
assertEquals(entries.size(), actual.size()); assertEquals(entries.size(), actual.size());
// serialize language settings of workspace providers // serialize language settings of workspace providers
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsManager.serializeLanguageSettingsWorkspace();
// clear the provider // clear the provider
extProvider.setSettingEntries(null, null, null, null); extProvider.setSettingEntries(null, null, null, null);

View file

@ -14,7 +14,6 @@ import java.util.List;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;

View file

@ -8,7 +8,7 @@
* Contributors: * Contributors:
* Andrew Gvozdev - initial API and implementation * Andrew Gvozdev - initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.language.settings.providers; package org.eclipse.cdt.core.language.settings.providers;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;

View file

@ -8,15 +8,15 @@
* Contributors: * Contributors:
* Andrew Gvozdev - initial API and implementation * Andrew Gvozdev - initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.language.settings.providers; package org.eclipse.cdt.core.language.settings.providers;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
/** /**
* An interface for listeners to changes in language settings {@link ICLanguageSettingEntry}. * An interface for listeners to changes in language settings {@link ICLanguageSettingEntry}.
* *
* @see LanguageSettingsProvidersSerializer#registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener) * @see LanguageSettingsManager#registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener)
* @see LanguageSettingsProvidersSerializer#unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener) * @see LanguageSettingsManager#unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener)
*/ */
public interface ILanguageSettingsChangeListener { public interface ILanguageSettingsChangeListener {
/** /**

View file

@ -22,6 +22,7 @@ import org.eclipse.cdt.core.settings.model.ICFileDescription;
import org.eclipse.cdt.core.settings.model.ICFolderDescription; import org.eclipse.cdt.core.settings.model.ICFolderDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSetting; import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager;
@ -35,8 +36,6 @@ import org.eclipse.core.runtime.IPath;
/** /**
* A collection of utility methods to manage language settings providers. * A collection of utility methods to manage language settings providers.
* See {@link ILanguageSettingsProvider}. * See {@link ILanguageSettingsProvider}.
*
* @since 6.0
*/ */
public class LanguageSettingsManager { public class LanguageSettingsManager {
/** /**
@ -257,4 +256,41 @@ public class LanguageSettingsManager {
return languageIds; return languageIds;
} }
/**
* Adds a listener that will be notified of changes in language settings.
*
* @param listener the listener to add
*/
public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(listener);
}
/**
* Removes a language settings change listener.
*
* @param listener the listener to remove.
*/
public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(listener);
}
/**
* Save language settings providers of a project to persistent storage.
*
* @param prjDescription - project description of the project.
* @throws CoreException if something goes wrong.
*/
public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException {
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription);
}
/**
* Save language settings providers of the workspace (global providers) to persistent storage.
*
* @throws CoreException
*/
public static void serializeLanguageSettingsWorkspace() throws CoreException {
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace();
}
} }

View file

@ -51,7 +51,7 @@ public class LanguageSettingsManager_TBD {
try { try {
return ! LanguageSettingsExtensionManager.equalsExtensionProviderShallow((ILanguageSettingsEditableProvider) provider); return ! LanguageSettingsExtensionManager.equalsExtensionProviderShallow((ILanguageSettingsEditableProvider) provider);
} catch (Exception e) { } catch (Exception e) {
CCorePlugin.log("Internal Error: cannot clone provider "+provider.getId(), e); CCorePlugin.log(e);
} }
} }
return false; return false;

View file

@ -18,7 +18,6 @@ import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.internal.core.XmlUtil; import org.eclipse.cdt.internal.core.XmlUtil;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsSerializableStorage; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsSerializableStorage;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.w3c.dom.Element; import org.w3c.dom.Element;
@ -156,9 +155,8 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
* Sets language settings entries for the provider. * Sets language settings entries for the provider.
* Note that the entries are not persisted at that point. Use this method to * Note that the entries are not persisted at that point. Use this method to
* set the entries for all resources and then to persist use * set the entries for all resources and then to persist use
* {@fixme FIXME - update references with API versions} * {@link LanguageSettingsManager#serializeLanguageSettings(ICProjectDescription)} or
* {@link LanguageSettingsProvidersSerializer#serializeLanguageSettings(ICProjectDescription)} or * {@link LanguageSettingsManager#serializeLanguageSettingsWorkspace()}.
* {@link LanguageSettingsProvidersSerializer#serializeLanguageSettingsWorkspace()}.
* See for example {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector} * See for example {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector}
* in build plugins. * in build plugins.
* *

View file

@ -66,7 +66,7 @@ public class LanguageSettingsLogger {
@Deprecated @Deprecated
public static void logScannerInfoProvider(IResource rc, Object who) { public static void logScannerInfoProvider(IResource rc, Object who) {
if (isEnabled()) { if (isEnabled()) {
String msg = "rc="+rc+" <-- "+who.getClass().getSimpleName(); String msg = "rc="+rc+" <-- "+who.getClass().getSimpleName(); //$NON-NLS-1$ //$NON-NLS-2$
if (rc instanceof IFile) { if (rc instanceof IFile) {
LanguageSettingsLogger.logInfo(msg); LanguageSettingsLogger.logInfo(msg);
} else if (rc instanceof IProject) { } else if (rc instanceof IProject) {

View file

@ -8,7 +8,6 @@
* Contributors: * Contributors:
* Andrew Gvozdev - initial API and implementation * Andrew Gvozdev - initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.language.settings.providers; package org.eclipse.cdt.internal.core.language.settings.providers;
import java.net.URI; import java.net.URI;
@ -20,6 +19,8 @@ import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent; import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeListener;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditableProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditableProvider;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
@ -58,8 +59,11 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
/**
* Helper class handling serialization and notifications for language settings entries {@link ICLanguageSettingEntry}.
*/
public class LanguageSettingsProvidersSerializer { public class LanguageSettingsProvidersSerializer {
private static final String PREFERENCE_WORSPACE_PROVIDERS_SET = "language.settings.providers.set.for.workspace"; private static final String PREFERENCE_WORSPACE_PROVIDERS_SET = "language.settings.providers.set.for.workspace"; //$NON-NLS-1$
private static final String STORAGE_WORKSPACE_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$ private static final String STORAGE_WORKSPACE_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$
private static final String SETTINGS_FOLDER_NAME = ".settings/"; //$NON-NLS-1$ private static final String SETTINGS_FOLDER_NAME = ".settings/"; //$NON-NLS-1$
private static final String STORAGE_PROJECT_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$ private static final String STORAGE_PROJECT_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$
@ -372,6 +376,11 @@ projects:
return events; return events;
} }
/**
* Save language settings providers of the workspace (global providers) to persistent storage.
*
* @throws CoreException
*/
public static void serializeLanguageSettingsWorkspace() throws CoreException { public static void serializeLanguageSettingsWorkspace() throws CoreException {
LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace()"); LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace()");
@ -530,6 +539,12 @@ projects:
} }
} }
/**
* Save language settings providers of a project to persistent storage.
*
* @param prjDescription - project description of the project.
* @throws CoreException if something goes wrong.
*/
public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException { public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException {
IProject project = prjDescription.getProject(); IProject project = prjDescription.getProject();
LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettings() for " + project); LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettings() for " + project);
@ -993,7 +1008,7 @@ projects:
/** /**
* Adds a listener that will be notified of changes in language settings. * Adds a listener that will be notified of changes in language settings.
* *
* @param listener the ILanguageMappingChangeListener to add * @param listener the listener to add
*/ */
public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) { public static void registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
fLanguageSettingsChangeListeners.add(listener); fLanguageSettingsChangeListeners.add(listener);
@ -1002,7 +1017,7 @@ projects:
/** /**
* Removes a language settings change listener. * Removes a language settings change listener.
* *
* @param listener the ILanguageMappingChangeListener to remove. * @param listener the listener to remove.
*/ */
public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) { public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) {
fLanguageSettingsChangeListeners.remove(listener); fLanguageSettingsChangeListeners.remove(listener);

View file

@ -49,7 +49,6 @@ import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSetting
import org.eclipse.cdt.utils.envvar.StorableEnvironment; import org.eclipse.cdt.utils.envvar.StorableEnvironment;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.osgi.util.NLS;
/** /**
* CConfigurationSpecSettings impelements ICSettingsStorage * CConfigurationSpecSettings impelements ICSettingsStorage
@ -1014,15 +1013,13 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{
for (ILanguageSettingsProvider provider : providers) { for (ILanguageSettingsProvider provider : providers) {
String id = provider.getId(); String id = provider.getId();
if (provider==LanguageSettingsProvidersSerializer.getRawWorkspaceProvider(id)) { if (provider==LanguageSettingsProvidersSerializer.getRawWorkspaceProvider(id)) {
String msg = "Error: Attempt to add to the configuration raw global provider " + id; throw new IllegalArgumentException("Error: Attempt to add to the configuration raw global provider " + id); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
} }
if (!ids.contains(id)) { if (!ids.contains(id)) {
fLanguageSettingsProviders.add(provider); fLanguageSettingsProviders.add(provider);
ids.add(id); ids.add(id);
} else { } else {
String msg = NLS.bind(SettingsModelMessages.getString("CConfigurationSpecSettings.MustHaveUniqueID"), id); //$NON-NLS-1$ throw new IllegalArgumentException("Language Settings Providers must have unique ID. Duplicate ID=" + id); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
} }
} }
fIsModified = true; fIsModified = true;

View file

@ -16,7 +16,6 @@ CConfigurationDescription.1=expected proxy of type ICFileDescription, but was
CConfigurationDescription.2=data was not created CConfigurationDescription.2=data was not created
CConfigurationDescription.3=expected proxy of type ICFolderDescription, but was CConfigurationDescription.3=expected proxy of type ICFolderDescription, but was
CConfigurationDescriptionCache.0=description is read only CConfigurationDescriptionCache.0=description is read only
CConfigurationSpecSettings.MustHaveUniqueID=Language Settings Providers must have unique ID. Duplicate ID={0}
CConfigurationStatus.1=configurations settings invalid CConfigurationStatus.1=configurations settings invalid
CProjectConverterDesciptor.0=illegal provider implementation CProjectConverterDesciptor.0=illegal provider implementation
CProjectConverterDesciptor.1=no provider defined CProjectConverterDesciptor.1=no provider defined

View file

@ -34,6 +34,7 @@ import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamResult;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager;
import org.eclipse.cdt.core.settings.model.ICSettingsStorage; import org.eclipse.cdt.core.settings.model.ICSettingsStorage;
@ -173,7 +174,7 @@ public class XmlProjectDescriptionStorage extends AbstractCProjectDescriptionSto
serializingLock.acquire(); serializingLock.acquire();
projectModificaitonStamp = serialize(fDes.getProject(), ICProjectDescriptionStorageType.STORAGE_FILE_NAME, fElement); projectModificaitonStamp = serialize(fDes.getProject(), ICProjectDescriptionStorageType.STORAGE_FILE_NAME, fElement);
((ContributedEnvironment) CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment()).serialize(fDes); ((ContributedEnvironment) CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment()).serialize(fDes);
LanguageSettingsProvidersSerializer.serializeLanguageSettings(fDes); LanguageSettingsManager.serializeLanguageSettings(fDes);
} finally { } finally {
serializingLock.release(); serializingLock.release();
Job.getJobManager().removeJobChangeListener(notifyJobCanceller); Job.getJobManager().removeJobChangeListener(notifyJobCanceller);

View file

@ -11,10 +11,10 @@
package org.eclipse.cdt.internal.core.pdom; package org.eclipse.cdt.internal.core.pdom;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeListener;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.internal.core.language.settings.providers.ILanguageSettingsChangeListener;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
@ -24,21 +24,27 @@ import org.eclipse.core.resources.ResourcesPlugin;
*/ */
public class LanguageSettingsChangeListener implements ILanguageSettingsChangeListener { public class LanguageSettingsChangeListener implements ILanguageSettingsChangeListener {
private PDOMManager fManager; private PDOMManager fManager;
/**
* Constructor.
*
* @param manager - PDOM manager.
*/
public LanguageSettingsChangeListener(PDOMManager manager) { public LanguageSettingsChangeListener(PDOMManager manager) {
fManager = manager; fManager = manager;
} }
@Override
public void handleEvent(ILanguageSettingsChangeEvent event) { public void handleEvent(ILanguageSettingsChangeEvent event) {
IWorkspaceRoot wspRoot = ResourcesPlugin.getWorkspace().getRoot(); IWorkspaceRoot wspRoot = ResourcesPlugin.getWorkspace().getRoot();
IProject project = wspRoot.getProject(event.getProjectName()); IProject project = wspRoot.getProject(event.getProjectName());
if (project != null) { if (project != null) {
ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project); ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project);
if (prjDescription != null) { if (prjDescription != null) {
ICConfigurationDescription indexedCfgDescription = prjDescription.getDefaultSettingConfiguration(); ICConfigurationDescription indexedCfgDescription = prjDescription.getDefaultSettingConfiguration();
String indexedCfgId = indexedCfgDescription.getId(); String indexedCfgId = indexedCfgDescription.getId();
for (String cfgId : event.getConfigurationDescriptionIds()) { for (String cfgId : event.getConfigurationDescriptionIds()) {
if (cfgId.equals(indexedCfgId)) { if (cfgId.equals(indexedCfgId)) {
fManager.handlePostBuildEvent(); fManager.handlePostBuildEvent();
@ -47,7 +53,7 @@ public class LanguageSettingsChangeListener implements ILanguageSettingsChangeLi
} }
} }
} }
} }
} }

View file

@ -48,6 +48,7 @@ import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.index.IIndexerStateListener; import org.eclipse.cdt.core.index.IIndexerStateListener;
import org.eclipse.cdt.core.index.IndexLocationFactory; import org.eclipse.cdt.core.index.IndexLocationFactory;
import org.eclipse.cdt.core.index.IndexerSetupParticipant; import org.eclipse.cdt.core.index.IndexerSetupParticipant;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICContainer; import org.eclipse.cdt.core.model.ICContainer;
@ -68,7 +69,6 @@ import org.eclipse.cdt.internal.core.index.IndexChangeEvent;
import org.eclipse.cdt.internal.core.index.IndexFactory; import org.eclipse.cdt.internal.core.index.IndexFactory;
import org.eclipse.cdt.internal.core.index.IndexerStateEvent; import org.eclipse.cdt.internal.core.index.IndexerStateEvent;
import org.eclipse.cdt.internal.core.index.provider.IndexProviderManager; import org.eclipse.cdt.internal.core.index.provider.IndexProviderManager;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.internal.core.pdom.PDOM.IListener; import org.eclipse.cdt.internal.core.pdom.PDOM.IListener;
import org.eclipse.cdt.internal.core.pdom.db.ChunkCache; import org.eclipse.cdt.internal.core.pdom.db.ChunkCache;
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
@ -147,12 +147,12 @@ public class PDOMManager implements IWritableIndexManager, IListener {
private final PDOMIndexerJob fIndexerJob; private final PDOMIndexerJob fIndexerJob;
private IPDOMIndexerTask fCurrentTask; private IPDOMIndexerTask fCurrentTask;
private int fSourceCount, fHeaderCount, fTickCount; private int fSourceCount, fHeaderCount, fTickCount;
private final LinkedList<Runnable> fChangeEvents= new LinkedList<Runnable>(); private final LinkedList<Runnable> fChangeEvents= new LinkedList<Runnable>();
private final Job fNotificationJob; private final Job fNotificationJob;
private final AtomicMultiSet<IIndexFileLocation> fFilesIndexedUnconditionlly= new AtomicMultiSet<IIndexFileLocation>(); private final AtomicMultiSet<IIndexFileLocation> fFilesIndexedUnconditionlly= new AtomicMultiSet<IIndexFileLocation>();
/** /**
* Stores mapping from pdom to project, used to serialize creation of new pdoms. * Stores mapping from pdom to project, used to serialize creation of new pdoms.
*/ */
@ -160,7 +160,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
private Map<File, ICProject> fFileToProject= new HashMap<File, ICProject>(); private Map<File, ICProject> fFileToProject= new HashMap<File, ICProject>();
private ListenerList fChangeListeners= new ListenerList(); private ListenerList fChangeListeners= new ListenerList();
private ListenerList fStateListeners= new ListenerList(); private ListenerList fStateListeners= new ListenerList();
private IndexChangeEvent fIndexChangeEvent= new IndexChangeEvent(); private IndexChangeEvent fIndexChangeEvent= new IndexChangeEvent();
private IndexerStateEvent fIndexerStateEvent= new IndexerStateEvent(); private IndexerStateEvent fIndexerStateEvent= new IndexerStateEvent();
@ -170,17 +170,17 @@ public class PDOMManager implements IWritableIndexManager, IListener {
private final ICProjectDescriptionListener fProjectDescriptionListener; private final ICProjectDescriptionListener fProjectDescriptionListener;
private final JobChangeListener fJobChangeListener; private final JobChangeListener fJobChangeListener;
private final IPreferenceChangeListener fPreferenceChangeListener; private final IPreferenceChangeListener fPreferenceChangeListener;
private IndexFactory fIndexFactory= new IndexFactory(this); private IndexFactory fIndexFactory= new IndexFactory(this);
private IndexProviderManager fIndexProviderManager = new IndexProviderManager(); private IndexProviderManager fIndexProviderManager = new IndexProviderManager();
/** /**
* Serializes creation of new indexer, when acquiring the lock you are * Serializes creation of new indexer, when acquiring the lock you are
* not allowed to hold a lock on fPDOMs. * not allowed to hold a lock on fPDOMs.
*/ */
private Map<ICProject, IndexUpdatePolicy> fUpdatePolicies= new HashMap<ICProject, IndexUpdatePolicy>(); private Map<ICProject, IndexUpdatePolicy> fUpdatePolicies= new HashMap<ICProject, IndexUpdatePolicy>();
private Set<String> fClosingProjects= new HashSet<String>(); private Set<String> fClosingProjects= new HashSet<String>();
private Map<IProject, PCL> fPrefListeners= new HashMap<IProject, PCL>(); private Map<IProject, PCL> fPrefListeners= new HashMap<IProject, PCL>();
private List<IndexerSetupParticipant> fSetupParticipants= new ArrayList<IndexerSetupParticipant>(); private List<IndexerSetupParticipant> fSetupParticipants= new ArrayList<IndexerSetupParticipant>();
private Set<ICProject> fPostponedProjects= new HashSet<ICProject>(); private Set<ICProject> fPostponedProjects= new HashSet<ICProject>();
@ -188,7 +188,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
private boolean fInShutDown; private boolean fInShutDown;
boolean fTraceIndexerSetup; boolean fTraceIndexerSetup;
public PDOMManager() { public PDOMManager() {
PDOM.sDEBUG_LOCKS= "true".equals(Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/index/locks")); //$NON-NLS-1$//$NON-NLS-2$ PDOM.sDEBUG_LOCKS= "true".equals(Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/index/locks")); //$NON-NLS-1$//$NON-NLS-2$
addIndexerSetupParticipant(new WaitForRefreshJobs()); addIndexerSetupParticipant(new WaitForRefreshJobs());
@ -204,7 +204,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
fIndexerJob= new PDOMIndexerJob(this); fIndexerJob= new PDOMIndexerJob(this);
fNotificationJob= createNotifyJob(); fNotificationJob= createNotifyJob();
} }
public Job startup() { public Job startup() {
fInShutDown= false; fInShutDown= false;
Job postStartupJob= new Job(CCorePlugin.getResourceString("CCorePlugin.startupJob")) { //$NON-NLS-1$ Job postStartupJob= new Job(CCorePlugin.getResourceString("CCorePlugin.startupJob")) { //$NON-NLS-1$
@ -219,10 +219,10 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
}; };
postStartupJob.setSystem(true); postStartupJob.setSystem(true);
return postStartupJob; return postStartupJob;
} }
/** /**
* Called from a job after plugin start. * Called from a job after plugin start.
*/ */
protected void postStartup() { protected void postStartup() {
@ -234,13 +234,13 @@ public class PDOMManager implements IWritableIndexManager, IListener {
adjustCacheSize(); adjustCacheSize();
updatePathCanonicalizationStrategy(); updatePathCanonicalizationStrategy();
fIndexProviderManager.startup(); fIndexProviderManager.startup();
fTraceIndexerSetup= String.valueOf(true).equals(Platform.getDebugOption(TRACE_INDEXER_SETUP)); fTraceIndexerSetup= String.valueOf(true).equals(Platform.getDebugOption(TRACE_INDEXER_SETUP));
final CoreModel model = CoreModel.getDefault(); final CoreModel model = CoreModel.getDefault();
ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD); ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD);
model.addElementChangedListener(fCModelListener); model.addElementChangedListener(fCModelListener);
LanguageManager.getInstance().registerLanguageChangeListener(fLanguageChangeListener); LanguageManager.getInstance().registerLanguageChangeListener(fLanguageChangeListener);
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(fLanguageSettingsChangeListener); LanguageSettingsManager.registerLanguageSettingsChangeListener(fLanguageSettingsChangeListener);
final int types= CProjectDescriptionEvent.DATA_APPLIED; final int types= CProjectDescriptionEvent.DATA_APPLIED;
CCorePlugin.getDefault().getProjectDescriptionManager().addCProjectDescriptionListener(fProjectDescriptionListener, types); CCorePlugin.getDefault().getProjectDescriptionManager().addCProjectDescriptionListener(fProjectDescriptionListener, types);
@ -261,14 +261,14 @@ public class PDOMManager implements IWritableIndexManager, IListener {
final CoreModel model = CoreModel.getDefault(); final CoreModel model = CoreModel.getDefault();
model.removeElementChangedListener(fCModelListener); model.removeElementChangedListener(fCModelListener);
ResourcesPlugin.getWorkspace().removeResourceChangeListener(fCModelListener); ResourcesPlugin.getWorkspace().removeResourceChangeListener(fCModelListener);
LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(fLanguageSettingsChangeListener); LanguageSettingsManager.unregisterLanguageSettingsChangeListener(fLanguageSettingsChangeListener);
LanguageManager.getInstance().unregisterLanguageChangeListener(fLanguageChangeListener); LanguageManager.getInstance().unregisterLanguageChangeListener(fLanguageChangeListener);
PDOMIndexerJob jobToCancel= null; PDOMIndexerJob jobToCancel= null;
synchronized (fTaskQueue) { synchronized (fTaskQueue) {
fTaskQueue.clear(); fTaskQueue.clear();
jobToCancel= fIndexerJob; jobToCancel= fIndexerJob;
} }
if (jobToCancel != null) { if (jobToCancel != null) {
assert !Thread.holdsLock(fTaskQueue); assert !Thread.holdsLock(fTaskQueue);
jobToCancel.cancelJobs(null, false); jobToCancel.cancelJobs(null, false);
@ -290,7 +290,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
reindexAll(); reindexAll();
} }
} }
protected void adjustCacheSize() { protected void adjustCacheSize() {
IPreferencesService prefs = Platform.getPreferencesService(); IPreferencesService prefs = Platform.getPreferencesService();
int cachePct= prefs.getInt(CCorePlugin.PLUGIN_ID, CCorePreferenceConstants.INDEX_DB_CACHE_SIZE_PCT, 10, null); int cachePct= prefs.getInt(CCorePlugin.PLUGIN_ID, CCorePreferenceConstants.INDEX_DB_CACHE_SIZE_PCT, 10, null);
@ -313,7 +313,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
/** /**
* Returns the pdom for the project. * Returns the pdom for the project.
* @throws CoreException * @throws CoreException
*/ */
public IPDOM getPDOM(ICProject project) throws CoreException { public IPDOM getPDOM(ICProject project) throws CoreException {
@ -327,9 +327,9 @@ public class PDOMManager implements IWritableIndexManager, IListener {
return pdom; return pdom;
} }
} }
/** /**
* Returns the pdom for the project. The call to the method may cause * Returns the pdom for the project. The call to the method may cause
* opening the database. In case there is a version mismatch the data * opening the database. In case there is a version mismatch the data
* base is cleared, in case it does not exist it is created. In any * base is cleared, in case it does not exist it is created. In any
* case a pdom ready to use is returned. * case a pdom ready to use is returned.
@ -390,7 +390,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
pdom.setASTFilePathResolver(new ProjectIndexerInputAdapter(project, false)); pdom.setASTFilePathResolver(new ProjectIndexerInputAdapter(project, false));
pdom.addListener(this); pdom.addListener(this);
fFileToProject.put(dbFile, project); fFileToProject.put(dbFile, project);
fProjectToPDOM.put(rproject, pdom); fProjectToPDOM.put(rproject, pdom);
if (pdomProxy instanceof PDOMProxy) { if (pdomProxy instanceof PDOMProxy) {
@ -438,7 +438,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
public void setDefaultIndexerId(String indexerId) { public void setDefaultIndexerId(String indexerId) {
IndexerPreferences.setDefaultIndexerId(indexerId); IndexerPreferences.setDefaultIndexerId(indexerId);
} }
@Override @Override
public String getIndexerId(ICProject project) { public String getIndexerId(ICProject project) {
IProject prj= project != null ? project.getProject() : null; IProject prj= project != null ? project.getProject() : null;
@ -451,7 +451,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
IndexerPreferences.set(prj, IndexerPreferences.KEY_INDEXER_ID, indexerId); IndexerPreferences.set(prj, IndexerPreferences.KEY_INDEXER_ID, indexerId);
CCoreInternals.savePreferences(prj, IndexerPreferences.getScope(prj) == IndexerPreferences.SCOPE_PROJECT_SHARED); CCoreInternals.savePreferences(prj, IndexerPreferences.getScope(prj) == IndexerPreferences.SCOPE_PROJECT_SHARED);
} }
protected void onPreferenceChange(ICProject cproject, PreferenceChangeEvent event) { protected void onPreferenceChange(ICProject cproject, PreferenceChangeEvent event) {
if (IndexerPreferences.KEY_UPDATE_POLICY.equals(event.getKey())) { if (IndexerPreferences.KEY_UPDATE_POLICY.equals(event.getKey())) {
changeUpdatePolicy(cproject); changeUpdatePolicy(cproject);
@ -482,17 +482,17 @@ public class PDOMManager implements IWritableIndexManager, IListener {
private void changeIndexer(ICProject cproject) throws CoreException { private void changeIndexer(ICProject cproject) throws CoreException {
assert !Thread.holdsLock(fProjectToPDOM); assert !Thread.holdsLock(fProjectToPDOM);
// if there is no indexer, don't touch the preferences. // if there is no indexer, don't touch the preferences.
IPDOMIndexer oldIndexer= getIndexer(cproject); IPDOMIndexer oldIndexer= getIndexer(cproject);
if (oldIndexer == null) { if (oldIndexer == null) {
return; return;
} }
IProject prj= cproject.getProject(); IProject prj= cproject.getProject();
String newid= IndexerPreferences.get(prj, IndexerPreferences.KEY_INDEXER_ID, IPDOMManager.ID_NO_INDEXER); String newid= IndexerPreferences.get(prj, IndexerPreferences.KEY_INDEXER_ID, IPDOMManager.ID_NO_INDEXER);
Properties props= IndexerPreferences.getProperties(prj); Properties props= IndexerPreferences.getProperties(prj);
// Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485 // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485
synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) { synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) {
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
@ -519,7 +519,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
enqueue(new PDOMRebuildTask(indexer)); enqueue(new PDOMRebuildTask(indexer));
} }
}} }}
if (oldIndexer != null) { if (oldIndexer != null) {
stopIndexer(oldIndexer); stopIndexer(oldIndexer);
} }
@ -546,26 +546,26 @@ public class PDOMManager implements IWritableIndexManager, IListener {
void createIndexer(ICProject project, IProgressMonitor pm) throws InterruptedException { void createIndexer(ICProject project, IProgressMonitor pm) throws InterruptedException {
final IProject prj= project.getProject(); final IProject prj= project.getProject();
final String name = prj.getName(); final String name = prj.getName();
if (fTraceIndexerSetup) if (fTraceIndexerSetup)
System.out.println("Indexer: Creation for project " + name); //$NON-NLS-1$ System.out.println("Indexer: Creation for project " + name); //$NON-NLS-1$
assert !Thread.holdsLock(fProjectToPDOM); assert !Thread.holdsLock(fProjectToPDOM);
try { try {
// Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485 // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485
synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) { synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) {
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
if (fClosingProjects.contains(name)) { if (fClosingProjects.contains(name)) {
if (fTraceIndexerSetup) if (fTraceIndexerSetup)
System.out.println("Indexer: Aborting setup (1) for closing project " + name + " [1]"); //$NON-NLS-1$ //$NON-NLS-2$ System.out.println("Indexer: Aborting setup (1) for closing project " + name + " [1]"); //$NON-NLS-1$ //$NON-NLS-2$
return; return;
} }
WritablePDOM pdom= getOrCreatePDOM(project); WritablePDOM pdom= getOrCreatePDOM(project);
Properties props= IndexerPreferences.getProperties(prj); Properties props= IndexerPreferences.getProperties(prj);
IPDOMIndexer indexer= newIndexer(getIndexerId(project), props); IPDOMIndexer indexer= newIndexer(getIndexerId(project), props);
IndexUpdatePolicy policy= createPolicy(project); IndexUpdatePolicy policy= createPolicy(project);
boolean rebuild= boolean rebuild=
pdom.isClearedBecauseOfVersionMismatch() || pdom.isClearedBecauseOfVersionMismatch() ||
pdom.isCreatedFromScratch() || pdom.isCreatedFromScratch() ||
policy.isInitialRebuildRequested(); policy.isInitialRebuildRequested();
@ -593,7 +593,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
pdom.releaseReadLock(); pdom.releaseReadLock();
} }
if (resume) { if (resume) {
if (fTraceIndexerSetup) if (fTraceIndexerSetup)
System.out.println("Indexer: Resuming for project " + name); //$NON-NLS-1$ System.out.println("Indexer: Resuming for project " + name); //$NON-NLS-1$
enqueue(new PDOMUpdateTask(indexer, enqueue(new PDOMUpdateTask(indexer,
@ -612,7 +612,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) { synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) {
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
if (fClosingProjects.contains(name)) { if (fClosingProjects.contains(name)) {
if (fTraceIndexerSetup) if (fTraceIndexerSetup)
System.out.println("Indexer: Aborting setup for closing project " + name + " [2]"); //$NON-NLS-1$ //$NON-NLS-2$ System.out.println("Indexer: Aborting setup for closing project " + name + " [2]"); //$NON-NLS-1$ //$NON-NLS-2$
return; return;
} }
@ -626,13 +626,13 @@ public class PDOMManager implements IWritableIndexManager, IListener {
IPDOMIndexerTask task= null; IPDOMIndexerTask task= null;
if (operation.wasSuccessful()) { if (operation.wasSuccessful()) {
if (fTraceIndexerSetup) if (fTraceIndexerSetup)
System.out.println("Indexer: Imported shared index for project " + name); //$NON-NLS-1$ System.out.println("Indexer: Imported shared index for project " + name); //$NON-NLS-1$
task= new PDOMUpdateTask(indexer, task= new PDOMUpdateTask(indexer,
IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH); IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH);
} else { } else {
if (fTraceIndexerSetup) if (fTraceIndexerSetup)
System.out.println("Indexer: Rebuiding for project " + name); //$NON-NLS-1$ System.out.println("Indexer: Rebuiding for project " + name); //$NON-NLS-1$
task= new PDOMRebuildTask(indexer); task= new PDOMRebuildTask(indexer);
} }
enqueue(task); enqueue(task);
@ -644,7 +644,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
} }
} }
private IPDOMIndexer newIndexer(String indexerId, Properties props) throws CoreException { private IPDOMIndexer newIndexer(String indexerId, Properties props) throws CoreException {
IPDOMIndexer indexer = null; IPDOMIndexer indexer = null;
// Look up in extension point // Look up in extension point
@ -659,14 +659,14 @@ public class PDOMManager implements IWritableIndexManager, IListener {
indexer.setProperties(props); indexer.setProperties(props);
} catch (CoreException e) { } catch (CoreException e) {
CCorePlugin.log(e); CCorePlugin.log(e);
} }
break; break;
} }
} }
} }
// Unknown index, default to the null one // Unknown index, default to the null one
if (indexer == null) if (indexer == null)
indexer = new PDOMNullIndexer(); indexer = new PDOMNullIndexer();
return indexer; return indexer;
@ -700,7 +700,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
fIndexerJob.schedule(); fIndexerJob.schedule();
} }
} }
private void getReferencingProjects(IProject prj, HashSet<IProject> result) { private void getReferencingProjects(IProject prj, HashSet<IProject> result) {
LinkedList<IProject> projectsToSearch= new LinkedList<IProject>(); LinkedList<IProject> projectsToSearch= new LinkedList<IProject>();
projectsToSearch.add(prj); projectsToSearch.add(prj);
@ -731,7 +731,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
return result; return result;
} }
void cancelledIndexerJob(boolean byManager) { void cancelledIndexerJob(boolean byManager) {
synchronized (fTaskQueue) { synchronized (fTaskQueue) {
fCurrentTask= null; fCurrentTask= null;
@ -743,7 +743,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
} }
} }
@Override @Override
public boolean isIndexerIdle() { public boolean isIndexerIdle() {
return Job.getJobManager().find(this).length == 0; return Job.getJobManager().find(this).length == 0;
@ -753,19 +753,19 @@ public class PDOMManager implements IWritableIndexManager, IListener {
final String name = cproject.getProject().getName(); final String name = cproject.getProject().getName();
if (fTraceIndexerSetup) { if (fTraceIndexerSetup) {
System.out.println("Indexer: Adding new project " + name); //$NON-NLS-1$ System.out.println("Indexer: Adding new project " + name); //$NON-NLS-1$
} }
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
fClosingProjects.remove(name); fClosingProjects.remove(name);
} }
setupProject(cproject); setupProject(cproject);
} }
void setupProject(final ICProject cproject) { void setupProject(final ICProject cproject) {
if (fInShutDown) if (fInShutDown)
return; return;
synchronized (fProjectQueue) { synchronized (fProjectQueue) {
fProjectQueue.add(cproject); fProjectQueue.add(cproject);
} }
@ -804,7 +804,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
if (indexer != null && indexer.getID().equals(IPDOMManager.ID_NO_INDEXER)) { if (indexer != null && indexer.getID().equals(IPDOMManager.ID_NO_INDEXER)) {
return; return;
} }
if (added.length > 0 || changed.length > 0 || removed.length > 0) { if (added.length > 0 || changed.length > 0 || removed.length > 0) {
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
IndexUpdatePolicy policy= createPolicy(project); IndexUpdatePolicy policy= createPolicy(project);
@ -835,7 +835,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
public void preDeleteProject(ICProject cproject) { public void preDeleteProject(ICProject cproject) {
preRemoveProject(cproject, true); preRemoveProject(cproject, true);
} }
public void preCloseProject(ICProject cproject) { public void preCloseProject(ICProject cproject) {
@ -848,8 +848,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
final IProject rproject= cproject.getProject(); final IProject rproject= cproject.getProject();
final String name = rproject.getName(); final String name = rproject.getName();
if (fTraceIndexerSetup) if (fTraceIndexerSetup)
System.out.println("Indexer: Removing project " + name + "; delete=" + delete); //$NON-NLS-1$ //$NON-NLS-2$ System.out.println("Indexer: Removing project " + name + "; delete=" + delete); //$NON-NLS-1$ //$NON-NLS-2$
IPDOMIndexer indexer; IPDOMIndexer indexer;
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
@ -896,12 +896,12 @@ public class PDOMManager implements IWritableIndexManager, IListener {
job.setSystem(true); job.setSystem(true);
job.schedule(); job.schedule();
} }
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
fUpdatePolicies.remove(cproject); fUpdatePolicies.remove(cproject);
} }
} }
void removeProject(ICProject cproject, ICElementDelta delta) { void removeProject(ICProject cproject, ICElementDelta delta) {
synchronized (fProjectToPDOM) { synchronized (fProjectToPDOM) {
IProject rproject= cproject.getProject(); IProject rproject= cproject.getProject();
@ -921,7 +921,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
policy.clearTUs(); policy.clearTUs();
policy.setIndexer(null); policy.setIndexer(null);
} }
} }
} }
cancelIndexerJobs(indexer); cancelIndexerJobs(indexer);
} }
@ -937,13 +937,13 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
jobToCancel= fIndexerJob; jobToCancel= fIndexerJob;
} }
if (jobToCancel != null) { if (jobToCancel != null) {
assert !Thread.holdsLock(fTaskQueue); assert !Thread.holdsLock(fTaskQueue);
jobToCancel.cancelJobs(indexer, true); jobToCancel.cancelJobs(indexer, true);
} }
} }
private void reindexAll() { private void reindexAll() {
ICProject[] cProjects; ICProject[] cProjects;
try { try {
@ -958,7 +958,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
@Override @Override
public void reindex(final ICProject project) { public void reindex(final ICProject project) {
Job job= new Job(Messages.PDOMManager_notifyJob_label) { Job job= new Job(Messages.PDOMManager_notifyJob_label) {
@Override @Override
protected IStatus run(IProgressMonitor monitor) { protected IStatus run(IProgressMonitor monitor) {
IPDOMIndexer indexer= null; IPDOMIndexer indexer= null;
@ -999,7 +999,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
public void removeIndexChangeListener(IIndexChangeListener listener) { public void removeIndexChangeListener(IIndexChangeListener listener) {
fChangeListeners.remove(listener); fChangeListeners.remove(listener);
} }
@Override @Override
public void addIndexerStateListener(IIndexerStateListener listener) { public void addIndexerStateListener(IIndexerStateListener listener) {
fStateListeners.add(listener); fStateListeners.add(listener);
@ -1029,7 +1029,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
notify.setSystem(true); notify.setSystem(true);
return notify; return notify;
} }
private void scheduleNotification(Runnable notify) { private void scheduleNotification(Runnable notify) {
if (fInShutDown) if (fInShutDown)
return; return;
@ -1079,12 +1079,12 @@ public class PDOMManager implements IWritableIndexManager, IListener {
if (fChangeListeners.isEmpty()) { if (fChangeListeners.isEmpty()) {
return; return;
} }
ICProject project; ICProject project;
synchronized (fProjectToPDOM) { synchronized (fProjectToPDOM) {
project = fFileToProject.get(pdom.getPath()); project = fFileToProject.get(pdom.getPath());
} }
if (project != null) { if (project != null) {
final ICProject finalProject= project; final ICProject finalProject= project;
Runnable notify= new Runnable() { Runnable notify= new Runnable() {
@ -1145,10 +1145,10 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
} }
} }
int getMonitorMessage(PDOMIndexerJob job, int currentTicks, int base) { int getMonitorMessage(PDOMIndexerJob job, int currentTicks, int base) {
assert !Thread.holdsLock(fTaskQueue); assert !Thread.holdsLock(fTaskQueue);
int sourceCount, sourceEstimate, headerCount, tickCount, tickEstimate; int sourceCount, sourceEstimate, headerCount, tickCount, tickEstimate;
String detail= null; String detail= null;
synchronized (fTaskQueue) { synchronized (fTaskQueue) {
@ -1175,14 +1175,14 @@ public class PDOMManager implements IWritableIndexManager, IListener {
detail= PDOMIndexerJob.sMonitorDetail; detail= PDOMIndexerJob.sMonitorDetail;
} }
} }
String msg= MessageFormat.format(Messages.PDOMManager_indexMonitorDetail, new Object[] { String msg= MessageFormat.format(Messages.PDOMManager_indexMonitorDetail, new Object[] {
new Integer(sourceCount), new Integer(sourceEstimate), new Integer(sourceCount), new Integer(sourceEstimate),
new Integer(headerCount)}); new Integer(headerCount)});
if (detail != null) { if (detail != null) {
msg += ": " + detail; //$NON-NLS-1$ msg += ": " + detail; //$NON-NLS-1$
} }
job.subTask(msg); job.subTask(msg);
if (tickCount > 0 && tickCount <= tickEstimate) { if (tickCount > 0 && tickCount <= tickEstimate) {
int newTick= tickCount*base/tickEstimate; int newTick= tickCount*base/tickEstimate;
@ -1218,7 +1218,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
public IIndex getIndex(ICProject[] projects, int options) throws CoreException { public IIndex getIndex(ICProject[] projects, int options) throws CoreException {
return fIndexFactory.getIndex(projects, options); return fIndexFactory.getIndex(projects, options);
} }
/** /**
* Exports the project PDOM to the specified location, rewriting locations with * Exports the project PDOM to the specified location, rewriting locations with
* the specified location converter. * the specified location converter.
@ -1255,7 +1255,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
// overwrite internal location representations // overwrite internal location representations
final WritablePDOM newPDOM = new WritablePDOM(targetLocation, pdom.getLocationConverter(), getLinkageFactories()); final WritablePDOM newPDOM = new WritablePDOM(targetLocation, pdom.getLocationConverter(), getLinkageFactories());
newPDOM.acquireWriteLock(); newPDOM.acquireWriteLock();
try { try {
newPDOM.rewriteLocations(newConverter); newPDOM.rewriteLocations(newConverter);
@ -1275,7 +1275,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
/** /**
* Resets the pdom for the project with the provided stream. * Resets the pdom for the project with the provided stream.
* @throws CoreException * @throws CoreException
* @throws OperationCanceledException in case the thread was interrupted * @throws OperationCanceledException in case the thread was interrupted
* @since 4.0 * @since 4.0
@ -1294,11 +1294,11 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
if (version > PDOM.getMaxSupportedVersion()) { if (version > PDOM.getMaxSupportedVersion()) {
final IStatus status = new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, 0, CCorePlugin.getResourceString("PDOMManager.unsupportedHigherVersion"), null); //$NON-NLS-1$ final IStatus status = new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, 0, CCorePlugin.getResourceString("PDOMManager.unsupportedHigherVersion"), null); //$NON-NLS-1$
throw new CoreException(status); throw new CoreException(status);
} }
if ( !PDOM.isSupportedVersion( version ) ) { if ( !PDOM.isSupportedVersion( version ) ) {
final IStatus status = new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, 0, CCorePlugin.getResourceString("PDOMManager.unsupportedVersion"), null); //$NON-NLS-1$ final IStatus status = new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, 0, CCorePlugin.getResourceString("PDOMManager.unsupportedVersion"), null); //$NON-NLS-1$
throw new CoreException(status); throw new CoreException(status);
} }
byte[] buffer= new byte[2048]; byte[] buffer= new byte[2048];
int read; int read;
@ -1308,7 +1308,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} finally { } finally {
out.close(); out.close();
} }
WritablePDOM pdom= (WritablePDOM) getPDOM(project); WritablePDOM pdom= (WritablePDOM) getPDOM(project);
try { try {
pdom.acquireWriteLock(); pdom.acquireWriteLock();
@ -1323,7 +1323,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
pdom.releaseWriteLock(); pdom.releaseWriteLock();
} }
} }
@Override @Override
public void export(ICProject project, String location, int options, IProgressMonitor monitor) throws CoreException { public void export(ICProject project, String location, int options, IProgressMonitor monitor) throws CoreException {
TeamPDOMExportOperation operation= new TeamPDOMExportOperation(project); TeamPDOMExportOperation operation= new TeamPDOMExportOperation(project);
@ -1331,7 +1331,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
operation.setOptions(options); operation.setOptions(options);
operation.run(monitor); operation.run(monitor);
} }
/** /**
* Write metadata appropriate for a project pdom * Write metadata appropriate for a project pdom
* @param pdom the pdom to write to * @param pdom the pdom to write to
@ -1362,7 +1362,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
for (Map.Entry<ICProject, List<ICElement>> entry : projectsToElements.entrySet()) { for (Map.Entry<ICProject, List<ICElement>> entry : projectsToElements.entrySet()) {
ICProject project = entry.getKey(); ICProject project = entry.getKey();
List<ICElement> filesAndFolders = entry.getValue(); List<ICElement> filesAndFolders = entry.getValue();
update(project, filesAndFolders, options); update(project, filesAndFolders, options);
} }
} }
@ -1389,14 +1389,14 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} else if (contains(element, other)) { } else if (contains(element, other)) {
set.set(j, element); set.set(j, element);
continue allElements; continue allElements;
} }
} }
set.add(element); set.add(element);
} }
} }
return result; return result;
} }
private boolean contains(final ICElement a, ICElement b) { private boolean contains(final ICElement a, ICElement b) {
if (a.equals(b)) { if (a.equals(b)) {
return true; return true;
@ -1493,7 +1493,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
if (fPostponedProjects.contains(project)) { if (fPostponedProjects.contains(project)) {
setupProject(project); setupProject(project);
} }
} }
} }
@Override @Override
@ -1512,7 +1512,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
} }
} }
/** /**
* @param project * @param project
* @return whether the specified project has been registered. If a project has * @return whether the specified project has been registered. If a project has
@ -1522,7 +1522,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
public boolean isProjectRegistered(ICProject project) { public boolean isProjectRegistered(ICProject project) {
return getIndexer(project) != null; return getIndexer(project) != null;
} }
/** /**
* @param cproject the project to check * @param cproject the project to check
* @return whether the content in the project fragment of the specified project's index * @return whether the content in the project fragment of the specified project's index
@ -1532,7 +1532,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
public boolean isProjectContentSynced(ICProject cproject) throws CoreException { public boolean isProjectContentSynced(ICProject cproject) throws CoreException {
if (!"true".equals(IndexerPreferences.get(cproject.getProject(), IndexerPreferences.KEY_INDEX_ALL_FILES, null))) //$NON-NLS-1$ if (!"true".equals(IndexerPreferences.get(cproject.getProject(), IndexerPreferences.KEY_INDEX_ALL_FILES, null))) //$NON-NLS-1$
return true; // no check performed in this case return true; // no check performed in this case
Set<ITranslationUnit> sources= new HashSet<ITranslationUnit>(); Set<ITranslationUnit> sources= new HashSet<ITranslationUnit>();
cproject.accept(new TranslationUnitCollector(sources, null, new NullProgressMonitor())); cproject.accept(new TranslationUnitCollector(sources, null, new NullProgressMonitor()));
@ -1558,7 +1558,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
return true; return true;
} }
private boolean isSubjectToIndexing(ILanguage language) { private boolean isSubjectToIndexing(ILanguage language) {
final int linkageID=language.getLinkageID(); final int linkageID=language.getLinkageID();
for (int id : IDS_FOR_LINKAGES_TO_INDEX) { for (int id : IDS_FOR_LINKAGES_TO_INDEX) {
@ -1580,7 +1580,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
private static boolean areSynchronized(Set<IIndexFileLocation> trail, IIndex index, IResource resource, IIndexFileLocation location) throws CoreException { private static boolean areSynchronized(Set<IIndexFileLocation> trail, IIndex index, IResource resource, IIndexFileLocation location) throws CoreException {
if (!trail.contains(location)) { if (!trail.contains(location)) {
trail.add(location); trail.add(location);
IIndexFile[] file= index.getFiles(location); IIndexFile[] file= index.getFiles(location);
// pre-includes may be listed twice (191989) // pre-includes may be listed twice (191989)
@ -1606,7 +1606,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
} }
} }
return true; return true;
} }