I forgot (again) that the Eclipse patching mechanism does not pay
attention to gifs. So, here are the build icons redone with the proper
transparency settings. Now they no longer show up as an annoying white
blob on the grey Motif background/ or Gtk selection box.
This patch contains some minor UI changes and a big chunk of work to add
built-in symbols and includes search paths to a tool specification.
The UI change is a switch from dynamically resizing the property page when
an option category is selected from the list, but rather using a scrolled
edit area. Now, if the option set is larger than the viewable area, a
horizontal and/or vertical scrollbar is displayed.
In terms of built-ins, there is no UI support to change the values just
yet. That is coming, but I wanted to get the framework and some
definitions in place so that the indexer and scanner can start using them.
In order to work through CExtensionPoint mechanism, I have to change the
existing extension point entries for the Managed and Standard builders to
the following (all future builders will have to conform to this as well):
<extension
id="ManagedBuildManager"
point="org.eclipse.cdt.core.ScannerInfoProvider">
<cextension>
<run
class="org.eclipse.cdt.core.build.managed.ManagedBuildManager">
</run>
</cextension>
</extension>
<extension
id="StandardBuildManager"
point="org.eclipse.cdt.core.ScannerInfoProvider">
<cextension>
<run
class="org.eclipse.cdt.core.build.standard.StandardBuildManager">
</run>
</cextension>
</extension>
As well, the ManagedBuildManager and StandardBuildManager must extend
AbstractCExtension.
The new project wizards for managed and standard projects have to be
modified to register the right class as the scanner info providers for the
project. The example below shows the managed project wizard code, but the
standard project wizard is similar.
try {
ICDescriptor desc =
CCorePlugin.getDefault().getCProjectDescription(project);
desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID,
ManagedBuildManager.INTERFACE_IDENTITY);
} <snip>
Clients use a new method defined in CCorePlugin
public IScannerInfoProvider getScannerInfoProvider(IProject project) {
IScannerInfoProvider provider = null;
if (project != null) {
try {
ICDescriptor desc = (ICDescriptor)
getCProjectDescription(project);
ICExtensionReference[] extensions =
desc.get(BUILD_SCANNER_INFO_UNIQ_ID);
if (extensions.length > 0)
provider = (IScannerInfoProvider)
extensions[0].createExtension();
} catch (CoreException e) {
}
}
return provider;
}
to get the information provider as shown in the updated JUnit test code
below:
// Find the first IScannerInfoProvider that supplies build info for the
project
IScannerInfoProvider provider =
CCorePlugin.getDefault().getScannerInfoProvider(project);
assertNotNull(provider);
As is the case now, clients implement the IScannerInfoChangeListener
interface and pass themselves to the provider in a subscription message.
There is also a new method on the IScannerInfoProvider interface that
allows the client to get information immediately as shown below:
IScannerInfo currentSettings = provider.getScannerInformation(project);
The ManagedBuildManager::getScannerInfo(IResource) method will be
deprecated, then removed before the end of this release cycle.
Hi,
This patch updates code completion to use search. It also includes my previous patch which enabled the class wizard to use search as well.
Current Code Completion has the following restrictions:
- It will only work within the scope of a function or a method.
-It will look for globals (variables, functions, classes, strucs, unions, enumerations, and macros).
-In the scope of a method, it will also look for the methods and fields that belong to the owner class of this method.
- It will NOT search the parent classes of the method in the method scope case.
- It will NOT de-reference after a "." or an "->"
This patch contains a fix for bug 41274 in the core; library entries in
the build property pages were not being saved by the build model manager.
It also contains a bunch of fixes for minor problems in the UI. I added a
new target for building DLLs on Cygwin. The zip file adds a new icon for
configurations in the tree view of the build property page for managed
builds. Now the tool uses the tool icon and the category uses the new
category icon.
The list editor will better fit a page with space-grabbing widgets in
different columns. For example, the default list field editor puts the
list in the left column and allows it to grab all excess space. Entry
fields put the label in the left and the space-grabbing entry field/combo
box in the right. The layout manager then gives both left and right
columns equal space in that case. By wrapping the list field editor in a
group control that spans both columns, the layout manager allocates enough
space for controls in the right-hand column. It also lays out the contents
of the list field editor inside the group control independently of the
outer container, so it looks right too. Also added a double-click event
handler so users can edit list elements. All in all, this makes the list
widget work better.
I re-activated the summary field editor class (it's alive!). It still does
not behave quite right in terms of showing the command line summary, but
that functionality will be added shortly.
Finally, the build property page is being resized for large pages. It is
still possible to specify categories with too many options to display,
even with the new resize. This will have to be a documented limitation, or
we will have to add a vertical scroll bar for pages that are too large.
core :
- add function parameter information to search results
ui:
- modified Search result sorting to sort by offset if the label is the
same for two items
Put in Indexer shut down which cleans up the .metadata directory of any suspicious looking index files
Put in CSearchScope changes (in both UI and core) to enable working set searches
This patch contains modifications to BasicSearchMatch and
BasicSearchResultCollector so that the collector will not accept matches
that have already been seen.
( Addresses the problem of seeing a class definition in a header file
multiple times because that header was included from multiple cpp files)
This patch also fixes a small bug in finding the resource for header files
we enter while parsing.
I am in the process of documenting the build model and as I go along, a
number of things will have to be cleaned up in the actual model itself.
This patch is purely a bookeeping change to make it easier for me to
maintain the build model in the face of these changes as we go forward.
Where I used to access XML elements using hard-coded strings, I have moved
the string into the appropriate interface class. If the name of the
attribute changes in the future, I only have to update it one place.
I have also begun the process of renaming certain attributes of the schema
to make them better reflect what they are doing. My hope is that if they
have intuitive names, toolchain implementers will have less difficulty
understanding their intent. In any case, I have changed four attribute
names; optionRef -> optionReference, toolRef -> toolReference, optionValue
-> listOptionValue, and optionEnum -> enumeratedOptionValue.
Unfortunately, these changes will invalidate the dot-cdtbuild files for
any managed build projects in your workspace. If you can't bear to create
a new project, move the files over, and set-up the compiler options again,
you can always hand-edit the changes in the file yourself. Just remember
to restart CDT after you do so.
- The core patch modifies the CModelBuilder to recognize pointers to functions.
- The tests patch changes the CModelElementsTests and puts the pointer to function test back in its original place (as a variable).
- The ui patch modifies the NewClassWizard to use search in finding a base class ( the new indexer must be on for it to work ).
This patch is a refactoring of the C++ search result collecting.
There are 2 new classes:
- BasicSearchMatch implements IMatch
- BasicSearchResultCollector implements ICSearchResultCollector
IMatch itself has been modified to reflect a minimum set of information
that will be returned by the search.
The old CSearchResultCollector now extends BasicSearchResultCollector and
the old Match is now gone.
The CSearchResultLabelProvider has been moved from
org.eclipse.cdt.internal.ui.search to org.eclipse.cdt.ui, and it has
been modified to reflect changes to IMatch.
The result of this is that anyone wishing to take advantage of the search
engine (ie ClassWizard ) can now do it without implementing their own
ICSearchResultCollector and IMatch objects.
In order to meet certain internal guidelines and to test the makefile
generator, the build model replied to some answers with hard-coded
information. This patch moves the information into the build model. Tests
have been updated to reflect these changes, and the patch has been
smoke-tested on Unix.
- I added the ability to build when there are inter-project dependencies
(first iteration; I would like to try another way). There is also some
changes to how libraries are handled. Change logs describe the changes and
the AllBuildTests has been updated to reflect these changes.
Core:
- modifications to the Indexer to better support qualified names
- functions to create Index entry prefixes for the different Search
Patterns
- all of the search patterns are now being created and all do at least
some matching
- all of the parser callbacks for declarations, definitions, and
references are now being handled, though the patterns and indexer both
need some work here
Core.tests:
- new BaseSearchTest which creates a project and uses the indexer
- new test class FunctionMethodPatternTests to test aspects of the
Function & Method patterns
- new test class OtherPatternTests to test the other (Namespace, Field &
variable) patterns
- new tests to test index prefixes for the patterns
UI:
- handle more varied search results and display more icons
- Here's a first take at the dependency tree service
which is needed by both the managed build and the
indexer. The service is in a really early form with no
persistance or notification mechanisms in place yet.
There is just enough in here to allow Sean to get his
makefile dependencies. I added a check box to the
indexer tab to enable the service on a per project basis.
highlighting are updated.
- Added support for hex floating point literals.
- Fixed stack overflow problem with string literals concatenation.
- Fixed problem with token pasting in macros.
- This solves PR 39523, 39550, 39552.
- adds namespaces, enums, typedefs, functions,
methods, fields and vars to the index.
- also fixes a problem with the Search label provider
which caused it to not display properly under some
conditions.
Added ISourceElementCallbackDelegate interface for AST constructs to allow the Parser to delegate callback's to the nodes themselves.
Got rid of ParserMode.STRUCTURAL_PARSE for the time being.
Removed org.eclipse.cdt.internal.core.parser.ast.full.
Created org.eclipse.cdt.internal.core.parser.ast.complete.
Updated ParserFactory.createScanner() to force the user to provide a callback and a ParserMode.
Introduced ASTSemanticException for COMPLETE_PARSE mode.
Fleshed out preliminary IASTReference interfaces and added callbacks to ISourceElementRequestor.
Removed acceptElaboratedTypeSpecifier() from ISourceElementRequestor.
TESTS
Updated ParserSymbolTableTests to remove dependencies on parser.ast.full classes.
Updated Parser test suites for updates to ParserFactory.
Removed IParserCallback.
Partially converted DOM to ISourceElementRequestor (requires refactoring of CModelBuilder & StuctureComparator modules in near future).
Completely finished ISourceElementRequestor/IASTFactory work for QuickParse mode.
Added pointer to methods/functions into AST callback structure.
Restructured AST class hierarchy.
Removed the old IParserCallback return Objects from every Parser method.
TESTS
Rewrote the entire DOMTests suite to now be AST tests.
Removed DOMTests, BaseDOMTest, DOMFailedTests after methods were migrated to QuickParseASTTests & ASTFailedTests.
Made sure every parser failed test had a defect number associated with it.
Patch for C++ Search to support searching for class declarations
Interface changes:
- modified search Interfaces :
- ICSearchConstants - changed SearchFor instantiations to more
closely match what we can search for.
- ICSearchPattern - added getLimitTo()
- ICSearchResultCollector - added createMatch(), which should
return an object implementing the new IMatch interface, these store the
any data needed to keep found matches.
These interfaces are still new and its too early for anyone other than
search and the indexer to be using them.
- added search interface IMatch.
Changes to core.search had to do with keeping track of the current scope
during the search, as well as other modifications for matching class
declarations, and the start of the patterns for matching other things.
Changes to ui.search had to do with creating IMatch objects to store the
information needed by the label provider to display icons and sort the
results.
cdtproject file.
- Used to store the data that had been put in the
cdtbuild file for Standard Make projects.
- Cleaned up some of the exception handling in the
StandardBuildManager.
Filled out IASTMethod & IASTFunction & added implementations.
Updated IScanner, clients & implementations to use IScannerInfo.
Finished SimpleDeclaration porting to new architecture, only thing left is templates.
TESTS
Updated IScanner, clients & implementations to use IScannerInfo.
The change logs contain an overview of what has been done to implement a new interface between a build model (any build model)
and clients of the model that need to extract include search paths and defined symbols. For the most part, I have tried to leave the
old build system as unchanged as possible. For example, project properties like the make search path, and whether or not to continue
on build failures are still stored as persistent properties on the project through the CNature (ugh). The new information I have added
is managed by a new build manager on a per-project basis and is associated with a project as a session property. The information is
persisted in the 'cdtbuild' file introduced by the new managed build system.
cdt.core:
- Modified ICSearchConstants to use classes (SearchFor & LimitTo) instead of int for constants
- Modified MatchLocator to actually invoke the parser to do the search
cdt.core.tests:
- Added new source Folder search
- Added search/ClassDeclarationPatternTests::testMatchSimpleDeclaration
- Added search/ClassDeclarationPatternTests::testMatchNamespaceNestedDeclaration
- Added new resource folder search & containing file classDecl.cpp
- Added new failures package ord.eclipse.cdt.core.search.failedTests
- Added new failing test PatternsFailedTests::testBug39652
* Note that both the ClassDeclarationPatternTests and PatternsFailedTests must be run as Plugin Tests *
cdt.ui:
- Updated Search classes to reflect changes to ICSearchConstants.
- The initial framework for the new indexer.
- Added a checkbox to the Indexer tab on the
C/C++ Projects settings dialog to turn on the
indexing on a per project basis.