From 689c2a5f17c1b0aefadc10a1e58a090a802d7cc1 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Sun, 27 Nov 2011 20:02:02 -0500 Subject: [PATCH] Moved ILanguageSettingsChangeListener & ILanguageSettingsChangeEvent to API package, same for serializeLanguageSettings() & serializeLanguageSettingsWorkspace() --- .../AbstractBuildCommandParser.java | 35 ++-- .../AbstractBuiltinSpecsDetector.java | 90 ++++----- .../LanguageSettingsListenersTests.java | 29 ++- ...nguageSettingsPersistenceProjectTests.java | 2 +- ...ILanguageSettingsBroadcastingProvider.java | 1 - .../ILanguageSettingsChangeEvent.java | 2 +- .../ILanguageSettingsChangeListener.java | 6 +- .../providers/LanguageSettingsManager.java | 40 +++- .../LanguageSettingsManager_TBD.java | 2 +- .../LanguageSettingsSerializableProvider.java | 6 +- .../providers/LanguageSettingsLogger.java | 2 +- .../LanguageSettingsProvidersSerializer.java | 23 ++- .../model/CConfigurationSpecSettings.java | 7 +- .../model/SettingsModelMessages.properties | 1 - .../xml/XmlProjectDescriptionStorage.java | 3 +- .../pdom/LanguageSettingsChangeListener.java | 20 +- .../cdt/internal/core/pdom/PDOMManager.java | 180 +++++++++--------- 17 files changed, 243 insertions(+), 206 deletions(-) rename core/org.eclipse.cdt.core/model/org/eclipse/cdt/{internal => }/core/language/settings/providers/ILanguageSettingsChangeEvent.java (96%) rename core/org.eclipse.cdt.core/model/org/eclipse/cdt/{internal => }/core/language/settings/providers/ILanguageSettingsChangeListener.java (75%) diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java index b0dff614c2d..e3159346705 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java @@ -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.settings.model.ICConfigurationDescription; 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.core.resources.IFolder; import org.eclipse.core.resources.ResourcesPlugin; @@ -40,7 +39,7 @@ import org.eclipse.core.runtime.jobs.Job; /** * TODO - class description - * + * * Note: IErrorParser interface is used here to work around {@link ConsoleOutputSniffer} having * 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 Pattern OPTIONS_PATTERN = Pattern.compile("-[^\\s\"']*(\\s*((\".*?\")|('.*?')|([^-\\s][^\\s]+)))?"); //$NON-NLS-1$ private static final int OPTION_GROUP = 0; - + /** * 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 }; private static final int FILE_GROUP = 2; - - + + @SuppressWarnings("nls") private String getCompilerCommandPattern() { String parameter = getCustomParameter(); @@ -88,7 +87,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting if (line==null) { return null; } - + for (String template : PATTERN_TEMPLATES) { String pattern = makePattern(template); Matcher fileMatcher = Pattern.compile(pattern).matcher(line); @@ -106,7 +105,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting if (line==null || currentResource==null) { return null; } - + List options = new ArrayList(); Matcher optionMatcher = OPTIONS_PATTERN.matcher(line); while (optionMatcher.find()) { @@ -134,33 +133,23 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting scheduleSerializingJob(currentCfgDescription); super.shutdown(); } - + private void scheduleSerializingJob(final ICConfigurationDescription cfgDescription) { Job job = new Job("Serialize CDT language settings entries") { @Override protected IStatus run(IProgressMonitor monitor) { - // FIXME - remove thread name reassigning - Thread thread = getThread(); - String oldName = thread.getName(); - thread.setName("CDT LSP Serializer,BOP"); - - IStatus status = null; + IStatus status = Status.OK_STATUS; try { if (cfgDescription != null) { - LanguageSettingsProvidersSerializer.serializeLanguageSettings(cfgDescription.getProjectDescription()); + LanguageSettingsManager.serializeLanguageSettings(cfgDescription.getProjectDescription()); } else { - LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); + LanguageSettingsManager.serializeLanguageSettingsWorkspace(); } } catch (CoreException e) { status = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e); MakeCorePlugin.log(status); } - - if (status == null) - status = Status.OK_STATUS; - - thread.setName(oldName); return status; } @Override @@ -168,7 +157,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting return family == JOB_FAMILY_BUILD_COMMAND_PARSER; } }; - + ISchedulingRule rule = null; if (currentProject != null) { 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 * of this parser. Intended for better troubleshooting experience. * 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 { public AbstractBuildCommandPatternHighlighter(String buildCommandParserPluginExtension) { diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuiltinSpecsDetector.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuiltinSpecsDetector.java index 61a9c158ee6..2264e3f1af5 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuiltinSpecsDetector.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuiltinSpecsDetector.java @@ -28,6 +28,7 @@ import org.eclipse.cdt.core.IMarkerGenerator; import org.eclipse.cdt.core.ProblemMarkerInfo; import org.eclipse.cdt.core.index.IIndexManager; 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.ICElement; 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.XmlUtil; 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.internal.core.MakeMessages; import org.eclipse.cdt.make.internal.core.StreamMonitor; @@ -99,7 +99,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti protected URI mappedRootURI = null; protected URI buildDirURI = null; - + 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 PROVIDER = "provider"; //$NON-NLS-1$ @@ -135,14 +135,14 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } catch (CoreException e) { return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), "Error removing markers.", e); } - + // add new marker try { IMarker marker = problemMarkerInfo.file.createMarker(SDMarkerGenerator.SCANNER_DISCOVERY_PROBLEM_MARKER); marker.setAttribute(IMarker.MESSAGE, problemMarkerInfo.description); marker.setAttribute(IMarker.SEVERITY, problemMarkerInfo.severity); marker.setAttribute(SDMarkerGenerator.PROVIDER, providerId); - + if (problemMarkerInfo.file instanceof IWorkspaceRoot) { marker.setAttribute(IMarker.LOCATION, "SD90 Providers, [" + providerName + "] options in Preferences"); } else { @@ -151,7 +151,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } catch (CoreException e) { return new Status(Status.ERROR, MakeCorePlugin.getUniqueIdentifier(), "Error adding markers.", e); } - + return Status.OK_STATUS; } }; @@ -159,9 +159,9 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti markerJob.setRule(problemMarkerInfo.file); markerJob.schedule(); } - + } - + /** * This ICConsoleParser handles each individual run for one language from * {@link AbstractBuiltinSpecsDetector#runForEachLanguage(ICConfigurationDescription, IPath, String[], IProgressMonitor)} @@ -220,7 +220,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti // This works as if workspace-wide return null; } - + @Override protected String determineLanguage() { // language id is supposed to be set by run(), just return it @@ -234,7 +234,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } return mappedRootURI; } - + @Override protected URI getBuildDirURI(URI mappedRootURI) { if (buildDirURI==null) { @@ -246,7 +246,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti @Override public void registerListener(ICConfigurationDescription cfgDescription) { LanguageSettingsLogger.logInfo(getPrefixForLog() + "registerListener [" + System.identityHashCode(this) + "] " + this); - + currentCfgDescription = cfgDescription; execute(); } @@ -264,7 +264,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti return; } isExecuted = true; - + Job job = new Job("Discover compiler's built-in language settings") { @Override protected IStatus run(IProgressMonitor monitor) { @@ -275,7 +275,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti return family == JOB_FAMILY_BUILTIN_SPECS_DETECTOR; } }; - + IProject ownerProject = null; if (currentCfgDescription != null) { ICProjectDescription prjDescription = currentCfgDescription.getProjectDescription(); @@ -292,7 +292,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } job.setRule(rule); job.schedule(); - + // TODO - remove me 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); - + boolean isChanged = false; mappedRootURI = null; buildDirURI = null; - + if (monitor == null) { monitor = new NullProgressMonitor(); } try { - + List languageIds = getLanguageScope(); if (languageIds != null) { int totalWork = TICKS_CLEAN_MARKERS + languageIds.size()*TICKS_RUN_FOR_ONE_LANGUAGE + TICKS_SERIALIZATION; monitor.beginTask("CDT Scanner Discovery", totalWork * TICKS_SCALE); - + IResource markersResource = currentProject!= null ? currentProject : ResourcesPlugin.getWorkspace().getRoot(); - + // clear old markers monitor.subTask("Clearing stale markers"); try { @@ -342,19 +342,19 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } catch (CoreException e) { MakeCorePlugin.log(e); } - + if (monitor.isCanceled()) throw new OperationCanceledException(); - + monitor.worked(TICKS_CLEAN_MARKERS * TICKS_SCALE); - + for (String languageId : languageIds) { List oldEntries = getSettingEntries(cfgDescription, null, languageId); try { startupForLanguage(languageId); if (monitor.isCanceled()) throw new OperationCanceledException(); - + runForLanguage(workingDirectory, env, new SubProgressMonitor(monitor, TICKS_RUN_FOR_ONE_LANGUAGE * TICKS_SCALE)); if (monitor.isCanceled()) throw new OperationCanceledException(); @@ -367,24 +367,24 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } List newEntries = getSettingEntries(cfgDescription, null, languageId); isChanged = isChanged || newEntries != oldEntries; - + } } - + monitor.subTask("Serializing results"); if (isChanged) { // avoids resource and settings change notifications try { if (currentCfgDescription != null) { - LanguageSettingsProvidersSerializer.serializeLanguageSettings(currentCfgDescription.getProjectDescription()); + LanguageSettingsManager.serializeLanguageSettings(currentCfgDescription.getProjectDescription()); } else { - LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); + LanguageSettingsManager.serializeLanguageSettingsWorkspace(); } } catch (CoreException e) { IStatus s = new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, IStatus.ERROR, "Error serializing language settings", e); MakeCorePlugin.log(s); status.merge(s); } - + // AG: FIXME - rather send event that ls settings changed if (currentCfgDescription != null) { ICProject icProject = CoreModel.getDefault().create(currentProject); @@ -402,7 +402,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } if (monitor.isCanceled()) throw new OperationCanceledException(); - + monitor.worked(TICKS_SERIALIZATION * TICKS_SCALE); } catch (OperationCanceledException e) { if (!status.isOK()) { @@ -418,7 +418,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti shutdown(); currentCfgDescription = cfgDescription; // current description gets cleared in super.shutdown(), keep it } - + return status; } @@ -427,7 +427,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti specFile = null; // can get set in resolveCommand() currentCommandResolved = resolveCommand(currentLanguageId); - + detectedSettingEntries = new ArrayList(); collected = 0; } @@ -435,20 +435,20 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti protected void shutdownForLanguage() { if (detectedSettingEntries != null && detectedSettingEntries.size() > 0) { collected = detectedSettingEntries.size(); - + LanguageSettingsLogger.logInfo(getPrefixForLog() + getClass().getSimpleName() + " collected " + detectedSettingEntries.size() + " entries" + " for language " + currentLanguageId); - + setSettingEntries(currentCfgDescription, currentResource, currentLanguageId, detectedSettingEntries); } detectedSettingEntries = null; - + currentCommandResolved = null; if (specFile!=null && !preserveSpecFile) { specFile.delete(); specFile = null; } - + currentLanguageId = null; } @@ -473,21 +473,21 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti if (monitor == null) { monitor = new NullProgressMonitor(); } - + try { - // StreamMonitor will do monitor.beginTask(...) + // StreamMonitor will do monitor.beginTask(...) StreamMonitor streamMon = new StreamMonitor(monitor, errorParserManager, TICKS_STREAM_MONITOR); OutputStream stdout = streamMon; OutputStream stderr = streamMon; - + String msg = "Running scanner discovery: " + getName(); printLine(stdout, "**** " + msg + " ****" + NEWLINE); - + ConsoleParser consoleParser = new ConsoleParser(); ConsoleOutputSniffer sniffer = new ConsoleOutputSniffer(stdout, stderr, new IConsoleParser[] { consoleParser }, errorParserManager); OutputStream consoleOut = sniffer.getOutputStream(); OutputStream consoleErr = sniffer.getErrorStream(); - + boolean isSuccess = false; try { 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, OutputStream consoleOut, OutputStream consoleErr) throws CoreException, IOException { - + if (command==null || command.trim().length()==0) { return false; } @@ -575,7 +575,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } return false; } - + printLine(consoleOut, NEWLINE + "**** Collected " + detectedSettingEntries.size() + " entries. ****"); return true; } @@ -601,7 +601,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti String consoleId = MakeCorePlugin.PLUGIN_ID + '.' + getId() + '.' + currentLanguageId; String consoleName = getName() + ", " + ld.getName(); URL defaultIcon = Platform.getBundle(PLUGIN_CDT_MAKE_UI_ID).getEntry("icons/obj16/inspect_system.gif"); - + IConsole console = CCorePlugin.getDefault().getConsole(extConsoleId, consoleId, consoleName, defaultIcon); return console; } @@ -642,7 +642,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti if (specExt != null) { ext = '.' + specExt; } - + String specFileName = SPEC_FILE_BASE + ext; IPath workingLocation = MakeCorePlugin.getWorkingDirectory(); 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 * from the list as there could be multiple extensions associated with the given language. - * + * * @param languageId - given language ID. * @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) { MakeCorePlugin.log(new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, "Unable to find file extension for language "+languageId)); } diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java index 199fc827abd..0ccb02d6603 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java @@ -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.testplugin.ResourceHelper; 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; /** @@ -83,7 +80,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { @Override protected void tearDown() throws Exception { - LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(mockLseListener); + LanguageSettingsManager.unregisterLanguageSettingsChangeListener(mockLseListener); LanguageSettingsManager.setWorkspaceProviders(null); super.tearDown(); } @@ -547,7 +544,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { } // register mock listener to inspect the notifications - LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); + LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); @@ -601,7 +598,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { } // register mock listener to inspect the notifications - LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); + LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); @@ -666,7 +663,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { } // register mock listener to inspect the notifications - LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); + LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); @@ -692,7 +689,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(null, mockLseListener.getLastEvent()); // Serialize settings - LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription); + LanguageSettingsManager.serializeLanguageSettings(prjDescription); // inspect event assertEquals(1, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); @@ -730,7 +727,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { } // register mock listener to inspect the notifications - LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); + LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); @@ -762,7 +759,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertNull(mockLseListener.getLastEvent()); // Serialize settings - LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_1); + LanguageSettingsManager.serializeLanguageSettings(prjDescription_1); // inspect event assertEquals(1, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); @@ -793,7 +790,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertNull(mockLseListener.getLastEvent()); // Serialize settings - LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_2); + LanguageSettingsManager.serializeLanguageSettings(prjDescription_2); // inspect event assertEquals(0, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); @@ -825,7 +822,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { } // register mock listener to inspect the notifications - LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); + LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); @@ -886,7 +883,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { } // register mock listener to inspect the notifications - LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); + LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); @@ -938,7 +935,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); // register mock listener to inspect the notifications - LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); + LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); // Add empty global provider { @@ -988,7 +985,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(null, mockLseListener.getLastEvent()); // Serialize settings - LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); + LanguageSettingsManager.serializeLanguageSettingsWorkspace(); // get cfgDescriptionId ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); @@ -1023,7 +1020,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(null, mockLseListener.getLastEvent()); // Serialize settings - LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); + LanguageSettingsManager.serializeLanguageSettingsWorkspace(); // get cfgDescriptionId ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java index d50ce050a5f..8b130abe4b0 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java @@ -304,7 +304,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { assertEquals(entries.size(), actual.size()); // serialize language settings of workspace providers - LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); + LanguageSettingsManager.serializeLanguageSettingsWorkspace(); // clear the provider extProvider.setSettingEntries(null, null, null, null); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsBroadcastingProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsBroadcastingProvider.java index e4ec18493d5..5ab3297eab3 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsBroadcastingProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsBroadcastingProvider.java @@ -14,7 +14,6 @@ import java.util.List; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; 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.core.resources.IResource; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ILanguageSettingsChangeEvent.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeEvent.java similarity index 96% rename from core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ILanguageSettingsChangeEvent.java rename to core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeEvent.java index b5df5b35840..15099441d9b 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ILanguageSettingsChangeEvent.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeEvent.java @@ -8,7 +8,7 @@ * Contributors: * 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; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ILanguageSettingsChangeListener.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeListener.java similarity index 75% rename from core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ILanguageSettingsChangeListener.java rename to core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeListener.java index 8230200c5cd..2c3ca4c7886 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ILanguageSettingsChangeListener.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeListener.java @@ -8,15 +8,15 @@ * Contributors: * 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; /** * An interface for listeners to changes in language settings {@link ICLanguageSettingEntry}. * - * @see LanguageSettingsProvidersSerializer#registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener) - * @see LanguageSettingsProvidersSerializer#unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener) + * @see LanguageSettingsManager#registerLanguageSettingsChangeListener(ILanguageSettingsChangeListener) + * @see LanguageSettingsManager#unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener) */ public interface ILanguageSettingsChangeListener { /** diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager.java index 8122e0dffdf..4fa512496ad 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager.java @@ -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.ICLanguageSetting; 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.ICSettingEntry; 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. * See {@link ILanguageSettingsProvider}. - * - * @since 6.0 */ public class LanguageSettingsManager { /** @@ -257,4 +256,41 @@ public class LanguageSettingsManager { 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(); + } + } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java index a7054aaf9b9..d0ea6724b89 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java @@ -51,7 +51,7 @@ public class LanguageSettingsManager_TBD { try { return ! LanguageSettingsExtensionManager.equalsExtensionProviderShallow((ILanguageSettingsEditableProvider) provider); } catch (Exception e) { - CCorePlugin.log("Internal Error: cannot clone provider "+provider.getId(), e); + CCorePlugin.log(e); } } return false; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java index 2313ee731b7..27af0a2ca59 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java @@ -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.ICProjectDescription; 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.core.resources.IResource; import org.w3c.dom.Element; @@ -156,9 +155,8 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr * Sets language settings entries for the provider. * 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 - * {@fixme FIXME - update references with API versions} - * {@link LanguageSettingsProvidersSerializer#serializeLanguageSettings(ICProjectDescription)} or - * {@link LanguageSettingsProvidersSerializer#serializeLanguageSettingsWorkspace()}. + * {@link LanguageSettingsManager#serializeLanguageSettings(ICProjectDescription)} or + * {@link LanguageSettingsManager#serializeLanguageSettingsWorkspace()}. * See for example {@code AbstractBuildCommandParser} and {@code AbstractBuiltinSpecsDetector} * in build plugins. * diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsLogger.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsLogger.java index ee98cfda988..0f13e949067 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsLogger.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsLogger.java @@ -66,7 +66,7 @@ public class LanguageSettingsLogger { @Deprecated public static void logScannerInfoProvider(IResource rc, Object who) { 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) { LanguageSettingsLogger.logInfo(msg); } else if (rc instanceof IProject) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java index 6c6fa6bb28b..864229a31f2 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java @@ -8,7 +8,6 @@ * Contributors: * Andrew Gvozdev - initial API and implementation *******************************************************************************/ - package org.eclipse.cdt.internal.core.language.settings.providers; import java.net.URI; @@ -20,6 +19,8 @@ import java.util.Map; import org.eclipse.cdt.core.CCorePlugin; 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.ILanguageSettingsProvider; 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.NodeList; +/** + * Helper class handling serialization and notifications for language settings entries {@link ICLanguageSettingEntry}. + */ 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 SETTINGS_FOLDER_NAME = ".settings/"; //$NON-NLS-1$ private static final String STORAGE_PROJECT_LANGUAGE_SETTINGS = "language.settings.xml"; //$NON-NLS-1$ @@ -372,6 +376,11 @@ projects: return events; } + /** + * Save language settings providers of the workspace (global providers) to persistent storage. + * + * @throws CoreException + */ public static void serializeLanguageSettingsWorkspace() throws CoreException { 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 { IProject project = prjDescription.getProject(); LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettings() for " + project); @@ -993,7 +1008,7 @@ projects: /** * 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) { fLanguageSettingsChangeListeners.add(listener); @@ -1002,7 +1017,7 @@ projects: /** * Removes a language settings change listener. * - * @param listener the ILanguageMappingChangeListener to remove. + * @param listener the listener to remove. */ public static void unregisterLanguageSettingsChangeListener(ILanguageSettingsChangeListener listener) { fLanguageSettingsChangeListeners.remove(listener); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java index 6b140bba8ea..773244bc9ae 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java @@ -49,7 +49,6 @@ import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSetting import org.eclipse.cdt.utils.envvar.StorableEnvironment; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.QualifiedName; -import org.eclipse.osgi.util.NLS; /** * CConfigurationSpecSettings impelements ICSettingsStorage @@ -1014,15 +1013,13 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{ for (ILanguageSettingsProvider provider : providers) { String id = provider.getId(); if (provider==LanguageSettingsProvidersSerializer.getRawWorkspaceProvider(id)) { - String msg = "Error: Attempt to add to the configuration raw global provider " + id; - throw new IllegalArgumentException(msg); + throw new IllegalArgumentException("Error: Attempt to add to the configuration raw global provider " + id); //$NON-NLS-1$ } if (!ids.contains(id)) { fLanguageSettingsProviders.add(provider); ids.add(id); } else { - String msg = NLS.bind(SettingsModelMessages.getString("CConfigurationSpecSettings.MustHaveUniqueID"), id); //$NON-NLS-1$ - throw new IllegalArgumentException(msg); + throw new IllegalArgumentException("Language Settings Providers must have unique ID. Duplicate ID=" + id); //$NON-NLS-1$ } } fIsModified = true; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SettingsModelMessages.properties b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SettingsModelMessages.properties index 09dd9fd56cb..38f30f17a08 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SettingsModelMessages.properties +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SettingsModelMessages.properties @@ -16,7 +16,6 @@ CConfigurationDescription.1=expected proxy of type ICFileDescription, but was CConfigurationDescription.2=data was not created CConfigurationDescription.3=expected proxy of type ICFolderDescription, but was CConfigurationDescriptionCache.0=description is read only -CConfigurationSpecSettings.MustHaveUniqueID=Language Settings Providers must have unique ID. Duplicate ID={0} CConfigurationStatus.1=configurations settings invalid CProjectConverterDesciptor.0=illegal provider implementation CProjectConverterDesciptor.1=no provider defined diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/xml/XmlProjectDescriptionStorage.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/xml/XmlProjectDescriptionStorage.java index e5dca0d567a..823ae253da7 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/xml/XmlProjectDescriptionStorage.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/xml/XmlProjectDescriptionStorage.java @@ -34,6 +34,7 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; 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.ICProjectDescriptionManager; import org.eclipse.cdt.core.settings.model.ICSettingsStorage; @@ -173,7 +174,7 @@ public class XmlProjectDescriptionStorage extends AbstractCProjectDescriptionSto serializingLock.acquire(); projectModificaitonStamp = serialize(fDes.getProject(), ICProjectDescriptionStorageType.STORAGE_FILE_NAME, fElement); ((ContributedEnvironment) CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment()).serialize(fDes); - LanguageSettingsProvidersSerializer.serializeLanguageSettings(fDes); + LanguageSettingsManager.serializeLanguageSettings(fDes); } finally { serializingLock.release(); Job.getJobManager().removeJobChangeListener(notifyJobCanceller); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java index 67ccc3f082f..bed48f79a17 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java @@ -11,10 +11,10 @@ package org.eclipse.cdt.internal.core.pdom; 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.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.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; @@ -24,21 +24,27 @@ import org.eclipse.core.resources.ResourcesPlugin; */ public class LanguageSettingsChangeListener implements ILanguageSettingsChangeListener { private PDOMManager fManager; - + + /** + * Constructor. + * + * @param manager - PDOM manager. + */ public LanguageSettingsChangeListener(PDOMManager manager) { fManager = manager; } - + + @Override public void handleEvent(ILanguageSettingsChangeEvent event) { IWorkspaceRoot wspRoot = ResourcesPlugin.getWorkspace().getRoot(); IProject project = wspRoot.getProject(event.getProjectName()); - + if (project != null) { ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project); if (prjDescription != null) { ICConfigurationDescription indexedCfgDescription = prjDescription.getDefaultSettingConfiguration(); String indexedCfgId = indexedCfgDescription.getId(); - + for (String cfgId : event.getConfigurationDescriptionIds()) { if (cfgId.equals(indexedCfgId)) { fManager.handlePostBuildEvent(); @@ -47,7 +53,7 @@ public class LanguageSettingsChangeListener implements ILanguageSettingsChangeLi } } } - + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java index 425c2b95641..bdb1a16b36d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java @@ -48,6 +48,7 @@ import org.eclipse.cdt.core.index.IIndexManager; import org.eclipse.cdt.core.index.IIndexerStateListener; import org.eclipse.cdt.core.index.IndexLocationFactory; 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.CoreModel; 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.IndexerStateEvent; 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.db.ChunkCache; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory; @@ -147,12 +147,12 @@ public class PDOMManager implements IWritableIndexManager, IListener { private final PDOMIndexerJob fIndexerJob; private IPDOMIndexerTask fCurrentTask; private int fSourceCount, fHeaderCount, fTickCount; - + private final LinkedList fChangeEvents= new LinkedList(); private final Job fNotificationJob; - private final AtomicMultiSet fFilesIndexedUnconditionlly= new AtomicMultiSet(); - + private final AtomicMultiSet fFilesIndexedUnconditionlly= new AtomicMultiSet(); + /** * 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 fFileToProject= new HashMap(); private ListenerList fChangeListeners= new ListenerList(); private ListenerList fStateListeners= new ListenerList(); - + private IndexChangeEvent fIndexChangeEvent= new IndexChangeEvent(); private IndexerStateEvent fIndexerStateEvent= new IndexerStateEvent(); @@ -170,17 +170,17 @@ public class PDOMManager implements IWritableIndexManager, IListener { private final ICProjectDescriptionListener fProjectDescriptionListener; private final JobChangeListener fJobChangeListener; private final IPreferenceChangeListener fPreferenceChangeListener; - + private IndexFactory fIndexFactory= new IndexFactory(this); 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. */ private Map fUpdatePolicies= new HashMap(); private Set fClosingProjects= new HashSet(); - + private Map fPrefListeners= new HashMap(); private List fSetupParticipants= new ArrayList(); private Set fPostponedProjects= new HashSet(); @@ -188,7 +188,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { private boolean fInShutDown; boolean fTraceIndexerSetup; - + public PDOMManager() { PDOM.sDEBUG_LOCKS= "true".equals(Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/index/locks")); //$NON-NLS-1$//$NON-NLS-2$ addIndexerSetupParticipant(new WaitForRefreshJobs()); @@ -204,7 +204,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { fIndexerJob= new PDOMIndexerJob(this); fNotificationJob= createNotifyJob(); } - + public Job startup() { fInShutDown= false; Job postStartupJob= new Job(CCorePlugin.getResourceString("CCorePlugin.startupJob")) { //$NON-NLS-1$ @@ -219,10 +219,10 @@ public class PDOMManager implements IWritableIndexManager, IListener { } }; postStartupJob.setSystem(true); - return postStartupJob; + return postStartupJob; } - /** + /** * Called from a job after plugin start. */ protected void postStartup() { @@ -234,13 +234,13 @@ public class PDOMManager implements IWritableIndexManager, IListener { adjustCacheSize(); updatePathCanonicalizationStrategy(); fIndexProviderManager.startup(); - + fTraceIndexerSetup= String.valueOf(true).equals(Platform.getDebugOption(TRACE_INDEXER_SETUP)); final CoreModel model = CoreModel.getDefault(); ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD); model.addElementChangedListener(fCModelListener); LanguageManager.getInstance().registerLanguageChangeListener(fLanguageChangeListener); - LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(fLanguageSettingsChangeListener); + LanguageSettingsManager.registerLanguageSettingsChangeListener(fLanguageSettingsChangeListener); final int types= CProjectDescriptionEvent.DATA_APPLIED; CCorePlugin.getDefault().getProjectDescriptionManager().addCProjectDescriptionListener(fProjectDescriptionListener, types); @@ -261,14 +261,14 @@ public class PDOMManager implements IWritableIndexManager, IListener { final CoreModel model = CoreModel.getDefault(); model.removeElementChangedListener(fCModelListener); ResourcesPlugin.getWorkspace().removeResourceChangeListener(fCModelListener); - LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(fLanguageSettingsChangeListener); + LanguageSettingsManager.unregisterLanguageSettingsChangeListener(fLanguageSettingsChangeListener); LanguageManager.getInstance().unregisterLanguageChangeListener(fLanguageChangeListener); PDOMIndexerJob jobToCancel= null; synchronized (fTaskQueue) { fTaskQueue.clear(); jobToCancel= fIndexerJob; } - + if (jobToCancel != null) { assert !Thread.holdsLock(fTaskQueue); jobToCancel.cancelJobs(null, false); @@ -290,7 +290,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { reindexAll(); } } - + protected void adjustCacheSize() { IPreferencesService prefs = Platform.getPreferencesService(); 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 */ public IPDOM getPDOM(ICProject project) throws CoreException { @@ -327,9 +327,9 @@ public class PDOMManager implements IWritableIndexManager, IListener { 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 * base is cleared, in case it does not exist it is created. In any * 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.addListener(this); - + fFileToProject.put(dbFile, project); fProjectToPDOM.put(rproject, pdom); if (pdomProxy instanceof PDOMProxy) { @@ -438,7 +438,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { public void setDefaultIndexerId(String indexerId) { IndexerPreferences.setDefaultIndexerId(indexerId); } - + @Override public String getIndexerId(ICProject project) { 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); CCoreInternals.savePreferences(prj, IndexerPreferences.getScope(prj) == IndexerPreferences.SCOPE_PROJECT_SHARED); } - + protected void onPreferenceChange(ICProject cproject, PreferenceChangeEvent event) { if (IndexerPreferences.KEY_UPDATE_POLICY.equals(event.getKey())) { changeUpdatePolicy(cproject); @@ -482,17 +482,17 @@ public class PDOMManager implements IWritableIndexManager, IListener { private void changeIndexer(ICProject cproject) throws CoreException { assert !Thread.holdsLock(fProjectToPDOM); - + // if there is no indexer, don't touch the preferences. IPDOMIndexer oldIndexer= getIndexer(cproject); if (oldIndexer == null) { return; } - + IProject prj= cproject.getProject(); String newid= IndexerPreferences.get(prj, IndexerPreferences.KEY_INDEXER_ID, IPDOMManager.ID_NO_INDEXER); Properties props= IndexerPreferences.getProperties(prj); - + // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485 synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) { synchronized (fUpdatePolicies) { @@ -519,7 +519,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { enqueue(new PDOMRebuildTask(indexer)); } }} - + if (oldIndexer != null) { stopIndexer(oldIndexer); } @@ -546,26 +546,26 @@ public class PDOMManager implements IWritableIndexManager, IListener { void createIndexer(ICProject project, IProgressMonitor pm) throws InterruptedException { final IProject prj= project.getProject(); final String name = prj.getName(); - if (fTraceIndexerSetup) + if (fTraceIndexerSetup) System.out.println("Indexer: Creation for project " + name); //$NON-NLS-1$ - + assert !Thread.holdsLock(fProjectToPDOM); try { // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=359485 synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) { synchronized (fUpdatePolicies) { 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$ return; } - + WritablePDOM pdom= getOrCreatePDOM(project); Properties props= IndexerPreferences.getProperties(prj); IPDOMIndexer indexer= newIndexer(getIndexerId(project), props); IndexUpdatePolicy policy= createPolicy(project); - boolean rebuild= + boolean rebuild= pdom.isClearedBecauseOfVersionMismatch() || pdom.isCreatedFromScratch() || policy.isInitialRebuildRequested(); @@ -593,7 +593,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { pdom.releaseReadLock(); } if (resume) { - if (fTraceIndexerSetup) + if (fTraceIndexerSetup) System.out.println("Indexer: Resuming for project " + name); //$NON-NLS-1$ enqueue(new PDOMUpdateTask(indexer, @@ -612,7 +612,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { synchronized (new ProjectScope(prj).getNode(CCorePlugin.PLUGIN_ID)) { synchronized (fUpdatePolicies) { 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$ return; } @@ -626,13 +626,13 @@ public class PDOMManager implements IWritableIndexManager, IListener { IPDOMIndexerTask task= null; if (operation.wasSuccessful()) { - if (fTraceIndexerSetup) - System.out.println("Indexer: Imported shared index for project " + name); //$NON-NLS-1$ + if (fTraceIndexerSetup) + System.out.println("Indexer: Imported shared index for project " + name); //$NON-NLS-1$ task= new PDOMUpdateTask(indexer, IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH); } else { - if (fTraceIndexerSetup) - System.out.println("Indexer: Rebuiding for project " + name); //$NON-NLS-1$ + if (fTraceIndexerSetup) + System.out.println("Indexer: Rebuiding for project " + name); //$NON-NLS-1$ task= new PDOMRebuildTask(indexer); } enqueue(task); @@ -644,7 +644,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { } } } - + private IPDOMIndexer newIndexer(String indexerId, Properties props) throws CoreException { IPDOMIndexer indexer = null; // Look up in extension point @@ -659,14 +659,14 @@ public class PDOMManager implements IWritableIndexManager, IListener { indexer.setProperties(props); } catch (CoreException e) { CCorePlugin.log(e); - } + } break; } } } // Unknown index, default to the null one - if (indexer == null) + if (indexer == null) indexer = new PDOMNullIndexer(); return indexer; @@ -700,7 +700,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { fIndexerJob.schedule(); } } - + private void getReferencingProjects(IProject prj, HashSet result) { LinkedList projectsToSearch= new LinkedList(); projectsToSearch.add(prj); @@ -731,7 +731,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { } return result; } - + void cancelledIndexerJob(boolean byManager) { synchronized (fTaskQueue) { fCurrentTask= null; @@ -743,7 +743,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { } } } - + @Override public boolean isIndexerIdle() { return Job.getJobManager().find(this).length == 0; @@ -753,19 +753,19 @@ public class PDOMManager implements IWritableIndexManager, IListener { final String name = cproject.getProject().getName(); if (fTraceIndexerSetup) { System.out.println("Indexer: Adding new project " + name); //$NON-NLS-1$ - } - + } + synchronized (fUpdatePolicies) { fClosingProjects.remove(name); } - + setupProject(cproject); } void setupProject(final ICProject cproject) { if (fInShutDown) return; - + synchronized (fProjectQueue) { fProjectQueue.add(cproject); } @@ -804,7 +804,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { if (indexer != null && indexer.getID().equals(IPDOMManager.ID_NO_INDEXER)) { return; } - + if (added.length > 0 || changed.length > 0 || removed.length > 0) { synchronized (fUpdatePolicies) { IndexUpdatePolicy policy= createPolicy(project); @@ -835,7 +835,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { } public void preDeleteProject(ICProject cproject) { - preRemoveProject(cproject, true); + preRemoveProject(cproject, true); } public void preCloseProject(ICProject cproject) { @@ -848,8 +848,8 @@ public class PDOMManager implements IWritableIndexManager, IListener { final IProject rproject= cproject.getProject(); final String name = rproject.getName(); - if (fTraceIndexerSetup) - System.out.println("Indexer: Removing project " + name + "; delete=" + delete); //$NON-NLS-1$ //$NON-NLS-2$ + if (fTraceIndexerSetup) + System.out.println("Indexer: Removing project " + name + "; delete=" + delete); //$NON-NLS-1$ //$NON-NLS-2$ IPDOMIndexer indexer; synchronized (fUpdatePolicies) { @@ -896,12 +896,12 @@ public class PDOMManager implements IWritableIndexManager, IListener { job.setSystem(true); job.schedule(); } - + synchronized (fUpdatePolicies) { fUpdatePolicies.remove(cproject); } } - + void removeProject(ICProject cproject, ICElementDelta delta) { synchronized (fProjectToPDOM) { IProject rproject= cproject.getProject(); @@ -921,7 +921,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { policy.clearTUs(); policy.setIndexer(null); } - } + } } cancelIndexerJobs(indexer); } @@ -937,13 +937,13 @@ public class PDOMManager implements IWritableIndexManager, IListener { } jobToCancel= fIndexerJob; } - + if (jobToCancel != null) { assert !Thread.holdsLock(fTaskQueue); jobToCancel.cancelJobs(indexer, true); } - } - + } + private void reindexAll() { ICProject[] cProjects; try { @@ -958,7 +958,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { @Override public void reindex(final ICProject project) { - Job job= new Job(Messages.PDOMManager_notifyJob_label) { + Job job= new Job(Messages.PDOMManager_notifyJob_label) { @Override protected IStatus run(IProgressMonitor monitor) { IPDOMIndexer indexer= null; @@ -999,7 +999,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { public void removeIndexChangeListener(IIndexChangeListener listener) { fChangeListeners.remove(listener); } - + @Override public void addIndexerStateListener(IIndexerStateListener listener) { fStateListeners.add(listener); @@ -1029,7 +1029,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { notify.setSystem(true); return notify; } - + private void scheduleNotification(Runnable notify) { if (fInShutDown) return; @@ -1079,12 +1079,12 @@ public class PDOMManager implements IWritableIndexManager, IListener { if (fChangeListeners.isEmpty()) { return; } - + ICProject project; synchronized (fProjectToPDOM) { project = fFileToProject.get(pdom.getPath()); - } - + } + if (project != null) { final ICProject finalProject= project; Runnable notify= new Runnable() { @@ -1145,10 +1145,10 @@ public class PDOMManager implements IWritableIndexManager, IListener { } } } - + int getMonitorMessage(PDOMIndexerJob job, int currentTicks, int base) { assert !Thread.holdsLock(fTaskQueue); - + int sourceCount, sourceEstimate, headerCount, tickCount, tickEstimate; String detail= null; synchronized (fTaskQueue) { @@ -1175,14 +1175,14 @@ public class PDOMManager implements IWritableIndexManager, IListener { detail= PDOMIndexerJob.sMonitorDetail; } } - - String msg= MessageFormat.format(Messages.PDOMManager_indexMonitorDetail, new Object[] { - new Integer(sourceCount), new Integer(sourceEstimate), - new Integer(headerCount)}); + + String msg= MessageFormat.format(Messages.PDOMManager_indexMonitorDetail, new Object[] { + new Integer(sourceCount), new Integer(sourceEstimate), + new Integer(headerCount)}); if (detail != null) { msg += ": " + detail; //$NON-NLS-1$ } - + job.subTask(msg); if (tickCount > 0 && tickCount <= 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 { return fIndexFactory.getIndex(projects, options); } - + /** * Exports the project PDOM to the specified location, rewriting locations with * the specified location converter. @@ -1255,7 +1255,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { } // overwrite internal location representations - final WritablePDOM newPDOM = new WritablePDOM(targetLocation, pdom.getLocationConverter(), getLinkageFactories()); + final WritablePDOM newPDOM = new WritablePDOM(targetLocation, pdom.getLocationConverter(), getLinkageFactories()); newPDOM.acquireWriteLock(); try { 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 OperationCanceledException in case the thread was interrupted * @since 4.0 @@ -1294,11 +1294,11 @@ public class PDOMManager implements IWritableIndexManager, IListener { } if (version > PDOM.getMaxSupportedVersion()) { 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 ) ) { 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]; int read; @@ -1308,7 +1308,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { } finally { out.close(); } - + WritablePDOM pdom= (WritablePDOM) getPDOM(project); try { pdom.acquireWriteLock(); @@ -1323,7 +1323,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { pdom.releaseWriteLock(); } } - + @Override public void export(ICProject project, String location, int options, IProgressMonitor monitor) throws CoreException { TeamPDOMExportOperation operation= new TeamPDOMExportOperation(project); @@ -1331,7 +1331,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { operation.setOptions(options); operation.run(monitor); } - + /** * Write metadata appropriate for a project pdom * @param pdom the pdom to write to @@ -1362,7 +1362,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { for (Map.Entry> entry : projectsToElements.entrySet()) { ICProject project = entry.getKey(); List filesAndFolders = entry.getValue(); - + update(project, filesAndFolders, options); } } @@ -1389,14 +1389,14 @@ public class PDOMManager implements IWritableIndexManager, IListener { } else if (contains(element, other)) { set.set(j, element); continue allElements; - } + } } set.add(element); } } return result; } - + private boolean contains(final ICElement a, ICElement b) { if (a.equals(b)) { return true; @@ -1493,7 +1493,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { if (fPostponedProjects.contains(project)) { setupProject(project); } - } + } } @Override @@ -1512,7 +1512,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { } } } - + /** * @param project * @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) { return getIndexer(project) != null; } - + /** * @param cproject the project to check * @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 { if (!"true".equals(IndexerPreferences.get(cproject.getProject(), IndexerPreferences.KEY_INDEX_ALL_FILES, null))) //$NON-NLS-1$ return true; // no check performed in this case - + Set sources= new HashSet(); cproject.accept(new TranslationUnitCollector(sources, null, new NullProgressMonitor())); @@ -1558,7 +1558,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { return true; } - + private boolean isSubjectToIndexing(ILanguage language) { final int linkageID=language.getLinkageID(); for (int id : IDS_FOR_LINKAGES_TO_INDEX) { @@ -1580,7 +1580,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { private static boolean areSynchronized(Set trail, IIndex index, IResource resource, IIndexFileLocation location) throws CoreException { if (!trail.contains(location)) { trail.add(location); - + IIndexFile[] file= index.getFiles(location); // pre-includes may be listed twice (191989) @@ -1606,7 +1606,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { } } } - + return true; }