abstract class ValueChange { public ValueChange(Q initValue) { } } abstract class SyncValueGroup extends ValueChange { public SyncValueGroup(T initValue) { super(initValue); } public final synchronized void link(SyncValueGroup ... list) { } } class SyncValueTest { class SyncInteger extends SyncValueGroup { public SyncInteger(int val) { super(new Integer(val)); } } private SyncInteger a = new SyncInteger(1); public void testSyncValueGroup() { a.link(a); } } aspect X { before(): call(* *(..)) {} }