1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-29 11:55:40 +02:00

Fix for PR 103518: 'Convert to a C project: Autodiscovery setting doesn't inherit what is in Preference' and

PR 103520: 'Failed to show Includes folder for a converted std c/c++project'.
Fixed options inheritance and initialization of discovered paths container on project conversion.
This commit is contained in:
Vladimir Hirsl 2005-07-13 19:53:41 +00:00
parent f728c43a2b
commit 090b00143d
2 changed files with 82 additions and 4 deletions

View file

@ -10,7 +10,17 @@
*******************************************************************************/
package org.eclipse.cdt.make.core.scannerconfig;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IContainerEntry;
import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredPathContainer;
import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfile;
import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfileManager;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
@ -115,9 +125,8 @@ public class ScannerConfigNature implements IProjectNature {
* @param description
* @param builderID
* @return ICommand
* @throws CoreException
*/
public static ICommand getBuildSpec(IProjectDescription description, String builderID) throws CoreException {
public static ICommand getBuildSpec(IProjectDescription description, String builderID) {
ICommand[] commands = description.getBuildSpec();
for (int i = 0; i < commands.length; ++i) {
if (commands[i].getBuilderName().equals(builderID)) {
@ -133,9 +142,8 @@ public class ScannerConfigNature implements IProjectNature {
* @param description
* @param newCommand
* @return IProjecDescription
* @throws CoreException
*/
public static IProjectDescription setBuildSpec(IProjectDescription description, ICommand newCommand) throws CoreException {
public static IProjectDescription setBuildSpec(IProjectDescription description, ICommand newCommand) {
ICommand[] oldCommands = description.getBuildSpec();
ICommand oldCommand = getBuildSpec(description, newCommand.getBuilderName());
ICommand[] newCommands;
@ -160,4 +168,73 @@ public class ScannerConfigNature implements IProjectNature {
description.setBuildSpec(newCommands);
return description;
}
/**
* @param project
*/
public static void initializeDiscoveryOptions(IProject project) {
try {
IScannerConfigBuilderInfo2 scPrefInfo = ScannerConfigProfileManager.createScannerConfigBuildInfo2(
MakeCorePlugin.getDefault().getPluginPreferences(), false);
String selectedProfile = scPrefInfo.getSelectedProfileId();
IScannerConfigBuilderInfo2 scProjInfo = ScannerConfigProfileManager.createScannerConfigBuildInfo2(
project, selectedProfile);
scProjInfo.setAutoDiscoveryEnabled(scPrefInfo.isAutoDiscoveryEnabled());
scProjInfo.setProblemReportingEnabled(scPrefInfo.isProblemReportingEnabled());
scProjInfo.setBuildOutputParserEnabled(scPrefInfo.isBuildOutputParserEnabled());
scProjInfo.setBuildOutputFileActionEnabled(scPrefInfo.isBuildOutputFileActionEnabled());
scProjInfo.setBuildOutputFilePath(scPrefInfo.getBuildOutputFilePath());
ScannerConfigProfile profile = ScannerConfigProfileManager.getInstance().getSCProfileConfiguration(selectedProfile);
List providerIdList = scPrefInfo.getProviderIdList();
for (Iterator i = providerIdList.iterator(); i.hasNext();) {
String providerId = (String) i.next();
scProjInfo.setProviderOutputParserEnabled(providerId, scPrefInfo.isProviderOutputParserEnabled(providerId));
if (profile.getScannerInfoProviderElement(providerId).getProviderKind().equals(
ScannerConfigProfile.ScannerInfoProvider.RUN)) {
scProjInfo.setProviderRunCommand(providerId, scPrefInfo.getProviderRunCommand(providerId));
scProjInfo.setProviderRunArguments(providerId, scPrefInfo.getProviderRunArguments(providerId));
}
else {
scProjInfo.setProviderOpenFilePath(providerId, scPrefInfo.getProviderOpenFilePath(providerId));
}
}
scProjInfo.save();
// the last step is to add discovered paths container
ICProject cProject = CoreModel.getDefault().create(project);
IPathEntry[] rawPathEntries = CoreModel.getRawPathEntries(cProject);
boolean found = false;
for (int i = 0; i < rawPathEntries.length; i++) {
if (rawPathEntries[i].getEntryKind() == IPathEntry.CDT_CONTAINER) {
IContainerEntry container = (IContainerEntry) rawPathEntries[i];
if (container.getPath().equals(DiscoveredPathContainer.CONTAINER_ID)) {
found = true;
break;
}
}
}
if (!found) {
IPathEntry[] newRawPathEntries = new IPathEntry[rawPathEntries.length + 1];
System.arraycopy(rawPathEntries, 0, newRawPathEntries, 0, rawPathEntries.length);
newRawPathEntries[rawPathEntries.length] = CoreModel.newContainerEntry(DiscoveredPathContainer.CONTAINER_ID);
CoreModel.setRawPathEntries(cProject, newRawPathEntries, null);
}
// if (profile.getProfileScope().equals(ScannerConfigScope.PROJECT_SCOPE)) {
// CoreModel.setPathEntryContainer(new ICProject[]{cProject},
// new DiscoveredPathContainer(project), null);
// }
// else { // file scope
// CoreModel.setPathEntryContainer(new ICProject[]{cProject},
// new PerFileDiscoveredPathContainer(project), null);
// }
}
catch (CoreException e) {
MakeCorePlugin.log(e);
}
}
}

View file

@ -86,6 +86,7 @@ public class ConvertToMakeProjectWizardPage extends ConvertProjectWizardPage {
super.convertProject(project, new SubProgressMonitor(monitor, 1), projectID);
MakeProjectNature.addNature(project, new SubProgressMonitor(monitor, 1));
ScannerConfigNature.addScannerConfigNature(project);
ScannerConfigNature.initializeDiscoveryOptions(project);
CCorePlugin.getDefault().mapCProjectOwner(project, projectID, true);
} finally {
monitor.done();