Solstice is an Eclipse plug-in that creates an exact replica of the developer's workspace and keeps it in sync with the developer's copy at all times. Solstice maintains this replica on a different workspace without interfering with the user. Some developer's actions and all resource changes on the developer's workspace are captured in real time and sent to a headless Eclipse running on the replica workspace. The headless Eclipse, then applies and re-fires these actions as events. See Solstice Observers for the current API.
Making Offline Analyses Continuous with Solstice
Solstice provides extensive APIs to wrap an existing offline analysis into an Eclipse-integrated continuous analysis with the following goals:
- Ease of implementation: The analysis author should write as little wrapper code as possible. Current Solstice continuous analysis wrapper are less than 1000 lines of code.
- Isolation: The analysis shall run in isolation: While the offline analysis is running, Solstice freezes the synchronization process temporarily so that the offline analysis is guaranteed to run on the stable (copy) codebase. While the offline analysis is running, if there was a concurrent change to developer's codebase, Solstice notifies the ongoing analysis with an event. The analysis can either ignore the concurrent changes and run until it completes as usual, or can return prematurely without generating any results.
- Currency: The analysis should be re-run as soon as possible when the program is modified by the developer. Any analysis results produced while the analysis is running should be shown to the developer as soon as possible.
If you want to understand how Solstice meets each criteria, please see the related publication.
If you are adventurous and want to wrap your analysis into an Eclipse-integrated continuous one immediately: How to implement Solstice continuous analysis wrappers.
Please do NOT work on the 'default' branch. Always create your own branch for working on an issue. This lets us create 'pull requests' later on so that the code can be reviewed before being merged to the 'default' branch. To create a branch:
hg branch <branch_name>.
If you need to work on multiple issues at the same time, after creating a pull request for one issue (and waiting for the review), you can create another branch (from 'default') and start working on the next issue, assuming that it does not require the code you have just implemented for the other issue. To do that:
hg update default // update to the default branch hg branch <new_branch_name> // create a new branch (or switch to another branch if existing) for the new task hg merge default // If the branch already existed: (get new things pushed to 'default' branch)
Once you have committed and pushed your code to your issue branch, please create a pull request. I will try to review it timely and provide feedback.
Please use the Eclipse formatter and Java compiler settings provided in the repository as
Keep track of the changes and re-import this file each time it changes or re-import this time each time you pull new commits (to be safe).
Each time before pushing code, please do the following:
- Apply source code formatting to the files you have changed. Instructions.
- Run Solstice unit tests. Instructions.
- Run Solstice system tests. Instructions.
Please never push code that introduces a compilation error, fails a unit or system test. Thank you!