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:
parent
f6151d3a72
commit
689c2a5f17
17 changed files with 243 additions and 206 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
/**
|
/**
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
*
|
*
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue