/** Verifies that abstract methods to implement an interface are added to an abstract class. */ public void testAbstractMethodsAdded() { String source = "import java.util.Iterator; public abstract class Test implements Iterator<Test> { " + "public boolean hasNext() { return true; } }"; CompilationUnit unit = translateType("Test", source); List<AbstractTypeDeclaration> types = unit.getTypes(); assertEquals(1, types.size()); assertTrue(types.get(0) instanceof TypeDeclaration); TypeDeclaration testType = (TypeDeclaration) types.get(0); List<MethodDeclaration> methods = TreeUtil.getMethodDeclarationsList(testType); assertEquals(4, methods.size()); // verify added methods are abstract, and that existing method wasn't changed for (MethodDeclaration m : methods) { int modifiers = m.getModifiers(); String name = m.getName().getIdentifier(); if (name.equals("hasNext")) { assertFalse(Modifier.isAbstract(modifiers)); } else if (name.equals(NameTable.FINALIZE_METHOD) || name.equals(NameTable.DEALLOC_METHOD) || name.equals(NameTable.INIT_NAME)) { // it's ok. } else { // it's an added method assertTrue(Modifier.isAbstract(modifiers)); assertEquals(0, m.getParameters().size()); if (name.equals("next")) { assertEquals(testType.getTypeBinding(), m.getReturnType().getTypeBinding()); } else if (name.equals("remove")) { ITypeBinding voidType = Types.resolveJavaType("void"); assertEquals(voidType, m.getReturnType().getTypeBinding()); } else { fail("unknown method added: " + name); } } } }
public NullLiteral() { super(Types.resolveJavaType("java.lang.Object")); }