-
Notifications
You must be signed in to change notification settings - Fork 4
Code documentation
-
Plugin specific files
-
the plugin needs to store different kinds of files: configuration files, survey results, recorded events, program snapshots, etc
-
because of the nature of how IJ and Eclipse run, there are multiple paths where the plugin stores its files. When you open a project in IJ or a workspace in Eclipse, both IJ and Eclipse spawn a new instance of the IDE over that project / workspace. This means that both IDEs have two kinds of locations: the installation location of the IDE (where the IDE stores information relevant to all IDE instances, like common settings for all plugins) and the instance location (where the IDE stores information relevant only to a specific instance). This means that in both Eclipse and IJ plugins have two storage spaces. Thus, our plugin also has two storage paths: the local storage (specific to each project / workspace) and the bundle storage (common to all IDE instances)
- the local storage:
- the bundle storage:
-
File syncing between the local storage and the bundle storage
-
Uninstall
-
plugin must stop recording after a certain amount of time
-
Snapshots
-
Event recording
-
overall picture
-
recorded events
-
decoupling event format, storage format, and server storage
-
Plugin update
-
Choose which projects to record
-
Entry methods (main methods)
-
These are methods where the control flow of the plugin starts. It's good to read them to get a sense of how all the supported use cases are instantiated. Reading both Eclipse and IJ entry methods gives you a good sense of the common concepts
-
IntelliJ: recording is performed on a per project basis (an opened instance of IJ has only one project)
- entry point: COPEComponent.projectOpened()
-
Eclipse: recording is performed on a per workspace basis (an opened instance of Eclipse has multiple projects)
- entry point: COPEPlugin.start() which then calls StartPluginUIJob.runInUIThread()
-
IDE agnostic interfaces
-
These interface (and abstract classes) reside in the common infrastructure repository and define common functionalities for both IDEs. Both IDEs implement these interfaces.
-
StorageManager: provides the IDE specific paths to the local storage, the bundle storage, and to the versioned variants of these paths (see section on plugin stored files).
-
Installer
- InstallerHelper
- InstallerOperation
- SurveyOperation
-
RecorderFacade