Tempura is a prototype Eclipse plugin supporting Java projects with Git VCS, that embodies our approach of extending IDEs with a temporal dimension, allowing Eclipse to simultaneously operate on previous versions of the code base as well as the current version. Tempura collects and indexes all code history information from a project's VCS to support two main features, (1) temporal code completion, and (2) temporal code navigation. Source code for Tempura will be made available soon.
Tutorial video       Plugin distribution
Tempura works in two steps. First, Tempura indexes code history information from a project's Git repository. Tempura
then uses the indexed information to retrieve historical types and completion proposals. When indexing, Tempura
traverses every commit in a project's repository in the chronological order, and parses every Java file
in each commit collecting API-level information including type declarations defined in each file and their methods
and fields. The API-level information is converted into simple plain old Java objects (POJO) which store identifying
information of each element, for example, fully qualified names for types and signatures for methods, along with the
ID of the current commit that Tempura is traversing.
The collected information is stored in a nested map, first indexed by the type of POJO, either types or members. The
types are indexed by their deletion status, that is, the deleted types are stored separately from the types that still
exist in the code base. The members are indexed by the fully qualified name of the declaring type. When a developer
invokes code completion, Tempura uses the fully qualified name of the target type as the index, and retrieves all the
methods and fields that were defined in the previous versions of the type but no longer found in the current version.
When a developer invokes Open Type in History, Tempura searches for types in both the existing and deleted type stores.
We evaluated Tempura's eciency in collecting API-level information from Git repositories of three large-scale projects. The experiment was performed on a dual-core 2.66 GHz MacBook Pro, with Eclipse 3.8 and Java 1.6. The values for the Time (s) column were calculated by averaging three separate indexing processes for each project. # of Files Parsed column shows the number of files that Tempura parsed, including files that were modified and thus parsed again. The LANSimulation is the project we used in our user study.
Project | # of Commits | Time (s) | # of Files Parsed | Parsed Data Size |
org.eclipse.ui | 24424 | 342.045 | 100199 | 1228212608 |
org.eclipse.jdt.core | 19366 | 689.812 | 75981 | 3957829120 |
org.eclipse.jdt.ui | 26374 | 372.489 | 117320 | 1454870656 |
LANSimulation | 21 | 1.462 | 54 | 416672 |
One of the participants was a professional software engineer, and the rest of the participants were graduate students in the computer science department at the University of Illinois at Urbana-Champaign, majoring in various sub-disciplines. Participants had at least three years of Java experience, with seven participants having more than eight years of experience. Five participants indicated that they use Eclipse IDE for their programming tasks, one uses IntelliJ, and the rest do not use IDEs regularly. All participants had at least two years of experiences using VCSs (Git, SVN, or Mercurial). The control and treatment groups had similar average years of programming experience (7.2 years and 7.4 years, respectively), but the control group had overall more experience with VCS (5.8 years) than the treatment group (3.8 years). Also, three out of five participants in the treatment groupstated that they do not use IDEs regularly, whereas the control group had one non-IDE user. Participation was strictly voluntary with no rewards offered, and invitations to the study were sent through individual emails and departmental mailing lists.