Publication View

ABSTRACT JunGL: a Scripting Language for Refactoring (2008)

Abstract
Refactorings are behaviour-preserving program transformations, typically for improving the structure of existing code. A few of these transformations have been mechanised in interactive development environments. Many more refactorings have been proposed, and it would be desirable for programmers to script their own refactorings. Implementing such source-to-source transformations, however, is quite complex: even the most sophisticated development environments contain significant bugs in their refactoring tools. We present a domain-specific language for refactoring, named JunGL. It manipulates a graph representation of the program: all information about the program, including ASTs for its compilation units, variable binding, control flow and so on is represented in a uniform graph format. The language is a hybrid of a functional language (in the style of ML) and a logic query language (akin to Datalog). JunGL furthermore has a notion of demand-driven evaluation for constructing computed information in the graph, such as control flow edges. Borrowing from earlier work on the specification of compiler optimisations, JunGL uses socalled ‘path queries ’ to express dataflow properties. We motivate the design of JunGL via a number of nontrivial refactorings, and describe its implementation on the.NET platform.

Publication details
Download http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.94.859
Source http://fsl.cs.uiuc.edu/images/7/76/Icse2006JunGL.pdf
Contributors CiteSeerX
Repository CiteSeerX - Scientific Literature Digital Library and Search Engine (United States)
Keywords Categories and Subject Descriptors D.2.3 [Software Engineering, Coding Tools and Techniques, D.3.4 [Programming Languages, Processors, D.2.6 [Software Engineering, Programming Environments General Terms Languages, Design Keywords Refactoring
Type text
Language English
Relation 10.1.1.17.688, 10.1.1.33.3465, 10.1.1.105.5555, 10.1.1.53.6935, 10.1.1.19.1134, 10.1.1.135.3704, 10.1.1.138.2709, 10.1.1.59.9056, 10.1.1.2.3751, 10.1.1.129.3413, 10.1.1.58.622, 10.1.1.21.4111, 10.1.1.59.322, 10.1.1.12.1835