use of spoon.test.delete.testclasses.Adobada in project spoon by INRIA.
the class QualifiedThisRefTest method testCloneThisAccess.
@Test
public void testCloneThisAccess() throws Exception {
// contract: the target of "this" is correct and can be cloned
final Factory factory = build(Adobada.class);
final CtClass<Adobada> adobada = factory.Class().get(Adobada.class);
final CtMethod<?> m2 = adobada.getMethod("methodUsingjlObjectMethods");
CtThisAccess th = (CtThisAccess) m2.getElements(new TypeFilter(CtThisAccess.class)).get(0);
assertEquals(true, th.isImplicit());
assertEquals("notify()", th.getParent().toString());
CtInvocation<?> clone = m2.clone().getBody().getStatement(0);
// clone preserves implicitness
assertEquals(true, clone.getTarget().isImplicit());
// the original bug
assertEquals("notify()", clone.toString());
// note that this behavior means that you can only keep cloned "this" in the same class,
// and you cannot "transplant" a cloned "this" to another class
// it makes perfectly sense about the meaning of this.
// to "transplant" a this, you have to first set the target to null
}
Aggregations