Skip to content
Luis Diogo Couto edited this page Jan 28, 2015 · 7 revisions

We are currently importing content from the old Overture wiki to this page. Please excuse the mess.

The IDE components form the Eclipse based Overture IDE. All of the components are prefixed by org.overture.ide.

Builders.Vdmj

The Builders.Vdmj component contains the builders for the three different types of VDM project (SL,PP and RT). a builder is a process that runs after a change occurs in a project resource. In Overture, a builder parses and type-checks a project after a change has been made. A builder is tied with a nature of a project via the extension point "org.overture.ide.core.buildParticipant".

Example of the builder definition for VDM-PP (plugin.xml)
  <extension
         point="org.overture.ide.core.buildParticipant">
      <builder
            class="org.overture.ide.builders.vdmj.BuilderPp"
            nature="org.overture.ide.vdmpp.core.nature">
      </builder>
  </extension>

The builder class must extend the AbstractVdmBuilder class present in the ide.core. For convenience, the builder class can extend the VdmjBuilder class; then it is only required to implement the buildModel and typeCheck methods.

Interesting sources in the builder component include:

  • org.overture.ide.builders.vdmj.BuilderSl - the VDM-SL builder
  • org.overture.ide.builders.vdmj.BuilderPp - the VDM-PP builder
  • org.overture.ide.builders.vdmj.BuilderSl - the VDM-RT builder
  • overture.ide.builders.vdmj.VdmjBuilder- the superclass of all the above builders
  • ide/builders/vdmj/plugin.xml - Connects a builder with a nature

For more about builders in Eclipse, see http://www.eclipse.org/articles/Article-Builders/builders.html

IDE-Core

The Core of the IDE (do not confuse with Overture core modules) - contains IDE core classes such as VdmProject, VdmBuilder, VdmModel, VdmModelManager and ResourceManager. These are cornerstone definitions that are used throughout almost all the other IDE projects. Pervasive classes such as VdmProject, a more specialized version of Eclipse Project, is present here. There is also an abstract Parser and Builder class; these classes can be used to both parse and type-check projects. The rest of the IDE-Core deals with Resource and models in memory management.

Packages worth looking into are:

  • java.org.overture.ide.core.ast- contains the class VdmModel, which represents a model in memory, after being parsed and possibly type-checked.
  • org.overture.ide.core.builder - contains the generic VdmBuilder that uses the Builder extension points to find the specific dialect builders and calls the appropriate builder for the project nature. The finding of the specific builders is done at run-time.
  • org.overture.ide.core.parser like the builder package, this package contains a generic VDM parser which can be used to parse VDM files. The generic parser discovers at run-time the available dialect specific parsers and calls the appropriate one, depending on the project's nature
  • org.overture.ide.core.resources - defines the IVdmProject interface. This interface has methods that are interesting to perform on a VDM project, e.g. getDialect, typeCheck, etc. The VdmProjectAdapterFactory makes it possible to adapt a generic Eclipse IProject to a IVdmProject and vice-versa. The VdmSourceUnit class represents the source of a VDM model.
  • org.overture.ide.internal.core - contains the ResourceManager and DeltaProcessor classes that are responsible for keeping the VdmSourceUnit objects in sync with the actual resources in the file system.

IDE-Debug

The Debug component contains the IDE parts related with launching a debug session (Launch Configurations) and defining the Debug Perspective and Views. Also contains the client side of the Debug protocol (http://xdebug.org/docs-dbgp.php) used to communicate with the interpreter. Typically, org.overture.ide.debug.core packages are related with the internal workings of the debug component and org.overture.ide.debug.ui packages are related with UI parts of the IDE.

Interesting packages include:

  • org.overture.ide.debug.core - definition of many debug constants and interfaces.
  • org.overture.ide.debug.core.dbgp - this package and all its subpackages are related with the implementation of the DBGP protocol.
  • org.overture.ide.debug.core.launching - this package is related with launching the debug configuration. Main actor here is the VdmLaunchConfigurationDelegate class that configures the VDM interpreter according to the Launch Configuration. The classes with prefix VdmSource* are used to find the model source files in the Debug View for example when a breakpoint is hit.
  • org.overture.ide.debug.core.model.internal - this package contains almost all the classes that provide content to fill the Debug View. Interesting classes include: VdmBreakpointManager, VdmDebugTarget, VdmThreadManager, VdmValue and VdmVariable.
  • org.overture.ide.debug.logging - contains classes related with the extra debug logging information that can be enabled in the Develop Tab.
  • org.overture.ide.debug.preferences - preferences of the DBGP client - timeout and port
  • org.overture.ide.debug.ui - contains the DebugConsoleManager, which manages the consoles used while debugging. Also contains the localization strings used for debugging.
  • org.overture.ide.debug.ui.actions - contains the Toggle Breakpoint action available on the ruler of the editor
  • org.overture.ide.debug.ui.launching - contains Launch Configuration tabs used in Overture. Some tabs are abstract and are overwritten in the specific dialects debug packages.
  • org.overture.ide.debug.ui.model - contains classes related with breakpoints. The VdmLineBreakpointAdapter class decides if it is possible to add a breakpoint to a certain line, i.e. if the line is executable or not.
  • org.overture.ide.debug.ui.propertypages - creates the Vdm Breakpoint property page (used to add conditional breakpoints)

IDE-UI

The UI component defines a great deal of the UI parts of Overture e.g. VDM Perspective, VDM Navigator, VDM Editor, etc.. Because it is Eclipse-based, most UI elements are defined partly in Java code packages and partly in the plugin.xml of the component.

Editor

The editor.core package contains the VdmEditor and associated classes. One of the most relevant classes is VdmSourceViewerConfiguration where all editor configuration is done. VdmReconcilingStrategy is also important; this class has methods that run after a user makes a change in the editor - typically in Overture that means calling the parser. VdmAnnotationHover is where we define what to show when a user hovers the mouse over a document annotation (Warnings/Errors).

Wizards

Wizards and wizard pages classes are in org.overture.ide.ui.wizard and org.overture.ide.ui.wizard.pages respectively. Specific dialect wizards to create projects and files are defined in under the specific dialect UI packages. `

Other UI Packages

  • org.overture.ide.ui.perspective - has the code for initializing the perspective in the VdmPerspectiveFactory class.
  • org.overture.ide.ui.editor.partitioning - defines the document partitions
  • org.overture.ide.ui.handlers - has handlers for various commands in Overture
  • org.overture.ide.ui.editor.syntax - contains classes related with recognizing the VDM Syntax. There are some abstract classes which are extended in the specific dialect UI packages with e.g. specific keywords for each dialect.
  • org.overture.ide.ui.navigator - contains code related with the VDM explorer.
  • org.overture.ide.ui.outline - contains the outline provider and filters. Relevant classes are VdmContentOutlinePage, VdmOutlineTreeContentProvider and MemberFilterActionGroup
  • org.overture.ide.ui.internal.viewsupport - provides images and labels for the outlines. The VdmElementImageDescriptor can be used to obtain the icon images with overlays.
  • org.overture.ide.ui.preferences contains preferences related to Overture.
  • org.overture.ide.ui.property implements the project specific properties.

Other Components

  • Help - contains the Overture Help Pages
  • Parsers.Vdmj - contains the parsers for specific dialects of VDM;
  • Platform - countains the branding parts (Overture splash screen, icons, about box, etc.) and features to be included in Overture
  • VdmSL.Core - contains VDM-SL project Nature
  • VdmSL.Debug - contains dialect specific classes related with launching and Debug Configurations
  • VdmSL.UI - contains dialect specific editor features like: keywords, templates and content assist. Also includes the dialect specific wizards.
  • VdmPP.Core - contains VDM-PP project Nature and constants
  • VdmPP.Debug - contains dialect specific classes related with launching and Debug Configurations
  • VdmPP.UI - contains dialect specific editor features like: keywords, templates and content assist. Also includes the dialect specific wizards.
  • VdmRT.Core - contains VDM-RT project Nature
  • VdmRT.Debug - contains dialect specific classes related with launching and Debug Configurations
  • VdmRt.UI - contains dialect specific editor features like: keywords, templates and content assist. Also includes the dialect specific wizards.

TODO:

  • talk about the eclipse influences (plug-ins and features)
  • talk about the core module wrapping+exposure technique (OSGi manages deps)
  • Present overall IDE architecture
  • Present each IDE Module (what does it wrap/export? what are its UI contributions?)
  • mention the adapter stuff
  • mention the model utilities
  • mention the UI utilities