diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog
index 9732c9e9a61..c00bfb04500 100644
--- a/core/org.eclipse.cdt.core.tests/ChangeLog
+++ b/core/org.eclipse.cdt.core.tests/ChangeLog
@@ -1,3 +1,16 @@
+2003-08-13 Sean Evoy
+ Renamed the 'AllBuildTest' class to 'ManagedBuildTest' and updated the
+ integration suite class.
+ * suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java
+
+ This class is renamed. It also has a renamed method 'testProjectCreation'
+ that creates a project the same way the new project wizard does. It uses
+ the new discovery mechanism to find the scanner info provider.
+ * build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
+
+ Uses the new discovery mechanism to find the scanner info provider.
+ * build/org/eclipse/cdt/core/build/managed/tests/StandardBuildTests.java
+
2003-08-12 Bogdan Gheorghe
Changed the order of tests in AutomatedIntegrationSuite to have
the indexing tests run last (the last indexing test shuts down
@@ -819,4 +832,3 @@
src/org/eclipse/cdt/testplugin/CProjectHelper.jada
Cleanup of the CProjectHelper file to remove unused imports, commeted out code etc.
->>>>>>> 1.36
diff --git a/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java b/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
similarity index 90%
rename from core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java
rename to core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
index 4b024815c0f..02cd0aa204b 100644
--- a/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java
+++ b/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
@@ -19,11 +19,13 @@ import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.ICDescriptor;
+import org.eclipse.cdt.core.ManagedCProjectNature;
import org.eclipse.cdt.core.build.managed.BuildException;
import org.eclipse.cdt.core.build.managed.IConfiguration;
+import org.eclipse.cdt.core.build.managed.IManagedBuildInfo;
import org.eclipse.cdt.core.build.managed.IOption;
import org.eclipse.cdt.core.build.managed.IOptionCategory;
-import org.eclipse.cdt.core.build.managed.IManagedBuildInfo;
import org.eclipse.cdt.core.build.managed.ITarget;
import org.eclipse.cdt.core.build.managed.ITool;
import org.eclipse.cdt.core.build.managed.ManagedBuildManager;
@@ -32,16 +34,18 @@ import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
import org.eclipse.cdt.internal.core.build.managed.ToolReference;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.NullProgressMonitor;
-public class AllBuildTests extends TestCase {
+public class ManagedBuildTests extends TestCase {
private static final boolean boolVal = true;
+ private static final String PROJECT_ID = CCorePlugin.PLUGIN_ID + ".make";
private static final String testConfigName = "test.config.override";
private static final String enumVal = "Another Enum";
private static final String[] listVal = {"_DEBUG", "/usr/include", "libglade.a"};
@@ -50,19 +54,19 @@ public class AllBuildTests extends TestCase {
private static final String stringVal = "-c -Wall";
private static final String subExt = "bus";
- public AllBuildTests(String name) {
+ public ManagedBuildTests(String name) {
super(name);
}
public static Test suite() {
- TestSuite suite = new TestSuite(AllBuildTests.class.getName());
+ TestSuite suite = new TestSuite(ManagedBuildTests.class.getName());
- suite.addTest(new AllBuildTests("testExtensions"));
- suite.addTest(new AllBuildTests("testProject"));
- suite.addTest(new AllBuildTests("testConfigurations"));
- suite.addTest(new AllBuildTests("testTargetArtifacts"));
- suite.addTest(new AllBuildTests("testScannerInfoInterface"));
- suite.addTest(new AllBuildTests("cleanup"));
+ suite.addTest(new ManagedBuildTests("testExtensions"));
+ suite.addTest(new ManagedBuildTests("testProjectCreation"));
+ suite.addTest(new ManagedBuildTests("testConfigurations"));
+ suite.addTest(new ManagedBuildTests("testTargetArtifacts"));
+ suite.addTest(new ManagedBuildTests("testScannerInfoInterface"));
+ suite.addTest(new ManagedBuildTests("cleanup"));
return suite;
}
@@ -109,6 +113,9 @@ public class AllBuildTests extends TestCase {
* @throws CoreException
*/
public void testScannerInfoInterface(){
+ // These are the expected path settings
+ final String[] expectedPaths = {"/usr/include", "/opt/gnome/include", "/home/tester/include"};
+
// Open the test project
IProject project = null;
try {
@@ -144,29 +151,19 @@ public class AllBuildTests extends TestCase {
if (extensionPoint == null) {
fail("Failed to retrieve the extension point ScannerInfoProvider.");
}
- IExtension[] extensions = extensionPoint.getExtensions();
- IScannerInfoProvider provider = null;
+
// Find the first IScannerInfoProvider that supplies build info for the project
- for (int i = 0; i < extensions.length && provider == null; i++) {
- IExtension extension = extensions[i];
- IConfigurationElement[] elements = extension.getConfigurationElements();
- for (int j = 0; j < elements.length; ++j) {
- IConfigurationElement element = elements[j];
- if (element.getName().equals("provider")) {
- // Check if it handles the info for the project
- try {
- IScannerInfoProvider temp = (IScannerInfoProvider)element.createExecutableExtension("class");
- if (temp.managesResource(project)) {
- provider = temp;
- break;
- }
- } catch (CoreException e) {
- fail("Failed retrieving scanner info provider from plugin: " + e.getLocalizedMessage());
- }
- }
- }
- }
+ IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
assertNotNull(provider);
+
+ // Check the build information right away
+ IScannerInfo currentSettings = provider.getScannerInformation(project);
+ Map currentSymbols = currentSettings.getDefinedSymbols();
+ assertTrue(currentSymbols.isEmpty());
+ String[] currentPaths = currentSettings.getIncludePaths();
+ assertTrue(Arrays.equals(expectedPaths, currentPaths));
+
+ // Now subscribe (note that the method will be called after a change
provider.subscribe(project, new IScannerInfoChangeListener () {
public void changeNotification(IResource project, IScannerInfo info) {
// Test the symbols
@@ -177,7 +174,6 @@ public class AllBuildTests extends TestCase {
assertEquals((String)definedSymbols.get("DEBUG"), "");
assertEquals((String)definedSymbols.get("GNOME"), "ME");
// Test the includes path
- String[] expectedPaths = {"/usr/include", "/opt/gnome/include", "/home/tester/include"};
String[] actualPaths = info.getIncludePaths();
assertTrue(Arrays.equals(expectedPaths, actualPaths));
}
@@ -269,11 +265,13 @@ public class AllBuildTests extends TestCase {
* @throws CoreException
* @throws BuildException
*/
- public void testProject() throws BuildException {
+ public void testProjectCreation() throws BuildException {
// Create new project
IProject project = null;
try {
project = createProject(projectName);
+ // Now associate the builder with the project
+ addManagedBuildNature(project);
} catch (CoreException e) {
fail("Test failed on project creation: " + e.getLocalizedMessage());
}
@@ -354,6 +352,24 @@ public class AllBuildTests extends TestCase {
ManagedBuildManager.removeBuildInfo(project);
}
+ private void addManagedBuildNature (IProject project) {
+ // Add the managed build nature
+ try {
+ ManagedCProjectNature.addManagedNature(project, new NullProgressMonitor());
+ } catch (CoreException e) {
+ fail("Test failed on adding managed build nature: " + e.getLocalizedMessage());
+ }
+
+ // Associate the project with the managed builder so the clients can get proper information
+ try {
+ ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(project);
+ desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
+ desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY);
+ } catch (CoreException e) {
+ fail("Test failed on adding managed builder as scanner info provider: " + e.getLocalizedMessage());
+ }
+ }
+
/**
* Tests the tool settings through the interface the makefile generator
* uses.
@@ -672,19 +688,23 @@ public class AllBuildTests extends TestCase {
*/
private IProject createProject(String name) throws CoreException {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- IProject project = root.getProject(name);
- if (!project.exists()) {
- project.create(null);
+ IProject newProjectHandle = root.getProject(name);
+ IProject project = null;
+
+ if (!newProjectHandle.exists()) {
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ IProjectDescription description = workspace.newProjectDescription(newProjectHandle.getName());
+ //description.setLocation(root.getLocation());
+ project = CCorePlugin.getDefault().createCProject(description, newProjectHandle, new NullProgressMonitor(), PROJECT_ID);
} else {
- project.refreshLocal(IResource.DEPTH_INFINITE, null);
+ newProjectHandle.refreshLocal(IResource.DEPTH_INFINITE, null);
+ project = newProjectHandle;
}
if (!project.isOpen()) {
project.open(null);
}
- //CCorePlugin.getDefault().convertProjectToC(project, null, CCorePlugin.PLUGIN_ID + ".make", true);
-
return project;
}
diff --git a/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/StandardBuildTests.java b/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/StandardBuildTests.java
index 257da98bd78..8ed4101bf08 100644
--- a/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/StandardBuildTests.java
+++ b/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/StandardBuildTests.java
@@ -10,6 +10,7 @@ import junit.framework.TestSuite;
import org.eclipse.cdt.core.CCProjectNature;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CProjectNature;
+import org.eclipse.cdt.core.ICDescriptor;
import org.eclipse.cdt.core.build.standard.StandardBuildManager;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
@@ -20,9 +21,6 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.NullProgressMonitor;
/**********************************************************************
@@ -175,38 +173,6 @@ public class StandardBuildTests extends TestCase {
return project;
}
- private IScannerInfoProvider findInfoProvider(IProject project) {
- // Use the plugin mechanism to discover the supplier of the path information
- IExtensionPoint extensionPoint = CCorePlugin.getDefault().getDescriptor().getExtensionPoint("ScannerInfoProvider");
- if (extensionPoint == null) {
- fail("StandardBuildTest testScannerListernerInterface failed to retrieve the extension point ScannerInfoProvider.");
- }
- IExtension[] extensions = extensionPoint.getExtensions();
- IScannerInfoProvider provider = null;
-
- // Find the first IScannerInfoProvider that supplies build info for the project
- for (int i = 0; i < extensions.length && provider == null; i++) {
- IExtension extension = extensions[i];
- IConfigurationElement[] elements = extension.getConfigurationElements();
- for (int j = 0; j < elements.length; ++j) {
- IConfigurationElement element = elements[j];
- if (element.getName().equals("provider")) {
- // Check if it handles the info for the project
- try {
- IScannerInfoProvider temp = (IScannerInfoProvider)element.createExecutableExtension("class");
- if (temp.managesResource(project)) {
- provider = temp;
- break;
- }
- } catch (CoreException e) {
- fail("Failed retrieving scanner info provider from plugin: " + e.getLocalizedMessage());
- }
- }
- }
- }
- return provider;
- }
-
/**
* Remove the IProject
with the name specified in the argument from the
* receiver's workspace.
@@ -298,6 +264,15 @@ public class StandardBuildTests extends TestCase {
} catch (CoreException e) {
fail("StandardBuildTest testProjectCreation failed getting nature: " + e.getLocalizedMessage());
}
+
+ // Associate the project with the standard builder so the clients can get proper information
+ try {
+ ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(project);
+ desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
+ desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, StandardBuildManager.INTERFACE_IDENTITY);
+ } catch (CoreException e) {
+ fail("StandardBuildTest testProjectCreation failed setting the StandardBuildManager: " + e.getLocalizedMessage());
+ }
// Check the default settings
checkDefaultProjectSettings(project);
@@ -353,9 +328,21 @@ public class StandardBuildTests extends TestCase {
assertNotNull(project);
// Find the scanner info provider for this project
- IScannerInfoProvider provider = findInfoProvider(project);
+ IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
assertNotNull(provider);
+ // Check out the information we can get through the interface
+ IScannerInfo currentSettings = provider.getScannerInformation(project);
+ Map currentSymbols = currentSettings.getDefinedSymbols();
+ assertTrue(currentSymbols.containsKey("_RELEASE"));
+ assertEquals("", currentSymbols.get("_RELEASE"));
+ assertTrue(currentSymbols.containsKey("YES"));
+ assertEquals("1", currentSymbols.get("YES"));
+ assertTrue(currentSymbols.containsKey("NO"));
+ assertEquals("", currentSymbols.get("NO"));
+ String[] currentPaths = currentSettings.getIncludePaths();
+ assertTrue(Arrays.equals(OVR_INC_PATHS, currentPaths));
+
// Remove what's there
StandardBuildManager.setIncludePaths(project, new String[0]);
StandardBuildManager.setPreprocessorSymbols(project, new String[0]);
diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java
index 0c93def1f47..1b8cf2d6aca 100644
--- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java
+++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java
@@ -17,7 +17,7 @@ import junit.framework.TestResult;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
-import org.eclipse.cdt.core.build.managed.tests.AllBuildTests;
+import org.eclipse.cdt.core.build.managed.tests.ManagedBuildTests;
import org.eclipse.cdt.core.build.managed.tests.StandardBuildTests;
import org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest;
import org.eclipse.cdt.core.indexer.tests.IndexManagerTests;
@@ -80,7 +80,7 @@ public class AutomatedIntegrationSuite extends TestSuite
suite.addTest(suite.new GenerateReport("startSuccessTests"));
// Add all success tests
- suite.addTest(AllBuildTests.suite());
+ suite.addTest(ManagedBuildTests.suite());
suite.addTest(StandardBuildTests.suite());
suite.addTest(ParserTestSuite.suite());
suite.addTest(AllCoreTests.suite());
diff --git a/core/org.eclipse.cdt.core/.classpath b/core/org.eclipse.cdt.core/.classpath
index 7aa3bbc333d..7bd429f256a 100644
--- a/core/org.eclipse.cdt.core/.classpath
+++ b/core/org.eclipse.cdt.core/.classpath
@@ -1,12 +1,14 @@
+
-
-
-
+
+
+
+
@@ -14,8 +16,6 @@
-
-
-
+
diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog
index 39418bddff1..1c6ac944376 100644
--- a/core/org.eclipse.cdt.core/ChangeLog
+++ b/core/org.eclipse.cdt.core/ChangeLog
@@ -1,3 +1,31 @@
+2003-08-13 Sean Evoy
+ The major change in the increment of work is the new discovery mechanism
+ that clients will use to find the IScannerInfoProvider for a project.
+ Rather than a simple extension point which requires the client to iterate
+ over all registered providers, the CExtension feature will be used to
+ register the provider at project creation time, and to find the provider
+ at runtime.
+
+ Changed the plugin entries for the two builders currently described. The
+ schema for the ScannerInfoProvider was removed, and the plugin description
+ was converted to work with the CExtension feature.
+ * plugin.xml
+ * schema/ScannerInfoProvider.exsd (removed)
+
+ Added a method to find and create the provider described in the extension point.
+ Used by clients at runtime to discover the provider.
+ * src/org/eclipse/cdt/core/CCorePlugin.java
+
+ Changed the IScannerInfoProvider interface by removing the 'managesResource'
+ method (no more iteration required) and adding a method so clients can get
+ build information as soon as they get the provider and before they subscribe.
+ * parser/org/eclipse/cdt/core/parser/IScannerInfoProvider.java
+
+ Updated the two classes that implemet the interface and made them inherit from
+ AbstractCExtension in order to be managed by the CExtension feature.
+ * build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java
+ * build/org/eclipse/cdt/core/build/standard/StandardBuildManager.java
+
2003-08-12 Hoda Amer
Moved CharOperations and Utils from internal.core.search to internal.core
Added CConventions class to validate class names
diff --git a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java
index 727b30681ca..89f72cddd68 100644
--- a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java
+++ b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java
@@ -28,6 +28,7 @@ import org.apache.xml.serialize.Method;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.Serializer;
import org.apache.xml.serialize.SerializerFactory;
+import org.eclipse.cdt.core.AbstractCExtension;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.parser.*;
import org.eclipse.cdt.internal.core.build.managed.ManagedBuildInfo;
@@ -48,13 +49,13 @@ import org.w3c.dom.Node;
* This is the main entry point for getting at the build information
* for the managed build system.
*/
-public class ManagedBuildManager implements IScannerInfoProvider {
+public class ManagedBuildManager extends AbstractCExtension implements IScannerInfoProvider {
- private static final QualifiedName buildInfoProperty
- = new QualifiedName(CCorePlugin.PLUGIN_ID, "managedBuildInfo");
+ private static final QualifiedName buildInfoProperty = new QualifiedName(CCorePlugin.PLUGIN_ID, "managedBuildInfo");
private static final String ROOT_ELEM_NAME = "ManagedProjectBuildInfo";
private static final String FILE_NAME = ".cdtbuild";
private static final ITarget[] emptyTargets = new ITarget[0];
+ public static final String INTERFACE_IDENTITY = CCorePlugin.PLUGIN_ID + "." + "ManagedBuildManager";
// Targets defined by extensions (i.e., not associated with a resource)
private static boolean extensionTargetsLoaded = false;
@@ -450,10 +451,9 @@ public class ManagedBuildManager implements IScannerInfoProvider {
* Answers with an interface to the parse information that has been
* associated with the resource specified in the argument.
*
- * NOTE: This method is not part of the registration interface. It has
- * been made public as a short-term workaround for the clients of the
- * scanner information until the redesign of the build information management
- * occurs.
+ * @deprecated This method is not part of the registration interface.
+ * Clients of build information should now use getScannerInformation(IResource)
+ * for one-time information requests.
*
* @param resource
* @return
@@ -462,6 +462,13 @@ public class ManagedBuildManager implements IScannerInfoProvider {
return (IScannerInfo) getBuildInfo(resource, false);
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.IScannerInfoProvider#getScannerInformation(org.eclipse.core.resources.IResource)
+ */
+ public IScannerInfo getScannerInformation(IResource resource) {
+ return (IScannerInfo) getBuildInfo(resource, false);
+ }
+
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IScannerInfoProvider#subscribe(org.eclipse.cdt.core.parser.IScannerInfoChangeListener)
*/
@@ -488,41 +495,6 @@ public class ManagedBuildManager implements IScannerInfoProvider {
}
}
- // TODO Remove all of the IScannerInfoProvider interface methods when
- // the discovery mechanism is solidified
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.IScannerInfoProvider#managesResource(org.eclipse.core.resources.IResource)
- */
- public boolean managesResource(IResource resource) {
- // The managed build manager manages build information for the
- // resource IFF it it is a project and has a build file with the proper
- // root element
- IProject project = null;
- if (resource instanceof IProject){
- project = (IProject)resource;
- } else if (resource instanceof IFile) {
- project = ((IFile)resource).getProject();
- } else {
- return false;
- }
- IFile file = project.getFile(FILE_NAME);
- if (file.exists()) {
- try {
- InputStream stream = file.getContents();
- DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Document document = parser.parse(stream);
- Node rootElement = document.getFirstChild();
- if (rootElement.getNodeName().equals(ROOT_ELEM_NAME)) {
- return true;
- }
- } catch (Exception e) {
- return false;
- }
- }
- return false;
- }
-
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IScannerInfoProvider#unsubscribe(org.eclipse.cdt.core.parser.IScannerInfoChangeListener)
*/
@@ -544,6 +516,4 @@ public class ManagedBuildManager implements IScannerInfoProvider {
map.put(project, list);
}
}
-
-
}
diff --git a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/standard/StandardBuildManager.java b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/standard/StandardBuildManager.java
index 0c8f1d4745e..dbe6f336387 100644
--- a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/standard/StandardBuildManager.java
+++ b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/standard/StandardBuildManager.java
@@ -7,6 +7,7 @@ import java.util.List;
import java.util.ListIterator;
import java.util.Map;
+import org.eclipse.cdt.core.AbstractCExtension;
import org.eclipse.cdt.core.BuildInfoFactory;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICDescriptor;
@@ -21,7 +22,6 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
@@ -34,11 +34,13 @@ import org.w3c.dom.NodeList;
* IBM Rational Software - Initial API and implementation
***********************************************************************/
-public class StandardBuildManager implements IScannerInfoProvider {
+public class StandardBuildManager extends AbstractCExtension implements IScannerInfoProvider {
// Name we will use to store build property with the project
private static final QualifiedName buildInfoProperty
= new QualifiedName(CCorePlugin.PLUGIN_ID, "standardBuildInfo");
private static final String ID = CCorePlugin.PLUGIN_ID + ".standardBuildInfo";
+ // This is the id of the IScannerInfoProvider extension point entry
+ public static final String INTERFACE_IDENTITY = CCorePlugin.PLUGIN_ID + "." + "StandardBuildManager";
// Listeners interested in build model changes
private static Map buildModelListeners;
@@ -91,30 +93,6 @@ public class StandardBuildManager implements IScannerInfoProvider {
return buildModelListeners;
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.IScannerInfoProvider#managesResource(org.eclipse.core.resources.IResource)
- */
- public boolean managesResource(IResource resource) throws CoreException {
- /*
- * Answers true if this project has a build info associated with it
- */
-
- IProject project = null;
- if (resource instanceof IProject) {
- project = (IProject)resource;
- } else if (resource instanceof IFile) {
- project = ((IFile)resource).getProject();
- } else {
- return false;
- }
-
- // Look for (but do not create) the build information
- IStandardBuildInfo info = getBuildInfo(project);
-
- // If there's info, I manage the resource
- return info == null ? false : true;
- }
-
public static void setPreprocessorSymbols(IProject project, String[] symbols)
throws CoreException
{
@@ -162,6 +140,19 @@ public class StandardBuildManager implements IScannerInfoProvider {
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.IScannerInfoProvider#getScannerInformation(org.eclipse.core.resources.IResource)
+ */
+ public IScannerInfo getScannerInformation(IResource resource) {
+ IStandardBuildInfo info;
+ try {
+ info = getBuildInfo((IProject)resource);
+ } catch (CoreException e) {
+ return null;
+ }
+ return (IScannerInfo)info;
+ }
+
/*
* Loads the build file and parses the nodes for build information. The
* information is then associated with the resource for the duration of
@@ -266,4 +257,5 @@ public class StandardBuildManager implements IScannerInfoProvider {
map.put(project, list);
}
}
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerInfoProvider.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerInfoProvider.java
index ad34dc829d4..54b9e6fa28e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerInfoProvider.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerInfoProvider.java
@@ -1,7 +1,6 @@
package org.eclipse.cdt.core.parser;
import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
@@ -15,7 +14,16 @@ import org.eclipse.core.runtime.CoreException;
***********************************************************************/
public interface IScannerInfoProvider {
-
+
+ /**
+ * The receiver will answer the current state of the build information for the
+ * resource specified in the argument.
+ *
+ * @param resource
+ * @return
+ */
+ public IScannerInfo getScannerInformation(IResource resource);
+
/**
* The receiver will register the listener specified in the argument
* to receive change notifications when the information for the
@@ -25,15 +33,6 @@ public interface IScannerInfoProvider {
*/
public void subscribe(IResource resource, IScannerInfoChangeListener listener);
- /**
- * Answers true
if the receiver has information for
- * the resource specified in the argument, else false
.
- *
- * @param resource
- * @return
- */
- public boolean managesResource(IResource resource) throws CoreException;
-
/**
* The receiver will no longer notify the listener specified in
* the argument when information about the reource it is responsible
diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml
index b7f4b930ad2..88526a69002 100644
--- a/core/org.eclipse.cdt.core/plugin.xml
+++ b/core/org.eclipse.cdt.core/plugin.xml
@@ -33,7 +33,7 @@
-
+
@@ -281,19 +281,24 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/core/org.eclipse.cdt.core/schema/ScannerInfoProvider.exsd b/core/org.eclipse.cdt.core/schema/ScannerInfoProvider.exsd
deleted file mode 100644
index 9980b0ca2f9..00000000000
--- a/core/org.eclipse.cdt.core/schema/ScannerInfoProvider.exsd
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
- This extension point provides a mechanism for the clients of the scanner to discover providers of information the scanner requires to function properly. This information is usually provided by a build system.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A unique name that will be used to reference this parser.
-
-
-
-
-
-
- A fully qualified name of the Java class that implements <samp>org.eclipse.cdt.core.parser.IScannerProviderInfo</samp> interface
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1.2
-
-
-
-
-
-
-
-
- [Enter extension point usage example here.]
-
-
-
-
-
-
-
-
- The following is an example of the extension point usage:
-<p>
-<pre>
-<extension
- id="org.eclipse.cdt.core.ScannerInfoProvider"
- name="Scanner Information Provider"
- point="org.eclipse.cdt.core.ScannerInfoProvider">
- <provider
- id="org.eclipse.cdt.core.provider.managed"
- class="org.eclipse.cdt.core.build.managed.ManagedBuildManager">
- </provider>
-</extension>
-</pre>
-
-
-
-
-
-
-
-
- [Enter information about supplied implementation of this extension point.]
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
index 3bfe1f80d3a..2b362dcff76 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
@@ -16,6 +16,7 @@ import java.util.ResourceBundle;
import org.eclipse.cdt.core.index.IndexModel;
import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.parser.IScannerInfoProvider;
import org.eclipse.cdt.core.resources.IConsole;
import org.eclipse.cdt.internal.core.CDescriptorManager;
import org.eclipse.cdt.internal.core.CPathEntry;
@@ -57,7 +58,12 @@ public class CCorePlugin extends Plugin {
public final static String DEFAULT_BINARY_PARSER_SIMPLE_ID = "ELF";
public final static String DEFAULT_BINARY_PARSER_UNIQ_ID = PLUGIN_ID + "." + DEFAULT_BINARY_PARSER_SIMPLE_ID;
public final static String PREF_USE_NEW_PARSER = "useNewParser";
-
+
+ // Build Model Interface Discovery
+ public final static String BUILD_SCANNER_INFO_SIMPLE_ID = "ScannerInfoProvider";
+ public final static String BUILD_SCANNER_INFO_UNIQ_ID = PLUGIN_ID + "." + BUILD_SCANNER_INFO_SIMPLE_ID;
+
+
/**
* Possible configurable option ID.
* @see #getDefaultOptions
@@ -696,6 +702,21 @@ public class CCorePlugin extends Plugin {
}
return null;
}
+
+
+ public IScannerInfoProvider getScannerInfoProvider(IProject project) {
+ IScannerInfoProvider provider = null;
+ if (project != null) {
+ try {
+ ICDescriptor desc = (ICDescriptor) getCProjectDescription(project);
+ ICExtensionReference[] extensions = desc.get(BUILD_SCANNER_INFO_UNIQ_ID);
+ if (extensions.length > 0)
+ provider = (IScannerInfoProvider) extensions[0].createExtension();
+ } catch (CoreException e) {
+ }
+ }
+ return provider;
+ }
// Preference to turn on/off the new parser
public void setUseNewParser(boolean useNewParser) {
diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog
index 9edfd911de0..4af289c98ca 100644
--- a/core/org.eclipse.cdt.ui/ChangeLog
+++ b/core/org.eclipse.cdt.ui/ChangeLog
@@ -1,3 +1,19 @@
+2003-08-13 Sean Evoy
+ A simple change to add transparency information to the build property page
+ GIFs. They were not being drawn properly on Solaris/Motif and would probably
+ have shown the same behaviour on Linux. Now, they all get blitted correctly
+ even with a different widget background colour.
+ * icons/full/build16/build_configs.gif
+ * icons/full/build16/config-category.gif
+ * icons/full/build16/config-tool.gif
+
+ Updated the new project wizard to register the correct build manager at
+ project creation time. We have switched to using the CDescriptor mechanism
+ for provider discovery. In order for the to work, the project has to be updated
+ properly and the only time it can be easily done is at creation time.
+ * build/org/eclipse/cdt/ui/build/wizards/ManagedProjectWizard.java
+ * src/org/eclipse/cdt/ui/wizards/CProjectWizard.java
+
2003-08-13 John Camelon
Fixed Bug 41480 - ceditor extension point is not default editor for C++ file extensions
diff --git a/core/org.eclipse.cdt.ui/build/org/eclipse/cdt/ui/build/wizards/ManagedProjectWizard.java b/core/org.eclipse.cdt.ui/build/org/eclipse/cdt/ui/build/wizards/ManagedProjectWizard.java
index 664be138613..170e709ec69 100644
--- a/core/org.eclipse.cdt.ui/build/org/eclipse/cdt/ui/build/wizards/ManagedProjectWizard.java
+++ b/core/org.eclipse.cdt.ui/build/org/eclipse/cdt/ui/build/wizards/ManagedProjectWizard.java
@@ -12,6 +12,7 @@ package org.eclipse.cdt.ui.build.wizards;
***********************************************************************/
import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.ICDescriptor;
import org.eclipse.cdt.core.ManagedCProjectNature;
import org.eclipse.cdt.core.build.managed.BuildException;
import org.eclipse.cdt.core.build.managed.IConfiguration;
@@ -108,6 +109,16 @@ public abstract class ManagedProjectWizard extends CProjectWizard {
} catch (BuildException e) {
e.printStackTrace();
}
+
+ // Associate the project with the managed builder so the clients can get proper information
+ try {
+ ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(project);
+ desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
+ desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY);
+ } catch (CoreException e) {
+ // TODO Flag the error to the user
+ }
+
// Save the build options
monitor.subTask("Saving new build options.");
ManagedBuildManager.saveBuildInfo(project);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CProjectWizard.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CProjectWizard.java
index 1820663036b..13dcacba9a5 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CProjectWizard.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CProjectWizard.java
@@ -10,6 +10,8 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.ICDescriptor;
+import org.eclipse.cdt.core.build.standard.StandardBuildManager;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.utils.ui.swt.IValidation;
@@ -58,6 +60,7 @@ public abstract class CProjectWizard extends BasicNewResourceWizard implements I
private static final String WZ_DESC= "CProjectWizard.description"; //$NON-NLS-1$
private static final String WINDOW_TITLE = "CProjectWizard.windowTitle"; //$NON-NLS-1$
+
private String wz_title;
private String wz_desc;
@@ -279,6 +282,16 @@ public abstract class CProjectWizard extends BasicNewResourceWizard implements I
protected void doRun(IProgressMonitor monitor) throws CoreException {
createNewProject(monitor);
+
+ // Associate the project with the standard builder so the clients can get proper information
+ try {
+ ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(newProject);
+ desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
+ desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, StandardBuildManager.INTERFACE_IDENTITY);
+ } catch (CoreException e) {
+ // TODO Flag the error to the user
+ }
+
}
/**