Bidirectional model transformations create or update a target model according to a base model and vice versa using a single transformation specification for both directions. Triple graph grammars, for example, define which model elements shall exist and how they should reference each other without repeating information for both directions. They can also copy values of simple-typed attributes, such as enumerations, strings, or numbers. But currently only the identity operator can be easily specified in bidirectional transformation languages: Other attribute mappings either have to be specified for both directions or with a special constraint language. In this paper, we present an approach that inverts attribute transformation expressions that can be written in a simple Java-like syntax. We also present an initial library of 30 operator-specific inverters that result in well-behaved view-update round-trips (GetPut) for all changes. For changes for which well-behaved update-view round-trips (PutGet) are impossible, we chose inversions that sustain as much information as possible. We realized our inversion approach for a prototypical t ... mehrransformation
language that generates Java code. An evaluation using all 103 transformations of the ATL zoo shows that 26%
of the LLOC of all non-trivial attribute transformation expressions could be inverted with our initial inverters. This may indicate that many transformation tasks could involve non-trivial attribute transformations that can easily be specified and inverted with our approach.