mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Utility function added: PerProjectSICollector.calculateCompilerBuiltins(IProject)
Static method to return compiler built-in scanner info.
This commit is contained in:
parent
03c02af46b
commit
f91d763e74
3 changed files with 162 additions and 0 deletions
|
@ -11,6 +11,7 @@
|
|||
package org.eclipse.cdt.make.internal.core.scannerconfig2;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
|
@ -19,14 +20,22 @@ import java.util.Map;
|
|||
|
||||
import org.eclipse.cdt.core.CCProjectNature;
|
||||
import org.eclipse.cdt.core.CProjectNature;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||
import org.eclipse.cdt.make.core.MakeProjectNature;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.IExternalScannerInfoProvider;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector2;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollectorCleaner;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IPerProjectDiscoveredPathInfo;
|
||||
import org.eclipse.cdt.make.internal.core.MakeMessages;
|
||||
import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredPathContainer;
|
||||
import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredPathInfo;
|
||||
import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredScannerInfoStore;
|
||||
import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigUtil;
|
||||
|
@ -36,8 +45,11 @@ import org.eclipse.core.resources.IProject;
|
|||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.ISafeRunnable;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.OperationCanceledException;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
|
@ -424,4 +436,62 @@ public class PerProjectSICollector implements IScannerInfoCollector2, IScannerIn
|
|||
return pathInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Static method to return compiler built-in scanner info.
|
||||
* Preconditions: resource has to be contained by a project that has following natures:
|
||||
* C nature, CC nature (for C++ projects), Make nature and ScannerConfig nature
|
||||
*
|
||||
* @param project
|
||||
* @throws CModelException
|
||||
*/
|
||||
public static void calculateCompilerBuiltins(final IProject project) throws CModelException {
|
||||
createDiscoveredPathContainer(project, new NullProgressMonitor());
|
||||
String scdProfileId = ScannerConfigProfileManager.PER_PROJECT_PROFILE_ID;
|
||||
SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance().
|
||||
getSCProfileInstance(project, scdProfileId);
|
||||
final IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager.
|
||||
createScannerConfigBuildInfo2(MakeCorePlugin.getDefault().getPluginPreferences(),
|
||||
scdProfileId, true);
|
||||
final IScannerInfoCollector collector = profileInstance.getScannerInfoCollector();
|
||||
if (collector instanceof IScannerInfoCollectorCleaner) {
|
||||
((IScannerInfoCollectorCleaner) collector).deleteAll(project);
|
||||
}
|
||||
final IExternalScannerInfoProvider esiProvider = profileInstance.createExternalScannerInfoProvider("specsFile");//$NON-NLS-1$
|
||||
|
||||
// Set the arguments for the provider
|
||||
|
||||
ISafeRunnable runnable = new ISafeRunnable() {
|
||||
public void run() throws CoreException {
|
||||
IProgressMonitor monitor = new NullProgressMonitor();
|
||||
esiProvider.invokeProvider(monitor, project, "specsFile", buildInfo, collector);//$NON-NLS-1$
|
||||
if (collector instanceof IScannerInfoCollector2) {
|
||||
IScannerInfoCollector2 collector2 = (IScannerInfoCollector2) collector;
|
||||
collector2.updateScannerConfiguration(monitor);
|
||||
}
|
||||
}
|
||||
|
||||
public void handleException(Throwable exception) {
|
||||
if (exception instanceof OperationCanceledException) {
|
||||
throw (OperationCanceledException) exception;
|
||||
}
|
||||
}
|
||||
};
|
||||
Platform.run(runnable);
|
||||
}
|
||||
|
||||
private static void createDiscoveredPathContainer(IProject project, IProgressMonitor monitor) throws CModelException {
|
||||
IPathEntry container = CoreModel.newContainerEntry(DiscoveredPathContainer.CONTAINER_ID);
|
||||
ICProject cProject = CoreModel.getDefault().create(project);
|
||||
if (cProject != null) {
|
||||
IPathEntry[] entries = cProject.getRawPathEntries();
|
||||
List newEntries = new ArrayList(Arrays.asList(entries));
|
||||
if (!newEntries.contains(container)) {
|
||||
newEntries.add(container);
|
||||
cProject.setRawPathEntries((IPathEntry[])newEntries.toArray(new IPathEntry[newEntries.size()]), monitor);
|
||||
}
|
||||
}
|
||||
// create a new discovered scanner config store
|
||||
MakeCorePlugin.getDefault().getDiscoveryManager().removeDiscoveredInfo(project);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ public class AllStandardBuildTests extends TestSuite {
|
|||
TestSuite suite = new AllStandardBuildTests("Test for org.eclipse.cdt.standardbuild.core.tests");
|
||||
//$JUnit-BEGIN$
|
||||
suite.addTestSuite(ScannerConfigConsoleParserTests.class);
|
||||
suite.addTestSuite(ScannerConfigDiscoveryTests.class);
|
||||
//$JUnit-END$
|
||||
return suite;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2004 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM - Initial API and implementation
|
||||
**********************************************************************/
|
||||
package org.eclipse.cdt.standardbuilder.core.tests;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.cdt.core.CCProjectNature;
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.make.core.MakeProjectNature;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature;
|
||||
import org.eclipse.cdt.make.internal.core.scannerconfig2.PerProjectSICollector;
|
||||
import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
|
||||
/**
|
||||
* Scanner configuration discovery tests
|
||||
*
|
||||
* @author vhirsl
|
||||
*/
|
||||
public class ScannerConfigDiscoveryTests extends TestCase {
|
||||
private IProject fCProject = null;
|
||||
private IFile fCFile = null;
|
||||
IProgressMonitor fMonitor = null;
|
||||
|
||||
/**
|
||||
* @param name
|
||||
*/
|
||||
public ScannerConfigDiscoveryTests(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
fMonitor = new NullProgressMonitor();
|
||||
|
||||
fCProject = ManagedBuildTestHelper.createProject("SCD");
|
||||
fCFile = fCProject.getProject().getFile("main.c");
|
||||
if (!fCFile.exists()) {
|
||||
fCFile.create(new ByteArrayInputStream(" \n".getBytes()), false, fMonitor);
|
||||
}
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
ManagedBuildTestHelper.removeProject("SCDC");
|
||||
}
|
||||
|
||||
public void testGetCCompilerBuiltins() throws CoreException {
|
||||
MakeProjectNature.addNature(fCProject, fMonitor);
|
||||
ScannerConfigNature.addScannerConfigNature(fCProject);
|
||||
|
||||
PerProjectSICollector.calculateCompilerBuiltins(fCProject);
|
||||
IScannerInfo scInfo = CCorePlugin.getDefault().getScannerInfoProvider(fCProject).
|
||||
getScannerInformation(fCFile);
|
||||
assertNotNull(scInfo);
|
||||
String[] includes = scInfo.getIncludePaths();
|
||||
assertTrue(includes.length > 0);
|
||||
Map symbols = scInfo.getDefinedSymbols();
|
||||
assertFalse(symbols.isEmpty());
|
||||
}
|
||||
|
||||
public void testGetCCCompilerBuiltins() throws CoreException {
|
||||
CCProjectNature.addCCNature(fCProject, fMonitor);
|
||||
MakeProjectNature.addNature(fCProject, fMonitor);
|
||||
ScannerConfigNature.addScannerConfigNature(fCProject);
|
||||
|
||||
PerProjectSICollector.calculateCompilerBuiltins(fCProject);
|
||||
IScannerInfo scInfo = CCorePlugin.getDefault().getScannerInfoProvider(fCProject).
|
||||
getScannerInformation(fCFile);
|
||||
assertNotNull(scInfo);
|
||||
String[] includes = scInfo.getIncludePaths();
|
||||
assertTrue(includes.length > 0);
|
||||
Map symbols = scInfo.getDefinedSymbols();
|
||||
assertFalse(symbols.isEmpty());
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue