******************************************************************/
if (!(Flags.isPublic(flag) || Flags.isPackageDefault(flag)))
status
.addFatalError(Messages.ConvertConstantsToEnumRefactoring_EnumTypeMustHaveCorrectVisibility);
EnumDeclaration newEnumDeclaration = null;
// only add modifier if it is not package default.
if (!Flags.isPackageDefault(flag)) {
final Modifier newModifier = ast
.newModifier(Modifier.ModifierKeyword
.fromFlagValue(flag));
newEnumDeclaration = createNewEnumDeclaration(ast, ast
.newSimpleName((String) this.simpleTypeNames.get(col)),
enumConstantDeclarationCollection,
new Object[] { newModifier });
} else
newEnumDeclaration = createNewEnumDeclaration(ast, ast
.newSimpleName((String) this.simpleTypeNames.get(col)),
enumConstantDeclarationCollection, new Object[] {});
// TODO [bm] pretty dirty hack to workaround 16: Refactoring should not use UI components for code changes
// http://code.google.com/p/constants-to-enum-eclipse-plugin/issues/detail?id=16
final NewEnumWizardPage[] result = new NewEnumWizardPage[1];
Display.getDefault().syncExec(new Runnable() {
public void run() {
result[0]= new NewEnumWizardPage();
}
});
NewEnumWizardPage page = result[0];
page.setTypeName((String) this.simpleTypeNames.get(col), false);
final IPackageFragmentRoot root = this.getPackageFragmentRoot();
page.setPackageFragmentRoot(root, false);
final IPackageFragment pack = this.getPackageFragment(
(String) this.packageNames.get(col), monitor);
page.setPackageFragment(pack, false);
/*******************************************************************
* * TODO: This is somewhat of a dirty workaround. Basically, I am
* creating a new Enum type only to replace the root AST node. If
* you have any better ideas please let me know!
******************************************************************/
/*******************************************************************
* TODO: Need a way of inserting this new type such that it appears
* in the text changes for rollback purposes, etc.
******************************************************************/
try {
page.createType(monitor);
} catch (final InterruptedException E) {
status.addFatalError(E.getMessage());
}
// Modify the newly created enum type.
final IType newEnumType = page.getCreatedType();
final CompilationUnit node = (CompilationUnit) Util.getASTNode(
newEnumType, monitor);
final ASTRewrite astRewrite = ASTRewrite.create(node.getAST());
final ImportRewrite importRewrite = ImportRewrite
.create(node, true);
final EnumDeclaration oldEnumDeclaration = (EnumDeclaration) node
.types().get(0);
// Add imports for annotations to the enum constants.
for (final Iterator eit = newEnumDeclaration.enumConstants()
.iterator(); eit.hasNext();) {