Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJohn Camelon2003-08-13 17:45:38 +0000
committerJohn Camelon2003-08-13 17:45:38 +0000
commitdf11a294b8a2e86abfd4ae3e3fbde8a381c5fd3d (patch)
treed97412d578b6b023aecbd8b3f8a0df1828a6ebd6 /core
parentfbd1af4e4527ae8c0b3d4cf965d238923cda3246 (diff)
downloadorg.eclipse.cdt-df11a294b8a2e86abfd4ae3e3fbde8a381c5fd3d.tar.gz
org.eclipse.cdt-df11a294b8a2e86abfd4ae3e3fbde8a381c5fd3d.tar.xz
org.eclipse.cdt-df11a294b8a2e86abfd4ae3e3fbde8a381c5fd3d.zip
Patch for Sean Evoy
In order to work through CExtensionPoint mechanism, I have to change the existing extension point entries for the Managed and Standard builders to the following (all future builders will have to conform to this as well): <extension id="ManagedBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"> <cextension> <run class="org.eclipse.cdt.core.build.managed.ManagedBuildManager"> </run> </cextension> </extension> <extension id="StandardBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"> <cextension> <run class="org.eclipse.cdt.core.build.standard.StandardBuildManager"> </run> </cextension> </extension> As well, the ManagedBuildManager and StandardBuildManager must extend AbstractCExtension. The new project wizards for managed and standard projects have to be modified to register the right class as the scanner info providers for the project. The example below shows the managed project wizard code, but the standard project wizard is similar. 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); } <snip> Clients use a new method defined in CCorePlugin 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; } to get the information provider as shown in the updated JUnit test code below: // Find the first IScannerInfoProvider that supplies build info for the project IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project); assertNotNull(provider); As is the case now, clients implement the IScannerInfoChangeListener interface and pass themselves to the provider in a subscription message. There is also a new method on the IScannerInfoProvider interface that allows the client to get information immediately as shown below: IScannerInfo currentSettings = provider.getScannerInformation(project); The ManagedBuildManager::getScannerInfo(IResource) method will be deprecated, then removed before the end of this release cycle.
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core.tests/ChangeLog14
-rw-r--r--core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java (renamed from core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java)102
-rw-r--r--core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/StandardBuildTests.java59
-rw-r--r--core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java4
-rw-r--r--core/org.eclipse.cdt.core/.classpath12
-rw-r--r--core/org.eclipse.cdt.core/ChangeLog28
-rw-r--r--core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/managed/ManagedBuildManager.java58
-rw-r--r--core/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/standard/StandardBuildManager.java44
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerInfoProvider.java21
-rw-r--r--core/org.eclipse.cdt.core/plugin.xml27
-rw-r--r--core/org.eclipse.cdt.core/schema/ScannerInfoProvider.exsd121
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java23
-rw-r--r--core/org.eclipse.cdt.ui/ChangeLog16
-rw-r--r--core/org.eclipse.cdt.ui/build/org/eclipse/cdt/ui/build/wizards/ManagedProjectWizard.java11
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CProjectWizard.java13
15 files changed, 253 insertions, 300 deletions
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
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 <code>IProject</code> 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 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
+ <classpathentry kind="src" path="build/"/>
<classpathentry kind="src" path="index/"/>
<classpathentry kind="src" path="model/"/>
<classpathentry kind="src" path="src/"/>
<classpathentry kind="src" path="utils/"/>
- <classpathentry kind="src" path="build"/>
- <classpathentry kind="src" path="dom"/>
- <classpathentry kind="src" path="parser"/>
+ <classpathentry kind="src" path="parser/"/>
+ <classpathentry kind="src" path="dom/"/>
+ <classpathentry kind="src" path="search/"/>
+ <classpathentry kind="src" path="dependency/"/>
<classpathentry kind="src" path="/org.eclipse.core.resources"/>
<classpathentry kind="src" path="/org.eclipse.core.runtime"/>
<classpathentry kind="src" path="/org.apache.xerces"/>
@@ -14,8 +16,6 @@
<classpathentry kind="src" path="/org.eclipse.compare"/>
<classpathentry kind="src" path="/org.eclipse.debug.core"/>
<classpathentry kind="src" path="/org.eclipse.core.boot"/>
- <classpathentry kind="var" path="JRE_LIB" sourcepath="JRE_SRC"/>
- <classpathentry kind="src" path="search"/>
- <classpathentry kind="src" path="dependency"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>
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
@@ -463,6 +463,13 @@ public class ManagedBuildManager implements IScannerInfoProvider {
}
/* (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)
*/
public synchronized void subscribe(IResource resource, IScannerInfoChangeListener listener) {
@@ -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
@@ -26,15 +34,6 @@ public interface IScannerInfoProvider {
public void subscribe(IResource resource, IScannerInfoChangeListener listener);
/**
- * Answers <code>true</code> if the receiver has information for
- * the resource specified in the argument, else <code>false</code>.
- *
- * @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
* for changes.
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 @@
<extension-point id="CBuildVariable" name="C/C++ Build Variable" schema="schema/CBuildVariable.exsd"/>
<extension-point id="CToolType" name="C/C++ Tool Type" schema="schema/CToolType.exsd"/>
<extension-point id="ManagedBuildInfo" name="Managed Build Tools" schema="schema/ManagedBuildTools.exsd"/>
- <extension-point id="ScannerInfoProvider" name="Scanner Information Provider" schema="schema/ScannerInfoProvider.exsd"/>
+ <extension-point id="ScannerInfoProvider" name="Scanner Information Provider"/>
<extension
point="org.eclipse.cdt.core.CToolType">
@@ -281,19 +281,24 @@
</ignore>
</extension>
<extension
- id="org.eclipse.cdt.core.ScannerInfoProvider"
- name="Scanner Information Provider"
+ id="ManagedBuildManager"
point="org.eclipse.cdt.core.ScannerInfoProvider">
- <provider
- class="org.eclipse.cdt.core.build.managed.ManagedBuildManager"
- id="org.eclipse.cdt.core.provider.managed">
- </provider>
- <provider
- class="org.eclipse.cdt.core.build.standard.StandardBuildManager"
- id="org.eclipse.cdt.core.provider.standard">
- </provider>
+ <cextension>
+ <run
+ class="org.eclipse.cdt.core.build.managed.ManagedBuildManager">
+ </run>
+ </cextension>
</extension>
+ <extension
+ id="StandardBuildManager"
+ point="org.eclipse.cdt.core.ScannerInfoProvider">
+ <cextension>
+ <run
+ class="org.eclipse.cdt.core.build.standard.StandardBuildManager">
+ </run>
+ </cextension>
+ </extension>
<extension id="task" name="%CTaskName" point="org.eclipse.core.resources.markers">
<super type="org.eclipse.core.resources.taskmarker"/>
<persistent value="true"/>
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 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.cdt.core">
-<annotation>
- <appInfo>
- <meta.schema plugin="org.eclipse.cdt.core" id="ScannerInfoProvider" name="Scanner Information Provider"/>
- </appInfo>
- <documentation>
- 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.
- </documentation>
- </annotation>
-
- <element name="extension">
- <complexType>
- <sequence>
- <element ref="provider" minOccurs="1" maxOccurs="unbounded"/>
- </sequence>
- <attribute name="point" type="string" use="required">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- <attribute name="id" type="string">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- <attribute name="name" type="string">
- <annotation>
- <documentation>
-
- </documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <element name="provider">
- <complexType>
- <attribute name="id" type="string" use="required">
- <annotation>
- <documentation>
- A unique name that will be used to reference this parser.
- </documentation>
- </annotation>
- </attribute>
- <attribute name="class" type="string">
- <annotation>
- <documentation>
- A fully qualified name of the Java class that implements &lt;samp&gt;org.eclipse.cdt.core.parser.IScannerProviderInfo&lt;/samp&gt; interface
- </documentation>
- <appInfo>
- <meta.attribute kind="java" basedOn="org.eclipse.cdt.core.parser.IScannerProviderInfo"/>
- </appInfo>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <annotation>
- <appInfo>
- <meta.section type="since"/>
- </appInfo>
- <documentation>
- 1.2
- </documentation>
- </annotation>
-
- <annotation>
- <appInfo>
- <meta.section type="examples"/>
- </appInfo>
- <documentation>
- [Enter extension point usage example here.]
- </documentation>
- </annotation>
-
- <annotation>
- <appInfo>
- <meta.section type="apiInfo"/>
- </appInfo>
- <documentation>
- The following is an example of the extension point usage:
-&lt;p&gt;
-&lt;pre&gt;
-&lt;extension
- id=&quot;org.eclipse.cdt.core.ScannerInfoProvider&quot;
- name=&quot;Scanner Information Provider&quot;
- point=&quot;org.eclipse.cdt.core.ScannerInfoProvider&quot;&gt;
- &lt;provider
- id=&quot;org.eclipse.cdt.core.provider.managed&quot;
- class=&quot;org.eclipse.cdt.core.build.managed.ManagedBuildManager&quot;&gt;
- &lt;/provider&gt;
-&lt;/extension&gt;
-&lt;/pre&gt;
- </documentation>
- </annotation>
-
- <annotation>
- <appInfo>
- <meta.section type="implementation"/>
- </appInfo>
- <documentation>
- [Enter information about supplied implementation of this extension point.]
- </documentation>
- </annotation>
-
- <annotation>
- <appInfo>
- <meta.section type="copyright"/>
- </appInfo>
- <documentation>
-
- </documentation>
- </annotation>
-
-</schema>
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
+ }
+
}
/**

Back to the top