}
/* Get class mutations. */
String oldName = oldFormat.getClassName();
int oldVersion = oldFormat.getVersion();
Renamer renamer = mutations.getRenamer(oldName, oldVersion, null);
Deleter deleter = mutations.getDeleter(oldName, oldVersion, null);
Converter converter =
mutations.getConverter(oldName, oldVersion, null);
if (deleter != null && (converter != null || renamer != null)) {
addInvalidMutation
(oldFormat, null, deleter,
"Class Deleter not allowed along with a Renamer or " +
"Converter for the same class");
return false;
}
/*
* For determining the new name, arrays get special treatment. The
* component format is evolved in the process, and we disallow muations
* for arrays.
*/
String newName;
if (oldFormat.isArray()) {
if (deleter != null || converter != null || renamer != null) {
Mutation mutation = (deleter != null) ? deleter :
((converter != null) ? converter : renamer);
addInvalidMutation
(oldFormat, null, mutation,
"Mutations not allowed for an array");
return false;
}
Format compFormat = oldFormat.getComponentType();
if (!evolveFormat(compFormat)) {
return false;
}
Format latest = compFormat.getLatestVersion();
if (latest != compFormat) {
newName = (latest.isArray() ? "[" : "[L") +
latest.getClassName() + ';';
} else {
newName = oldName;
}
} else {
newName = (renamer != null) ? renamer.getNewName() : oldName;
}
/* Try to get the new class format. Save exception for later. */
Format newFormat;
String newFormatException;