Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
JSDT/Architecture
JSDT | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
As of WTP 3.0, JSDT is part of the Web Tools Platform.
- JSDT 1.x, shipped until Eclipse Mars.2, was used for Classic client-side JavaScript, supporting ECMAScript 3.0 (ES3, 1999).
- JSDT 2.x, shipped from Eclipse Neon on, is a total reboot of the tooling, to fill existing gaps with Modern JavaScript, supporting: ECMAScript 6 (ES6, 2015); Node.js and tools like npm, Bower, Gulp and Grunt; and Chromium debugging.
Learn more:
- The switch between JSDT 1.0 and JSDT 2.0 : JSDT Renewal Architecture.
- The current parsing and binding model : JSDT DOM and bindings.
- (Proposal) lightweight code-analysis : JSDT Code Analytics.
Contents
Architecture
History and Repository Structure
JSDT Was initially a copy of JDT to bring rich features to JavaScript editing in Eclipse, like integration in web editors, code completion, error detection, debugging, etc. The original infrastructure was divided into four areas: Core, UI, Debug and Web. The .psf fragment below allows to get an idea of the original projects.
With the advent of the new technologies in JavaScript, the initial model changed quite a lot. Actually, some of the previous repositories are not used anymore. See below the ones currently used.
We can divide the code from the two principal code repositories into four areas, represented by the image below.
JSDT Integration with Nashhorn
Nashorn is a JavaScript library used in the JSDT.core project. Starting from Java 8+, Nashorn is provided as an external library, placed in the <java-home>/lib/ext folder. The integration of external java libraries poses some problems as OSGi bundles which, by default, are using the "boot class loader"; that excludes lib/ext.
To have Nashorn working in JSDT, we're loading external libraries using a bundle fragment which is adding classpath extensions via a ClassLoaderHook, similarly to how e(fx)clipse is doing with the JavaFX ext-lib.
For more details, read: JSDT/Equinox hook for Nashorn.
HTML an JSP editors
JSDT provides JavaScript support for the WTP HTML and JSP editors in the WTP Source Editing project Git repositories. GitHub
The following plug-in projects provide JSDT integration with WTP's HTML and JSP editors:
- webtools.sourceediting.git/bundles/org.eclipse.wst.jsdt.web.core
- webtools.sourceediting.git/bundles/plugins/org.eclipse.wst.jsdt.web.ui
- webtools.sourceediting.git/bundles/plugins/org.eclipse.wst.jsdt.web.support.jsp - contains JSP-specific functionality
- webtools.sourceediting.git/bundles/plugins/org.eclipse.wst.jsdt.support.firefox - contains bindings for Mozilla FireFox, current as of FF 2.0.x (deprecated)
- webtools.sourceediting.git/bundles/plugins/org.eclipse.wst.jsdt.support.ie - contains bindings for Microsoft Internet explorer (deprecated)
JSDT tests
The following are the JUnits test plug-ins for JSDT:
- tests/org.eclipse.wst.jsdt.core.tests.compiler - (test suite is org.eclipse.wst.jsdt.core.tests.compiler.JSDTTestAll)
- tests/org.eclipse.wst.jsdt.core.tests.model - (test suite is org.eclipse.wst.jsdt.core.tests.model.AllJavaModelTests)
These test plug-ins are new to WTP 3.1 and above:
- webtools.sourceediting.tests.git/tests/org.eclipse.wst.jsdt.web.core.tests - (test suite is org.eclipse.wst.jsdt.web.core.tests.translation.AllWebCoreTests)
- webtools.sourceediting.tests.git/tests/org.eclipse.wst.jsdt.web.ui.tests - (test suite is org.eclipse.wst.jsdt.web.ui.tests.AllWebUITests)
These test plug-ins are new to WTP 3.2 and above:
- webtools.jsdt.tests.git/tests/org.eclipse.wst.jsdt.ui.tests - (test suite is org.eclipse.wst.jsdt.ui.tests.JSDTUITests)
JSDT packages
JSDT Core
The JSDT core plugin (org.eclipse.wst.jsdt.core) provides the core JavaScript modeling.
package | function |
---|---|
org.eclipse.wst.jsdt.core | public apis for the module |
org.eclipse.wst.jsdt.core.ast | The public apis for the read-only AST used by inference engines |
org.eclipse.wst.jsdt.core.compiler | the public apis for the validator |
org.eclipse.wst.jsdt.core.compiler.libraries | libraries which define the javascript language apis and the browser DOM apis |
org.eclipse.wst.jsdt.core.dom | Modifiable JavaScript model DOM |
org.eclipse.wst.jsdt.core.dom.rewrite | support for updating the dom |
org.eclipse.wst.jsdt.core.eval | support for evaluating code fragments |
org.eclipse.wst.jsdt.core.formatter | public apis for javascript formatting |
org.eclipse.wst.jsdt.core.infer | support for inferencing and inferencing extensions |
org.eclipse.wst.jsdt.core.search | public apis for search |
org.eclipse.wst.jsdt.core.util | public utility apis |
org.eclipse.wst.jsdt.internal.codeassist | support for code assist and selection |
org.eclipse.wst.jsdt.internal.codeassist.complete | support for code assist |
org.eclipse.wst.jsdt.internal.codeassist.impl | support for code assist |
org.eclipse.wst.jsdt.internal.codeassist.select | support for code selection |
org.eclipse.wst.jsdt.internal.compiler | validation code |
org.eclipse.wst.jsdt.internal.compiler.ast | internal javascript AST (Abstract Syntax Tree) |
org.eclipse.wst.jsdt.internal.compiler.batch | support for batch validation |
org.eclipse.wst.jsdt.internal.compiler.classfmt | ?? |
org.eclipse.wst.jsdt.internal.compiler.env | ?? |
org.eclipse.wst.jsdt.internal.compiler.flow | support for analyzing code flow for unused vars, etc |
org.eclipse.wst.jsdt.internal.compiler.impl | implementation of public apis |
org.eclipse.wst.jsdt.internal.compiler.lookup | support for resolving var/function references |
org.eclipse.wst.jsdt.internal.compiler.parser | the parser |
org.eclipse.wst.jsdt.internal.compiler.parser.diagnose | the diagnose parser used when there are syntax errors |
org.eclipse.wst.jsdt.internal.compiler.problem | support for problem messages |
org.eclipse.wst.jsdt.internal.compiler.util | parser/validator utilities |
org.eclipse.wst.jsdt.internal.core | implementation of public apis |
org.eclipse.wst.jsdt.internal.core.builder | implementation of eclipse builder extension |
org.eclipse.wst.jsdt.internal.core.dom.rewrite | support for updating code on DOM changes |
org.eclipse.wst.jsdt.internal.core.hierarchy | support for generating class hierarchy |
org.eclipse.wst.jsdt.internal.core.index | support for indexing the model, used by search |
org.eclipse.wst.jsdt.internal.core.interpret | javascript interpreter - under development , currently not used |
org.eclipse.wst.jsdt.internal.core.interpret.builtin | implementation of javascript language functions used by interpreter |
org.eclipse.wst.jsdt.internal.core.search | searching functions |
org.eclipse.wst.jsdt.internal.core.search.indexing | indexing of javascript |
org.eclipse.wst.jsdt.internal.core.search.matching | functions to determine if possible search match is exact match |
org.eclipse.wst.jsdt.internal.core.search.processing | search |
org.eclipse.wst.jsdt.internal.core.util | internal utilities |
org.eclipse.wst.jsdt.internal.formatter | formatter implementation |
org.eclipse.wst.jsdt.internal.formatter.align | formatter implementation |
org.eclipse.wst.jsdt.internal.formatter.comment | comment formatter implementation |
org.eclipse.wst.jsdt.internal.oaametadata | support for OpenAjax metadata |
org.eclipse.wst.jsdt.launching | misc utilities |
org.eclipse.wst.jsdt.libraries | Library support |
JSDT UI
User interface code
package | function |
---|---|
org.eclipse.wst.jsdt.internal.corext | refactoring support |
org.eclipse.wst.jsdt.internal.corext.buildpath | support for include path editing |
org.eclipse.wst.jsdt.internal.corext.callhierarchy | support for call hierarchy |
org.eclipse.wst.jsdt.internal.corext.codemanipulation | support for code refactoring |
org.eclipse.wst.jsdt.internal.corext.dom | |
org.eclipse.wst.jsdt.internal.corext.dom.fragments | support for manipulating dom fragments |
org.eclipse.wst.jsdt.internal.corext.fix | support for quick fix |
org.eclipse.wst.jsdt.internal.corext.javadoc | support for jsdoc editing |
org.eclipse.wst.jsdt.internal.corext.refactoring | support for refactoring |
org.eclipse.wst.jsdt.internal.corext.refactoring.base | support for refactoring |
org.eclipse.wst.jsdt.internal.corext.refactoring.binary | |
org.eclipse.wst.jsdt.internal.corext.refactoring.changes | refactoring change classes |
org.eclipse.wst.jsdt.internal.corext.refactoring.code | refactoring of code segments |
org.eclipse.wst.jsdt.internal.corext.refactoring.code.flow | support for refactoring of code segments |
org.eclipse.wst.jsdt.internal.corext.refactoring.delegates | support for "create delegates" action |
org.eclipse.wst.jsdt.internal.corext.refactoring.generics | currently unused |
org.eclipse.wst.jsdt.internal.corext.refactoring.nls | currently unused |
org.eclipse.wst.jsdt.internal.corext.refactoring.nls.changes | |
org.eclipse.wst.jsdt.internal.corext.refactoring.participants | |
org.eclipse.wst.jsdt.internal.corext.refactoring.rename | rename refactoring |
org.eclipse.wst.jsdt.internal.corext.refactoring.reorg | copy/move refactoring |
org.eclipse.wst.jsdt.internal.corext.refactoring.scripting | support for scripiting of refactoring |
org.eclipse.wst.jsdt.internal.corext.refactoring.sef | encapsulate field refactoring |
org.eclipse.wst.jsdt.internal.corext.refactoring.structure | |
org.eclipse.wst.jsdt.internal.corext.refactoring.structure.constraints | |
org.eclipse.wst.jsdt.internal.corext.refactoring.surround | |
org.eclipse.wst.jsdt.internal.corext.refactoring.tagging | |
org.eclipse.wst.jsdt.internal.corext.refactoring.typeconstraints | currently unused |
org.eclipse.wst.jsdt.internal.corext.refactoring.typeconstraints.types | currently unused |
org.eclipse.wst.jsdt.internal.corext.refactoring.typeconstraints.typesets | currently unused |
org.eclipse.wst.jsdt.internal.corext.refactoring.typeconstraints2 | currently unused |
org.eclipse.wst.jsdt.internal.corext.refactoring.util | refactoring utilities |
org.eclipse.wst.jsdt.internal.corext.template.java | support for templates |
org.eclipse.wst.jsdt.internal.corext.util | |
org.eclipse.wst.jsdt.internal.ui | |
org.eclipse.wst.jsdt.internal.ui.actions | implementation of actions |
org.eclipse.wst.jsdt.internal.ui.browsing | currently unused - support for browse perspective |
org.eclipse.wst.jsdt.internal.ui.callhierarchy | ui for call hierarchy |
org.eclipse.wst.jsdt.internal.ui.commands | |
org.eclipse.wst.jsdt.internal.ui.compare | compare ui |
org.eclipse.wst.jsdt.internal.ui.dialogs | various diaglogs |
org.eclipse.wst.jsdt.internal.ui.dnd | drag/drop support |
org.eclipse.wst.jsdt.internal.ui.filters | implementation of view filters |
org.eclipse.wst.jsdt.internal.ui.fix | automatic cleanup functions |
org.eclipse.wst.jsdt.internal.ui.infoviews | various views |
org.eclipse.wst.jsdt.internal.ui.javadocexport | export of js doc |
org.eclipse.wst.jsdt.internal.ui.javaeditor | javascirpt editor implementation |
org.eclipse.wst.jsdt.internal.ui.javaeditor.saveparticipant | |
org.eclipse.wst.jsdt.internal.ui.javaeditor.selectionactions | change selection actions |
org.eclipse.wst.jsdt.internal.ui.model | |
org.eclipse.wst.jsdt.internal.ui.navigator | implementation of navigator |
org.eclipse.wst.jsdt.internal.ui.packageview | implementation of script explorer |
org.eclipse.wst.jsdt.internal.ui.preferences | preferences ui |
org.eclipse.wst.jsdt.internal.ui.preferences.cleanup | ui for cleanup preferences |
org.eclipse.wst.jsdt.internal.ui.preferences.formatter | ui for formatter preferences |
org.eclipse.wst.jsdt.internal.ui.refactoring | ui for refactoring preferences |
org.eclipse.wst.jsdt.internal.ui.refactoring.actions | actions for refactoring |
org.eclipse.wst.jsdt.internal.ui.refactoring.binary | |
org.eclipse.wst.jsdt.internal.ui.refactoring.code | |
org.eclipse.wst.jsdt.internal.ui.refactoring.contentassist | |
org.eclipse.wst.jsdt.internal.ui.refactoring.nls | current unused |
org.eclipse.wst.jsdt.internal.ui.refactoring.nls.search | |
org.eclipse.wst.jsdt.internal.ui.refactoring.reorg | move/copy/delete |
org.eclipse.wst.jsdt.internal.ui.refactoring.sef | |
org.eclipse.wst.jsdt.internal.ui.search | search ui |
org.eclipse.wst.jsdt.internal.ui.text | javascript source editing utilites |
org.eclipse.wst.jsdt.internal.ui.text.comment | comment editing |
org.eclipse.wst.jsdt.internal.ui.text.correction | quick fix implementation |
org.eclipse.wst.jsdt.internal.ui.text.folding | folding implementation |
org.eclipse.wst.jsdt.internal.ui.text.html | editing of html inside jsdoc |
org.eclipse.wst.jsdt.internal.ui.text.java | content assist implementation |
org.eclipse.wst.jsdt.internal.ui.text.java.hover | hover help |
org.eclipse.wst.jsdt.internal.ui.text.javadoc | jsdoc editing |
org.eclipse.wst.jsdt.internal.ui.text.spelling | spell checking |
org.eclipse.wst.jsdt.internal.ui.text.spelling.engine | |
org.eclipse.wst.jsdt.internal.ui.text.template.contentassist | content assist templates |
org.eclipse.wst.jsdt.internal.ui.text.template.preferences | template editing |
org.eclipse.wst.jsdt.internal.ui.typehierarchy | type hierarchy ui |
org.eclipse.wst.jsdt.internal.ui.util | utilities |
org.eclipse.wst.jsdt.internal.ui.viewsupport | view utilities |
org.eclipse.wst.jsdt.internal.ui.wizards | wizards |
org.eclipse.wst.jsdt.internal.ui.wizards.buildpaths | include path editing |
org.eclipse.wst.jsdt.internal.ui.wizards.buildpaths.newsourcepage | |
org.eclipse.wst.jsdt.internal.ui.wizards.dialogfields | |
org.eclipse.wst.jsdt.internal.ui.workingsets | |
org.eclipse.wst.jsdt.libraries | |
org.eclipse.wst.jsdt.ui | |
org.eclipse.wst.jsdt.ui.actions | |
org.eclipse.wst.jsdt.ui.dialogs | |
org.eclipse.wst.jsdt.ui.project | |
org.eclipse.wst.jsdt.ui.refactoring | |
org.eclipse.wst.jsdt.ui.search | |
org.eclipse.wst.jsdt.ui.text | |
org.eclipse.wst.jsdt.ui.text.folding | |
org.eclipse.wst.jsdt.ui.text.java | |
org.eclipse.wst.jsdt.ui.text.java.hover | |
org.eclipse.wst.jsdt.ui.wizards |
Generating the parser
Follow the instructions at http://www.eclipse.org/jdt/core/howto/generate%20parser/generateParser.html for generating the parser. The parser grammer file is located in cvs at sourceediting/plugins/org.eclipse.wst.jsdt.core/grammer/js.g