Program restructuring as an aid to software maintenance
Program restructuring as an aid to software maintenance
Refactoring object-oriented frameworks
Refactoring object-oriented frameworks
Static slicing of threaded programs
Proceedings of the 1998 ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
The Jalapeño dynamic optimizing compiler for Java
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Time, clocks, and the ordering of events in a distributed system
Communications of the ACM
Slicing Concurrent Programs - A Graph-Theoretical Approach
AADEBUG '93 Proceedings of the First International Workshop on Automated and Algorithmic Debugging
Multithreaded Dependence Graphs for Concurrent Java Program
PDSE '99 Proceedings of the International Symposium on Software Engineering for Parallel and Distributed Systems
Refactoring for generalization using type constraints
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley))
Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley))
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Refactoring support for class library migration
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
The DaCapo benchmarks: java benchmarking development and analysis
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Conditional must not aliasing for static race detection
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Refactoring for Parameterizing Java Classes
ICSE '07 Proceedings of the 29th international conference on Software Engineering
The jastadd extensible java compiler
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
The JastAdd system — modular extensible compiler construction
Science of Computer Programming
Systematically refactoring inheritance to delegation in java
Proceedings of the 30th international conference on Software engineering
On Validity of Program Transformations in the Java Memory Model
ECOOP '08 Proceedings of the 22nd European conference on Object-Oriented Programming
Sound and extensible renaming for java
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
Towards concurrency refactoring for x10
Proceedings of the 14th ACM SIGPLAN symposium on Principles and practice of parallel programming
Refactoring sequential Java code for concurrency via concurrent libraries
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
Proceedings of the the 7th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering
Stepping Stones over the Refactoring Rubicon
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
From Public to Private to Absent: Refactoring Java Programs under Constrained Accessibility
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Declarative Intraprocedural Flow Analysis of Java Source Code
Electronic Notes in Theoretical Computer Science (ENTCS)
Relooper: refactoring for loop parallelism in Java
Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications
The java memory model: operationally, denotationally, axiomatically
ESOP'07 Proceedings of the 16th European conference on Programming
MemSAT: checking axiomatic specifications of memory models
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Efficiently refactoring java applications to use generic libraries
ECOOP'05 Proceedings of the 19th European conference on Object-Oriented Programming
A memory model sensitive checker for c#
FM'06 Proceedings of the 14th international conference on Formal Methods
Refactoring using type constraints
SAS'07 Proceedings of the 14th international conference on Static Analysis
Refactoring Java programs using concurrent libraries
Proceedings of the Workshop on Parallel and Distributed Systems: Testing, Analysis, and Debugging
A refactoring constraint language and its application to eiffel
Proceedings of the 25th European conference on Object-oriented programming
Differential precondition checking: A lightweight, reusable analysis for refactoring tools
ASE '11 Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering
Identification and application of Extract Class refactorings in object-oriented systems
Journal of Systems and Software
RefaFlex: safer refactorings for reflective Java programs
Proceedings of the 2012 International Symposium on Software Testing and Analysis
Constraint-Based refactoring with foresight
ECOOP'12 Proceedings of the 26th European conference on Object-Oriented Programming
Practical use of static composition of refactoring operations
Proceedings of the 28th Annual ACM Symposium on Applied Computing
Hi-index | 0.01 |
Automated refactorings as implemented in modern IDEs for Java usually make no special provisions for concurrent code. Thus, refactored programsmay exhibit unexpected new concurrent behaviors.We analyze the types of such behavioral changes caused by current refactoring engines and develop techniques tomake thembehavior-preserving, ranging from simple techniques to deal with concurrency-related language constructs to a framework that computes and tracks synchronization dependencies. By basing our development directly on the JavaMemoryModel, we can state and prove precise correctness results about refactoring concurrent programs. We show that a broad range of refactorings are not influenced by concurrency at all, whereas other important refactorings can be made behavior-preserving for correctly synchronized programs by using our framework. Experience with a prototype implementation shows that our techniques are easy to implement and require only minimal changes to existing refactoring engines.