-
Notifications
You must be signed in to change notification settings - Fork 132
Programmer Guide
The purpose of this document is give insight into JDT Core internals.
If you're looking for information on JDT APIs you should start by visiting the JDT Core section in Eclipse Help. You can also check How to Train the JDT Dragon presentation by Ayushman Jain and Stephan Herrmann. Instructions for the tutorial can be found here.
Many issues of working with JDT/Core source code are covered in the JDT Core Committer FAQ, specifically:
If the answer to your question is neither there nor here, ask the question.
Java model is a lightweight model for views.
Indexes of declarations, references and type hierarchy relationships.
- Indexing phase
- Get the file names from indexes
- Validate the scope
- Parse the file and find out matching nodes
- Resolve types (see CompilationUnitDeclaration#resolve()) and narrow down matches reported from index
- Create the appropriate model element and call the requestor
Information about the index:
- Stored in files in workspace/.metadata/org.eclipse.jdt.core
- Separate index file for each class path entry (shared across projects)
- Dedicated daemon thread
- Names of declaration and references of JavaElements used in the file are stored in the index
- First stored in Memory and then goes into the Disk
- In Memory “fileName->category->names”
- In Disk “Category->names->fileName”
- For jars, .class files are read (even if source is available)
- References are read from the constant pool
See also JDT Core Programmer Guide/MetaIndex
If there is a search result for the given pattern, but a problem (e.g. errors in code, incomplete class path) occurred, the match is considered as inaccurate.
Inaccurate matches used to be called potential matches and as such can still be seen in the tests and tracing messages.
Create a search pattern:
SearchPattern pattern = SearchPattern.createPattern(
"foo(*) int",
IJavaSearchConstants.METHOD,
IJavaSearchConstants.DECLARATIONS,
SearchPattern.R_PATTERN_MATCH
);
Create a search scope:
IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
Collect results using SearchRequestor subclass:
SearchRequestor requestor = new SearchRequestor() {
public void acceptSearchMatch(SearchMatch match) {
System.out.println(match.getElement());
}
};
Start search:
new SearchEngine().search(
pattern,
new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() },
scope,
requestor,
null /*progress monitor*/
);
Precise, fully resolved compiler parse tree.
See -> JDT Core Programmer Guide/ECJ.
To run unit tests follow the instructions under JDT Core Committer FAQ#Unit Testing.
New Java Search tests should be added to JavaSearchBugsTests2.
To run performance tests you need to have the following projects in your workspace:
org.eclipse.jdt.core.tests.performance
org.eclipse.jdt.core.tests.binaries
org.eclipse.test.performance
-
org.eclipse.test.performance.win32
(if you're on Windows)
Useful VM arguments:
-
-Dmeasures=1
to reduce number of measurements to 1, default is 10 -
-Dprint=true
to print more test details on the console -
-Ddebug=true
to print debug info on the console
MetaIndex
Completion
ECJ
ECJ/Investigating
ECJ/Parse
ECJ/Testing
ECJ/Bindings
ECJ/Generate
ECJ/AST
ECJ/Analyse
ECJ/Lookups
ECJ/Lambda