From 92669e00620ce783b323bcea4f965a752d0b6f5f Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 27 Oct 2003 20:57:47 +0000 Subject: [PATCH] Patch for Bogda Gheorghe: (44366 & 45324) - Moved off all dependency calculations to the Indexer thread, created a new UpdateDependency job - Modified CSearchOperation to only lock the workspace when tagging resources with markers. --- .../ChangeLog | 597 +++++++++--------- .../internal/core/MakefileGenerator.java | 4 +- .../core/indexer/tests/DependencyTests.java | 15 +- .../core/model/tests/WorkingCopyTests.java | 4 +- .../cdt/core/search/tests/BaseSearchTest.java | 1 - .../core/search/tests/OtherPatternTests.java | 21 +- .../org.eclipse.cdt.core/dependency/ChangeLog | 115 ++-- .../sourcedependency/UpdateDependency.java | 101 +++ core/org.eclipse.cdt.core/index/ChangeLog | 463 +++++++------- .../org/eclipse/cdt/internal/core/Util.java | 32 + .../core/search/indexing/IndexAllProject.java | 7 +- .../core/search/indexing/IndexManager.java | 10 +- .../internal/core/model/DeltaProcessor.java | 40 +- core/org.eclipse.cdt.core/search/ChangeLog | 497 ++++++++------- .../eclipse/cdt/core/search/SearchEngine.java | 14 +- .../core/search/AcceptMatchOperation.java | 48 ++ .../core/search/matching/MatchLocator.java | 12 +- .../core/search/processing/JobManager.java | 22 +- .../internal/ui/search/CSearchOperation.java | 9 +- .../ui/search/CSearchResultCollector.java | 1 + .../ui/text/CCompletionProcessor.java | 2 +- 21 files changed, 1121 insertions(+), 894 deletions(-) create mode 100644 core/org.eclipse.cdt.core/dependency/org/eclipse/cdt/internal/core/sourcedependency/UpdateDependency.java create mode 100644 core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/AcceptMatchOperation.java diff --git a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog index a6992eb5170..72fbc83ea20 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog +++ b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog @@ -1,298 +1,301 @@ -2003-10-03 Sean Evoy - Fix for critical bug 44134. - - The problem lies in how the makefile is generated when a build target - references other projects. The makefile creates a command to change to - the build directory of the referenced project and call $(MAKE) there, i.e. - cd ; $(MAKE) clean all - - The problem arises when the directory change fails. As of RC0, the command - after the semi-colon is evaluated. Unfortunately, it evaluates to a recursive - make call in the build directory of the build target and 'make' will keep - invoking more 'make's until Eclipse runs out of memory. With a manual build, - the user can still cancel the build. When autobuild is turned on, they cannot. - The only way to shut down Eclipse under that scenario is to kill it, and when - it restarts, autobuild is still enabled and the problem repeats. - - The solution is to NOT perform the 'make' command if the 'cd' fails, i.e. - cd && $(MAKE) clean all - - When the dependencies are generated this way, the 'cd' will fail as will the - build. The final tweak is to ignore the 'cd' failure and allow the rest of - the build to continue, i.e. - -cd && $(MAKE) clean all - - * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java - -2003-10-01 Sean Evoy - Final fix for bugs 44020. - The problem lay with the way that new projects were being created when the - root configuration of the project had tool references overriding options. - What the new configuration should have been doing is making a personal copy - of the tool reference and its options. Instead, they were all sharing the - parents. Seems simple enough now that I found it. - - OptionReference provides a method to retreive its option (so new - OptionReferences can be cloned). - * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java - - Configuration now behaves correctly when it is created from another configuration. - * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java - -2003-10-01 Sean Evoy - Fix for bugs 43490 (trivial), 44020, and 43980. - Added a new field to the schema for a tool. The attribute manages a list of - project natures that the tool should be filtered against in the build model - and UI. - * schema/ManagedBuildTools.exsd - - Updated the ITool interface and its mplementors to pay attention to this new - attribute when loading from a plugin file. Clients can querry for a numeric - constant indicating the filter. - * src/org/eclipse/cdt/managedbuilder/core/ITool.java - * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java - * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java - - All the methods in managed build manager that access information stored in a tool - first check that the tool is valid for the project nature. - * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java - - Put a safety check in the option reference constructor when reading one in from - a project file. I the option reference is to an option not managed by the build - model, the constructor does not add itself to the runtime representation of the - model. - * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java - - In preparation for 44020, each new target created is assigned a truly random ID. - * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java - -2003-09-30 Sean Evoy - Fix for bug 41826. - - Finished the use case for changing header files and triggering a build. I had - to add a new attribute to the build model schema to allow a build information - client to determine that a file is considered a header file. - * schema/ManagedBuildTools.exsd - - The ITool, and its implementors now have a method to test if an extension is - considered to belong to a header file. The Tool also pays attention to the new - attribute when it reads itself in from the plugin file. - * src/org/eclipse/cdt/managedbuilder/core/ITool.java - * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java - * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java - - There is a method for clients of this information on the BuildInfo interface and - its implementor. - * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java - * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java - - The builder had to be tweaked in order to behave correctly on a build of an - empty project or non-managed projects. - * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java - - The makefile generator had to be tweaked to properly add folders that are effected - by header file changes. - * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java - -2003-09-26 Sean Evoy - A partial implementation for bug 41826. This patch contains the logic to properly - respond in the face of the following project changes: - - 1. A generated project element, such as the build target or an intermediate file, - is deleted in the build project, or any projects it references. - 2. The build settings change in the build project or any projects it - references. - - In order to actually do this correctly, I had to stop being so precious during the - build. The makefile generator was was calculating the "build needed" state as it - walked the change delta. However, the Eclipse core has already determined that I - need to do a build. Further, as I discovered earlier, it doesn't always pass what - has changed in referenced projects as part of the delta. Essentially, that means I - will never be able to fully calculate the change set in the makefile generator's - delta visitor, and to even approximate a decent set of cases, the logic would quickly - bog down in complexity. - - The solution is to trust Eclipse and alway invoke make when my incremental builder - is called. At worst, if there is no significant change, make will execute and - report nothing to be done. - - The modified makefile builder no longer asks the makefile generator if it should - build. It also no longer cares if the change set is empty (make will report that). - Since it responds to changes in referenced project's build information, it also - scrubs all relevant projects after building. Since a build might involve building - referenced project elements, those projects get their project views refreshed after - build. The build markers for referenced projects are removed prior to build. - * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java - - The makefile generator has been simplified. The resource delta visitor logic no - longer trie to decide if a build should occur. The method to ask has been removed. - The class no longer throws an exception if the change set is empty. I am also a bit - more careful to call make with the right targets if a referenced project is built. - * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java - -2003-09-26 Sean Evoy - I added a fix to the builder and makefile generator to properly handle the following case. - Project A depends on Project B. Something changes in project B and the user requests - that A be built. Inthis case, the incremental builder is invoked, but it is passed a - 0-length delta on the top resource. Now, the logic of the builder is to treat that case as a - build event that triggers no makefile regeneration, just an invocation of make. - - Now handles the case where there is no flag applied to the make command and just - passes the targets as arguments. - * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java - - The makefile generator now considers the case where the delta is for a project resource - and has no children. If so, it flags that a build is needed but no makefile generation - occurs. It also throws a new exception if the top makefile is not saved. - * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java - -2003-09-25 Sean Evoy - A patch to resolve the problem with refreshing the project after a build, or - bug 42522 if you care about those sorts of things. The managed make builder was - calling refresh at inside a bad if statement. I corrected that and projects - refresh correctly. Of course, if you have the wrong binary parser selected you are - hosed. You will also notice that the string constants have been changed to - resolve to a different name. The standard builder uses this name and I wanted - to minimize the possibility of problems later. - * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java - - Prepended "Managed" to the externalized string identifiers to avoid future overlap - with the standard build system. Had to update the makefile generator to use the - new identifiers. - * src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties - * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java - - Changed the signature of the 'getMakeArguments' to return a string instead of an - array so the builder can invoke make with the user-specified args. I also changed - the logic of the getMakeCommand method in the implementor so that it only returns - a string containing the command itself. - * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java - * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java - - Explicitly trim all arrays to size before converting them to String[] for Options - and Tools. - *src/org/eclipse/cdt/managedbuilder/internal/core/Option.java - * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java - - Fixed a missing bit of logic in the Configuration when a user-object option is - deleted. Now the build model really does get rid of the the value. - * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java - -2003-09-25 Sean Evoy - This patch contains a lot of changes needed to implement fixes for 42648 and - 43122. - - For 42648, the schema for the the target had to be modified to include a - comma-separated list of valid host platforms. - * schema/ManagedBuildTools.exsd - - The target had to be updated to properly read in and understand this info, and - the interface had to be updated to return a list to the clients in the UI. The - target was also changed slightly. It now uses a safer accessor method to get at - the list of tools it maintains. I have also stopped persisting non-variant info - to the project file on serialize. There are elements of the target that are not - subject to change by the user (yet) so they should not be saved. - * src/org/eclipse/cdt/managedbuilder/core/ITarget.java - * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java - - For 43122, I started by simply adding a tool reference to the configurations. - The tool reference had option references for debug and optimization levels. It - should have worked, but the model was not handling the inheritance properly. The - JUnit tests were not finding it because of how they were configured. It was most - evident in the UI. So, the way configurations and tool reference search for - overridden option references had to be modified. While I was in there, I cleaned - up some of the accessor and iteration code in ToolReference and OptionReference. - - For the configuration, the only significant change was a new search method to - find all option references for a given tool, no matter where they are stored. - The method had to consider what was overridden in a child config, what was added by - a child config, and what the parent (or parents) define. - * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java - - Option reference now pays attention to overidden values in the plugin file. Until - now, it only handled the overrides in the project file. - * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java - - The ToolReference now distinguishes between local option references which it - manages directly, and option references held by tool references in the parent(s) - of its owner. It only serializes its own references, but when asked for options - relating to the tool it references, it replies with all option references in its - hierarchy. - * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java - - -2003-09-25 Bogdan Gheorghe - Modified ResourceDeltaVisitor.visit() to use the new mechanism to get the - projects that dependend a file. - - Modified addSourceDependencies() to use the new mechanism to perform a DependencyQueryJob - - * src/org/eclipse/cdt/managedbuilder/internal/core/MakeFileGenerator.java - -2003-09-24 Sean Evoy - Changed the implementor of IScannerInfo to answer only absolute paths when asked for - includes paths. Users will specify the includes paths in the managed build UI in such a way - that the compiler will not complain. Either they will use absolute paths, or they will specify - them relative to the build directory. In the second case, it is easier for the managed builder - to convert the paths relative to this directory into absolute paths before replying tha it is for - the client to figure this out. - * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java - -2003-09-23 Sean Evoy - All the work in this patch is for critical bug 43292. In order to manage - configurations, there had to be a method through ITarget to remove - configurations. Also, to support the naming of newly created configurations, - I added a name method to the IConfiguration interface. Finally, the ITarget - needed to support setting (and resetting) the make command to use when building. - * src/org/eclipse/cdt/managedbuilder/core/IConfiguration.java - * src/org/eclipse/cdt/managedbuilder/core/ITarget.java - * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java - -2003-09-19 Sean Evoy - Added a new field to the target specification in the build model to - hard-code the binary parser for project creation. There is a new getter - method in the interface and the implementor contains additional code to - extract the information from a project file or plugin manifest. The - interface also contains new strings to make changing the specification - easier in the future. - * schema/ManagedBuildTools.exsd - * src/org/eclipse/cdt/managedbuilder/core/ITarget.java - * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java - - Fix for bug 41720: libraries are now found for Solaris and Linux - executables. The problem was the executable had no extension and - the client of the build model passed null instead of the empty string. - * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java - * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java - -2003-09-16 Sean Evoy - Patch contains a fix for bug 43017. Renamed the "addDeps" method to a - more descriptive "addSourceDependencies". Added a flag when the - inter-project dependencies are calculated so that clean and all are - properly passed to the make invocation. Finally, I replaced the hard-coded - 'make' with $(MAKE) - * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java - - It also contains some more work on 41826, specifically on the logic to - implement a rebuild when the build settings change. The builder checks for - a build model change whenever a build is requested and responds appropriately. - The make targets (i.e. 'clean' and 'all') are also calculated differently now. - * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java - - The build model was modified to set a dirty flag when an option changes. I also - made a change to avoid an NPE when the build info was loaded. - * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java - * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java - * src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java - - -2003-09-15 Sean Evoy - First submission of code to new project. Moved the managed builder - source code out of the cdt.core project. This includes the code to - implement the build model, along with the shema and extension point - declaration. Moved the builder, scnanaer info provider and managed - nature definitions into the package as well. - - There are 2 new classes to handle the externalized strings: - * src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderCorePlugin.java +2003-10-23 Bogdan Gheorghe + Updated the indexManager.perfomConcurrentJob call in MakefileGenerator + +2003-10-03 Sean Evoy + Fix for critical bug 44134. + + The problem lies in how the makefile is generated when a build target + references other projects. The makefile creates a command to change to + the build directory of the referenced project and call $(MAKE) there, i.e. + cd ; $(MAKE) clean all + + The problem arises when the directory change fails. As of RC0, the command + after the semi-colon is evaluated. Unfortunately, it evaluates to a recursive + make call in the build directory of the build target and 'make' will keep + invoking more 'make's until Eclipse runs out of memory. With a manual build, + the user can still cancel the build. When autobuild is turned on, they cannot. + The only way to shut down Eclipse under that scenario is to kill it, and when + it restarts, autobuild is still enabled and the problem repeats. + + The solution is to NOT perform the 'make' command if the 'cd' fails, i.e. + cd && $(MAKE) clean all + + When the dependencies are generated this way, the 'cd' will fail as will the + build. The final tweak is to ignore the 'cd' failure and allow the rest of + the build to continue, i.e. + -cd && $(MAKE) clean all + + * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java + +2003-10-01 Sean Evoy + Final fix for bugs 44020. + The problem lay with the way that new projects were being created when the + root configuration of the project had tool references overriding options. + What the new configuration should have been doing is making a personal copy + of the tool reference and its options. Instead, they were all sharing the + parents. Seems simple enough now that I found it. + + OptionReference provides a method to retreive its option (so new + OptionReferences can be cloned). + * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java + + Configuration now behaves correctly when it is created from another configuration. + * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java + +2003-10-01 Sean Evoy + Fix for bugs 43490 (trivial), 44020, and 43980. + Added a new field to the schema for a tool. The attribute manages a list of + project natures that the tool should be filtered against in the build model + and UI. + * schema/ManagedBuildTools.exsd + + Updated the ITool interface and its mplementors to pay attention to this new + attribute when loading from a plugin file. Clients can querry for a numeric + constant indicating the filter. + * src/org/eclipse/cdt/managedbuilder/core/ITool.java + * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java + * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java + + All the methods in managed build manager that access information stored in a tool + first check that the tool is valid for the project nature. + * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java + + Put a safety check in the option reference constructor when reading one in from + a project file. I the option reference is to an option not managed by the build + model, the constructor does not add itself to the runtime representation of the + model. + * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java + + In preparation for 44020, each new target created is assigned a truly random ID. + * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java + +2003-09-30 Sean Evoy + Fix for bug 41826. + + Finished the use case for changing header files and triggering a build. I had + to add a new attribute to the build model schema to allow a build information + client to determine that a file is considered a header file. + * schema/ManagedBuildTools.exsd + + The ITool, and its implementors now have a method to test if an extension is + considered to belong to a header file. The Tool also pays attention to the new + attribute when it reads itself in from the plugin file. + * src/org/eclipse/cdt/managedbuilder/core/ITool.java + * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java + * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java + + There is a method for clients of this information on the BuildInfo interface and + its implementor. + * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java + * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java + + The builder had to be tweaked in order to behave correctly on a build of an + empty project or non-managed projects. + * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java + + The makefile generator had to be tweaked to properly add folders that are effected + by header file changes. + * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java + +2003-09-26 Sean Evoy + A partial implementation for bug 41826. This patch contains the logic to properly + respond in the face of the following project changes: + + 1. A generated project element, such as the build target or an intermediate file, + is deleted in the build project, or any projects it references. + 2. The build settings change in the build project or any projects it + references. + + In order to actually do this correctly, I had to stop being so precious during the + build. The makefile generator was was calculating the "build needed" state as it + walked the change delta. However, the Eclipse core has already determined that I + need to do a build. Further, as I discovered earlier, it doesn't always pass what + has changed in referenced projects as part of the delta. Essentially, that means I + will never be able to fully calculate the change set in the makefile generator's + delta visitor, and to even approximate a decent set of cases, the logic would quickly + bog down in complexity. + + The solution is to trust Eclipse and alway invoke make when my incremental builder + is called. At worst, if there is no significant change, make will execute and + report nothing to be done. + + The modified makefile builder no longer asks the makefile generator if it should + build. It also no longer cares if the change set is empty (make will report that). + Since it responds to changes in referenced project's build information, it also + scrubs all relevant projects after building. Since a build might involve building + referenced project elements, those projects get their project views refreshed after + build. The build markers for referenced projects are removed prior to build. + * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java + + The makefile generator has been simplified. The resource delta visitor logic no + longer trie to decide if a build should occur. The method to ask has been removed. + The class no longer throws an exception if the change set is empty. I am also a bit + more careful to call make with the right targets if a referenced project is built. + * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java + +2003-09-26 Sean Evoy + I added a fix to the builder and makefile generator to properly handle the following case. + Project A depends on Project B. Something changes in project B and the user requests + that A be built. Inthis case, the incremental builder is invoked, but it is passed a + 0-length delta on the top resource. Now, the logic of the builder is to treat that case as a + build event that triggers no makefile regeneration, just an invocation of make. + + Now handles the case where there is no flag applied to the make command and just + passes the targets as arguments. + * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java + + The makefile generator now considers the case where the delta is for a project resource + and has no children. If so, it flags that a build is needed but no makefile generation + occurs. It also throws a new exception if the top makefile is not saved. + * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java + +2003-09-25 Sean Evoy + A patch to resolve the problem with refreshing the project after a build, or + bug 42522 if you care about those sorts of things. The managed make builder was + calling refresh at inside a bad if statement. I corrected that and projects + refresh correctly. Of course, if you have the wrong binary parser selected you are + hosed. You will also notice that the string constants have been changed to + resolve to a different name. The standard builder uses this name and I wanted + to minimize the possibility of problems later. + * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java + + Prepended "Managed" to the externalized string identifiers to avoid future overlap + with the standard build system. Had to update the makefile generator to use the + new identifiers. + * src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties + * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java + + Changed the signature of the 'getMakeArguments' to return a string instead of an + array so the builder can invoke make with the user-specified args. I also changed + the logic of the getMakeCommand method in the implementor so that it only returns + a string containing the command itself. + * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java + * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java + + Explicitly trim all arrays to size before converting them to String[] for Options + and Tools. + *src/org/eclipse/cdt/managedbuilder/internal/core/Option.java + * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java + + Fixed a missing bit of logic in the Configuration when a user-object option is + deleted. Now the build model really does get rid of the the value. + * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java + +2003-09-25 Sean Evoy + This patch contains a lot of changes needed to implement fixes for 42648 and + 43122. + + For 42648, the schema for the the target had to be modified to include a + comma-separated list of valid host platforms. + * schema/ManagedBuildTools.exsd + + The target had to be updated to properly read in and understand this info, and + the interface had to be updated to return a list to the clients in the UI. The + target was also changed slightly. It now uses a safer accessor method to get at + the list of tools it maintains. I have also stopped persisting non-variant info + to the project file on serialize. There are elements of the target that are not + subject to change by the user (yet) so they should not be saved. + * src/org/eclipse/cdt/managedbuilder/core/ITarget.java + * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java + + For 43122, I started by simply adding a tool reference to the configurations. + The tool reference had option references for debug and optimization levels. It + should have worked, but the model was not handling the inheritance properly. The + JUnit tests were not finding it because of how they were configured. It was most + evident in the UI. So, the way configurations and tool reference search for + overridden option references had to be modified. While I was in there, I cleaned + up some of the accessor and iteration code in ToolReference and OptionReference. + + For the configuration, the only significant change was a new search method to + find all option references for a given tool, no matter where they are stored. + The method had to consider what was overridden in a child config, what was added by + a child config, and what the parent (or parents) define. + * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java + + Option reference now pays attention to overidden values in the plugin file. Until + now, it only handled the overrides in the project file. + * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java + + The ToolReference now distinguishes between local option references which it + manages directly, and option references held by tool references in the parent(s) + of its owner. It only serializes its own references, but when asked for options + relating to the tool it references, it replies with all option references in its + hierarchy. + * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java + + +2003-09-25 Bogdan Gheorghe + Modified ResourceDeltaVisitor.visit() to use the new mechanism to get the + projects that dependend a file. + + Modified addSourceDependencies() to use the new mechanism to perform a DependencyQueryJob + + * src/org/eclipse/cdt/managedbuilder/internal/core/MakeFileGenerator.java + +2003-09-24 Sean Evoy + Changed the implementor of IScannerInfo to answer only absolute paths when asked for + includes paths. Users will specify the includes paths in the managed build UI in such a way + that the compiler will not complain. Either they will use absolute paths, or they will specify + them relative to the build directory. In the second case, it is easier for the managed builder + to convert the paths relative to this directory into absolute paths before replying tha it is for + the client to figure this out. + * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java + +2003-09-23 Sean Evoy + All the work in this patch is for critical bug 43292. In order to manage + configurations, there had to be a method through ITarget to remove + configurations. Also, to support the naming of newly created configurations, + I added a name method to the IConfiguration interface. Finally, the ITarget + needed to support setting (and resetting) the make command to use when building. + * src/org/eclipse/cdt/managedbuilder/core/IConfiguration.java + * src/org/eclipse/cdt/managedbuilder/core/ITarget.java + * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java + +2003-09-19 Sean Evoy + Added a new field to the target specification in the build model to + hard-code the binary parser for project creation. There is a new getter + method in the interface and the implementor contains additional code to + extract the information from a project file or plugin manifest. The + interface also contains new strings to make changing the specification + easier in the future. + * schema/ManagedBuildTools.exsd + * src/org/eclipse/cdt/managedbuilder/core/ITarget.java + * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java + + Fix for bug 41720: libraries are now found for Solaris and Linux + executables. The problem was the executable had no extension and + the client of the build model passed null instead of the empty string. + * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java + * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java + +2003-09-16 Sean Evoy + Patch contains a fix for bug 43017. Renamed the "addDeps" method to a + more descriptive "addSourceDependencies". Added a flag when the + inter-project dependencies are calculated so that clean and all are + properly passed to the make invocation. Finally, I replaced the hard-coded + 'make' with $(MAKE) + * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java + + It also contains some more work on 41826, specifically on the logic to + implement a rebuild when the build settings change. The builder checks for + a build model change whenever a build is requested and responds appropriately. + The make targets (i.e. 'clean' and 'all') are also calculated differently now. + * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java + + The build model was modified to set a dirty flag when an option changes. I also + made a change to avoid an NPE when the build info was loaded. + * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java + * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java + * src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java + + +2003-09-15 Sean Evoy + First submission of code to new project. Moved the managed builder + source code out of the cdt.core project. This includes the code to + implement the build model, along with the shema and extension point + declaration. Moved the builder, scnanaer info provider and managed + nature definitions into the package as well. + + There are 2 new classes to handle the externalized strings: + * src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderCorePlugin.java * src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties \ No newline at end of file diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java index 2b6a11e47b8..aadd19e8233 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java @@ -161,7 +161,7 @@ public class MakefileGenerator { pathCollector, indexManager), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, - null); + null, null); // We will get back an array of resource names relative to the workspace String[] deps = pathCollector.getPaths(); @@ -341,7 +341,7 @@ public class MakefileGenerator { // ASk the dep generator to find all the deps for this resource ArrayList dependencies = new ArrayList(); try { - indexManager.performConcurrentJob(new DependencyQueryJob(project, (IFile)resource, indexManager, dependencies), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null); + indexManager.performConcurrentJob(new DependencyQueryJob(project, (IFile)resource, indexManager, dependencies), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null, null); } catch (Exception e) { continue; } diff --git a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java index a19d3342228..cbeb4e215eb 100644 --- a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java +++ b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java @@ -15,7 +15,6 @@ import java.util.Arrays; import java.util.Iterator; import java.util.Set; -import junit.extensions.TestDecorator; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -143,7 +142,7 @@ import org.eclipse.core.runtime.Platform; String[] depTest2Model = {File.separator + "DepTestProject" + File.separator + "d.h", File.separator + "DepTestProject" + File.separator + "DepTest2.h"}; ArrayList includes = new ArrayList(); - indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null); + indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null,null); String[] depTestModelLocal = convertToLocalPath(depTestModel); String[] depTestIncludes = new String[includes.size()]; @@ -166,7 +165,7 @@ import org.eclipse.core.runtime.Platform; } ArrayList includes2 = new ArrayList(); - indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest2,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null); + indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest2,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null,null); String[] depTest2ModelLocal = convertToLocalPath(depTest2Model); String[] depTest2Includes = new String[includes2.size()]; @@ -345,7 +344,7 @@ import org.eclipse.core.runtime.Platform; String[] preDepTestModel = {File.separator + "DepTestProject" + File.separator + "DepTest.h", File.separator + "DepTestProject" + File.separator + "Inc1.h", File.separator + "DepTestProject" + File.separator + "a.h", File.separator + "DepTestProject" + File.separator + "c.h", File.separator + "DepTestProject" + File.separator + "d.h"}; ArrayList includes = new ArrayList(); - indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null); + indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null); String[] preDepTestModelLocal = convertToLocalPath(preDepTestModel); String[] preDepTestIncludes = new String[includes.size()]; @@ -374,7 +373,7 @@ import org.eclipse.core.runtime.Platform; testProject.refreshLocal(IResource.DEPTH_INFINITE,null); - indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null); + indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null); String[] postDepTestModelLocal = convertToLocalPath(postDepTestModel); @@ -412,7 +411,7 @@ import org.eclipse.core.runtime.Platform; String[] preDepTestModel = {File.separator + "DepTestProject" + File.separator + "DepTest3.h", File.separator + "DepTestProject" + File.separator + "a.h", File.separator + "DepTestProject" + File.separator + "c.h"}; ArrayList includes = new ArrayList(); - indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null); + indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null); String[] preDepTestModelLocal = convertToLocalPath(preDepTestModel); String[] preDepTestIncludes = new String[includes.size()]; @@ -441,7 +440,7 @@ import org.eclipse.core.runtime.Platform; testProject.refreshLocal(IResource.DEPTH_INFINITE,null); - indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null); + indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null); String[] postDepTestModelLocal = convertToLocalPath(postDepTestModel); @@ -583,7 +582,7 @@ import org.eclipse.core.runtime.Platform; indexManager ), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, - null ); + null, null ); } private void editCode(IFile tempFile, String beforeString, String afterString) throws IOException, CoreException, InterruptedException{ diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/WorkingCopyTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/WorkingCopyTests.java index 4a48ff56f90..e933ca114fb 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/WorkingCopyTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/WorkingCopyTests.java @@ -123,6 +123,8 @@ public class WorkingCopyTests extends TestCase { // DestroyWorkingCopy wc.destroy(); - assertFalse(wc.exists()); + assertFalse(wc.exists()); + + Thread.sleep(1000); } } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java index 7c45f21239f..645d7bde85b 100644 --- a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java +++ b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java @@ -24,7 +24,6 @@ import org.eclipse.cdt.core.search.ICSearchPattern; import org.eclipse.cdt.core.search.ICSearchResultCollector; import org.eclipse.cdt.core.search.ICSearchScope; import org.eclipse.cdt.core.search.SearchEngine; -import org.eclipse.cdt.internal.core.search.indexing.IndexManager; import org.eclipse.cdt.internal.ui.search.CSearchResultCollector; import org.eclipse.cdt.testplugin.FileManager; import org.eclipse.core.internal.resources.ResourceException; diff --git a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java index aa4e373c70c..876a9529693 100644 --- a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java +++ b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java @@ -13,19 +13,23 @@ */ package org.eclipse.cdt.core.search.tests; +import java.util.ArrayList; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; +import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.search.BasicSearchMatch; import org.eclipse.cdt.core.search.ICSearchPattern; import org.eclipse.cdt.core.search.IMatch; import org.eclipse.cdt.core.search.SearchEngine; import org.eclipse.cdt.internal.core.CharOperation; +import org.eclipse.cdt.internal.core.search.AcceptMatchOperation; import org.eclipse.cdt.internal.core.search.matching.FieldDeclarationPattern; import org.eclipse.cdt.internal.core.search.matching.MatchLocator; import org.eclipse.cdt.internal.core.search.matching.NamespaceDeclarationPattern; import org.eclipse.cdt.internal.core.search.matching.OrPattern; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; /** @@ -322,9 +326,20 @@ public class OtherPatternTests extends BaseSearchTest { resultCollector.setProgressMonitor( monitor ); resultCollector.aboutToStart(); - MatchLocator matchLocator = new MatchLocator( pattern, resultCollector, scope, monitor ); - matchLocator.locateMatches( new String [] { path }, workspace, null ); - resultCollector.done(); + + ArrayList matchesList = new ArrayList(); + MatchLocator matchLocator = new MatchLocator( pattern, resultCollector, scope, monitor ); + matchLocator.locateMatches( new String [] { path }, workspace, null, matchesList); + + AcceptMatchOperation acceptMatchOp = new AcceptMatchOperation(resultCollector, matchesList); + try { + CCorePlugin.getWorkspace().run(acceptMatchOp,null); + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // + //resultCollector.done(); Set matches = resultCollector.getSearchResults(); assertEquals( matches.size(), 4 ); diff --git a/core/org.eclipse.cdt.core/dependency/ChangeLog b/core/org.eclipse.cdt.core/dependency/ChangeLog index 75e082cd3f7..5f4d18ef0cb 100644 --- a/core/org.eclipse.cdt.core/dependency/ChangeLog +++ b/core/org.eclipse.cdt.core/dependency/ChangeLog @@ -1,57 +1,60 @@ -2003-09-25 Bogdan Gheorghe - - As a result of folding the dependency service into the indexer - have removed the following files: - - * src/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencySelector.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java - * src/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java - * src/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java - * src/org/eclipse/cdt/internal/core/sourcedependency/RemoveFromDependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java - * src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java - * src/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java - - - -2003-09-22 Bogdan Gheorghe - - Took out enable section for DependencyManager - -2003-09-11 Bogdan Gheorghe - - Added null guard to DependencyManager.getDependencyTree(), - DependencyTree.getFileDependencies() - -2003-09-08 Andrew Niefer - - Modified calls to ParserFactory to specify which language to use - - Modified IDependencyTree.add to take ParserLanguage as a parameter so that it can - be passed on when creating the preprocessor - -2003-07-23 Bogdan Gheorghe - - Added initial dependency implementation - - * src/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DenpendencyQueryJob.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java - * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java - * src/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java - * src/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java - - * src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java - * src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java - * src/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java - * src/org/eclipse/cdt/internal/core/sourcedependency/impl/Node.java - -- +2003-10-23 Bogdan Gheorghe + - Added UpdateDependency job + +2003-09-25 Bogdan Gheorghe + - As a result of folding the dependency service into the indexer + have removed the following files: + + * src/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencySelector.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java + * src/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java + * src/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java + * src/org/eclipse/cdt/internal/core/sourcedependency/RemoveFromDependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java + * src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java + * src/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java + + + +2003-09-22 Bogdan Gheorghe + - Took out enable section for DependencyManager + +2003-09-11 Bogdan Gheorghe + - Added null guard to DependencyManager.getDependencyTree(), + DependencyTree.getFileDependencies() + +2003-09-08 Andrew Niefer + - Modified calls to ParserFactory to specify which language to use + - Modified IDependencyTree.add to take ParserLanguage as a parameter so that it can + be passed on when creating the preprocessor + +2003-07-23 Bogdan Gheorghe + + Added initial dependency implementation + + * src/org/eclipse/cdt/internal/core/sourcedependency/AddFileToDependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyManager.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DenpendencyQueryJob.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequest.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyRequestor.java + * src/org/eclipse/cdt/internal/core/sourcedependency/DependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/EntireProjectDependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/IDependencyTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/IPreprocessorOutput.java + * src/org/eclipse/cdt/internal/core/sourcedependency/ISourceDependency.java + * src/org/eclipse/cdt/internal/core/sourcedependency/PreprocessorOutput.java + + * src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntry.java + * src/org/eclipse/cdt/internal/core/sourcedependency/impl/IncludeEntryHashedArray.java + * src/org/eclipse/cdt/internal/core/sourcedependency/impl/InMemoryTree.java + * src/org/eclipse/cdt/internal/core/sourcedependency/impl/Node.java + +- \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/dependency/org/eclipse/cdt/internal/core/sourcedependency/UpdateDependency.java b/core/org.eclipse.cdt.core/dependency/org/eclipse/cdt/internal/core/sourcedependency/UpdateDependency.java new file mode 100644 index 00000000000..bfd02ab0526 --- /dev/null +++ b/core/org.eclipse.cdt.core/dependency/org/eclipse/cdt/internal/core/sourcedependency/UpdateDependency.java @@ -0,0 +1,101 @@ +/* + * Created on Oct 13, 2003 + * + * To change the template for this generated file go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +package org.eclipse.cdt.internal.core.sourcedependency; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.search.ICSearchConstants; +import org.eclipse.cdt.core.search.ICSearchScope; +import org.eclipse.cdt.core.search.SearchEngine; +import org.eclipse.cdt.internal.core.search.PathCollector; +import org.eclipse.cdt.internal.core.search.PatternSearchJob; +import org.eclipse.cdt.internal.core.search.indexing.IndexManager; +import org.eclipse.cdt.internal.core.search.matching.CSearchPattern; +import org.eclipse.cdt.internal.core.search.processing.IJob; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Path; + +/** + * @author bgheorgh + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class UpdateDependency implements IJob { + PathCollector pathCollector; + IResource resource; + + /** + * @param resource + */ + public UpdateDependency(IResource resource) { + this.resource = resource; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.internal.core.search.processing.IJob#belongsTo(java.lang.String) + */ + public boolean belongsTo(String jobFamily) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.internal.core.search.processing.IJob#cancel() + */ + public void cancel() { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.internal.core.search.processing.IJob#execute(org.eclipse.core.runtime.IProgressMonitor) + */ + public boolean execute(IProgressMonitor progress) { + PathCollector pathCollector = new PathCollector(); + //SubProgressMonitor subMonitor = (progressMonitor == null ) ? null : new SubProgressMonitor( progressMonitor, 5 ); + ICSearchScope scope = SearchEngine.createWorkspaceScope(); + CSearchPattern pattern = CSearchPattern.createPattern(resource.getLocation().toOSString(),ICSearchConstants.INCLUDE, ICSearchConstants.REFERENCES,ICSearchConstants.EXACT_MATCH,true); + IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager(); + indexManager.performConcurrentJob( + new PatternSearchJob( + (CSearchPattern) pattern, + scope, + pathCollector, + indexManager + ), + ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, + null, + this ); + + String[] iPath = pathCollector.getPaths(); + for (int i=0;iCModelManager to convert @@ -511,35 +502,8 @@ public class DeltaProcessor { String fileExtension = resource.getFileExtension(); if ((fileExtension != null) && - (isValidHeader(fileExtension))) - { - PathCollector pathCollector = new PathCollector(); - //SubProgressMonitor subMonitor = (progressMonitor == null ) ? null : new SubProgressMonitor( progressMonitor, 5 ); - ICSearchScope scope = SearchEngine.createWorkspaceScope(); - CSearchPattern pattern = CSearchPattern.createPattern(resource.getLocation().toOSString(),ICSearchConstants.INCLUDE, ICSearchConstants.REFERENCES,ICSearchConstants.EXACT_MATCH,true); - IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager(); - indexManager.performConcurrentJob( - new PatternSearchJob( - (CSearchPattern) pattern, - scope, - pathCollector, - indexManager - ), - ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, - null ); - - String[] iPath = pathCollector.getPaths(); - for (int i=0;iPreferences>Java>Code Generation>Code and Comments + */ +package org.eclipse.cdt.internal.core.search; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.eclipse.cdt.core.search.ICSearchResultCollector; +import org.eclipse.cdt.core.search.IMatch; +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; + +/** + * @author bgheorgh + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class AcceptMatchOperation implements IWorkspaceRunnable { + + ICSearchResultCollector collector; + ArrayList matches; + /** + * @param collector + */ + public AcceptMatchOperation(ICSearchResultCollector collector, ArrayList matches) { + this.collector = collector; + this.matches = matches; + } + + /* (non-Javadoc) + * @see org.eclipse.core.resources.IWorkspaceRunnable#run(org.eclipse.core.runtime.IProgressMonitor) + */ + public void run(IProgressMonitor monitor) throws CoreException { + Iterator i = matches.iterator(); + while (i.hasNext()){ + IMatch match = (IMatch) i.next(); + collector.acceptMatch(match); + } + collector.done(); + } + +} diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java index 9da2c6e6290..5244d435c1c 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java @@ -18,6 +18,7 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.InputStreamReader; import java.io.Reader; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; @@ -97,6 +98,8 @@ import org.eclipse.core.runtime.Path; */ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants { + + ArrayList matchStorage; public static boolean VERBOSE = false; /** @@ -328,8 +331,9 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants } } - - public void locateMatches( String [] paths, IWorkspace workspace, IWorkingCopy[] workingCopies ){ + + public void locateMatches( String [] paths, IWorkspace workspace, IWorkingCopy[] workingCopies,ArrayList matches ){ + matchStorage = matches; workspaceRoot = (workspace != null) ? workspace.getRoot() : null; HashMap wcPaths = new HashMap(); @@ -495,7 +499,9 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants match = resultCollector.createMatch( currentPath, offset, end, object ); } if( match != null ){ - resultCollector.acceptMatch( match ); + //Save till later + //resultCollector.acceptMatch( match ); + matchStorage.add(match); } } catch (CoreException e) { diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/processing/JobManager.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/processing/JobManager.java index 7f738ba13e6..11f49cb90a1 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/processing/JobManager.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/processing/JobManager.java @@ -188,8 +188,9 @@ public abstract class JobManager implements Runnable { public boolean performConcurrentJob( IJob searchJob, int waitingPolicy, - IProgressMonitor progress) { - + IProgressMonitor progress, + IJob jobToIgnore) { + if (VERBOSE) JobManager.verbose("STARTING concurrent job - " + searchJob); //$NON-NLS-1$ if (!searchJob.isReadyToRun()) { @@ -250,7 +251,8 @@ public abstract class JobManager implements Runnable { } this.awaitingClients++; } - while ((awaitingWork = awaitingJobsCount()) > 0) { + while (((awaitingWork = awaitingJobsCount()) > 0) + && (!jobShouldBeIgnored(jobToIgnore))) { if (subProgress != null && subProgress.isCanceled()) throw new OperationCanceledException(); currentJob = currentJob(); @@ -295,6 +297,20 @@ public abstract class JobManager implements Runnable { return status; } + /** + * @param jobToIgnore + * @return + */ + private boolean jobShouldBeIgnored(IJob jobToIgnore) { + if (jobToIgnore == null) + return false; + + if (currentJob() == jobToIgnore) + return true; + + return false; + } + public abstract String processName(); public synchronized void request(IJob job) { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java index 02da45d92da..79f62ccf2b1 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java @@ -27,6 +27,7 @@ import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.actions.WorkspaceModifyOperation; @@ -36,7 +37,7 @@ import org.eclipse.ui.actions.WorkspaceModifyOperation; * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ -public class CSearchOperation extends WorkspaceModifyOperation implements ICSearchConstants{ +public class CSearchOperation implements IRunnableWithProgress,ICSearchConstants{ public CSearchOperation(IWorkspace workspace, String pattern, boolean caseSensitive, List searchFor, LimitTo limitTo, ICSearchScope scope, String scopeDescription, CSearchResultCollector collector) { this( workspace, limitTo, scope, scopeDescription, collector ); _stringPattern = pattern; @@ -56,8 +57,7 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear /* (non-Javadoc) * @see org.eclipse.ui.actions.WorkspaceModifyOperation#execute(org.eclipse.core.runtime.IProgressMonitor) */ - protected void execute(IProgressMonitor monitor) - throws CoreException, InvocationTargetException, InterruptedException + public void run(IProgressMonitor monitor)throws InvocationTargetException { _collector.setProgressMonitor( monitor ); @@ -79,6 +79,8 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear } engine.search( _workspace, pattern, _scope, _collector, false ); + + } /** @@ -147,5 +149,6 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear private LimitTo _limitTo; private List _searchFor; + } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java index 3b42c412ec0..60bfb127698 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java @@ -54,6 +54,7 @@ public class CSearchResultCollector extends BasicSearchResultCollector{ _matchCount = 0; _view = SearchUI.getSearchResultView(); + CSearchResultLabelProvider labelProvider = new CSearchResultLabelProvider(); labelProvider.setOrder( CSearchResultLabelProvider.SHOW_PATH ); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionProcessor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionProcessor.java index 145c2d90b43..118362f3d0a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionProcessor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionProcessor.java @@ -513,7 +513,7 @@ public class CCompletionProcessor implements IContentAssistProcessor { //Get file's dependencies try { IndexManager indexMan = CCorePlugin.getDefault().getCoreModel().getIndexManager(); - indexMan.performConcurrentJob(new DependencyQueryJob(project, (IFile)actualFile, indexMan, dependencies), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null); + indexMan.performConcurrentJob(new DependencyQueryJob(project, (IFile)actualFile, indexMan, dependencies), ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null, null); } catch (Exception e) { } }