package be.ac.vub.object_annotations.examples.blackboard; import be.ac.vub.object_annotations.AnnotationManager; import be.ac.vub.object_annotations.examples.blackboard.annotations.Lock; public aspect Locker { pointcut locked(Object t) : set(* *) && target(t) && if(AnnotationManager.isActive(t,Lock.class)); Object around(Object t) : locked(t) { Lock lock = AnnotationManager.getAnnotationOf(t); if(lock.value()) throw new IllegalStateException(t+" is locked!"); else return proceed(t); } }