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 + } + } /**