aspect MakeTypeAbstract { public void TypeDecl.makeAbstract() { throw new RefactoringException("type cannot be made abstract"); } public void AnonymousDecl.makeAbstract() { throw new RefactoringException("anonymous type cannot be made abstract"); } public void ArrayDecl.makeAbstract() { throw new RefactoringException("array type cannot be made abstract"); } public void EnumDecl.makeAbstract() { throw new RefactoringException("enum type cannot be made abstract"); } public void UnknownType.makeAbstract() { throw new RefactoringException("type cannot be made abstract"); } public void InterfaceDecl.makeAbstract() { } public void ClassDeclSubstituted.makeAbstract() { getOriginal().makeAbstract(); } public void GenericClassDeclSubstituted.makeAbstract() { getOriginal().makeAbstract(); } public void ParClassDecl.makeAbstract() { genericDecl().makeAbstract(); } public void ClassDecl.makeAbstract() { if(isAbstract()) return; if(instancesAreConstructed()) throw new RefactoringException("cannot make type abstract: it has instances constructed"); getModifiers().addModifier("abstract"); } }