TODO/WishList for AspectR: * Wrapping of class methods. * Tests for advice dispatch disabling. * FIX: Deinstall dispatcher and reinstall original method when all advices have been unwrapped. Unclear how this should work with singletons!? * Check: generate_syntax must handle all special method names. Apply to Ruby std classes to find the problematic ones. * Decide on how to handle 'inheritance anomalies'. For example should you be able to unwrap on singleton what has been wrapped on class? Also if aspect A is wrapped to Sup and Sub inherits Sup the Aspect A should not be wrapped to Sub? Or? * Move examples into test file and extend the tests. * Adding method call join points by setting a trace_function in the dispatch code?! But the perfomrance penalty with trace funcs is severe... * Some way to match regexp to methods when wrapping object? Should we simply match to methods in objects class and then make them singletons? (Done...) * Find out if it is possible to dynamically control if the aspect will be called. Would it be a good thing to be able to turn advice dispatch off when in an advice method? return #{call} if @@__aop_disabled at the first row of the dispatcher? Or more complex expressions? Control for each aspect? (Possible implementation is to have flags in a hash in Advice) * Encapsulate all join point information (method name, args, return val, context, exception etc) into one object (JoinPoint??) that is sent to advice's? Performance penalty? Maybe you should be able to choose the kind of data returned? But there will be a lot of params so we'd really need some keyword args. Matz, are you listening? ;-) * Add examples: type/error checking, synch, fault tolerance, profiling * Thread safety?! * Check what is in AspectJ or other AOP-project/papers and see what we could/should add: * Check out the paper Aspect Oriented Programming: A Critical Analysis of a New Programming Paradigm (1999) Timothy Highley, Michael Lack, Perry Myers