[NAME]
ALL.dao.class.aspect

[TITLE]
Aspect Class (Removed)

[DESCRIPTION]

WARNING: This feature has been removed!

In Dao, a class decorator can be effectly used as an aspect for AOP, if decoration target
patterns are specified for auto application. The target patterns are can be specified in 
the same way as the target patterns for class method decorators.

The fields of such class will be automatically injected to normal classes selected accord
ing to the affix rules, and the decorators defined in such aspect class are automatically
applied to the methods (selected according to the same affix rules) of the normal classes
.

To avoid unintentional application of aspects, a class can only be modified by aspects th
at are accessible at the definition point of the class. Furthermore, only aspects defined
in the same file as the class or in the directly loaded file will be automatically applie
d.

     
   1  class @AspectForAnyClass for ~  # To be applied to any classes;
   2  {
   3      var injected = {}
   4  
   5      # This is not a decorator!
   6      routine @AspectForAnyClass(){
   7          io.writeln( 'In @AspectForAnyClass():' );
   8          injected = { 1, 2, 3 }
   9      }
  10  
  11      # This decorator will also be applied to the default constructors:
  12      routine @DecoratorForAnyMethod( meth(args) : routine ) for ~ {
  13          io.writeln( 'In @DecoratorForAnyMethod():', std.about(meth) )
  14          io.writeln( injected )
  15          return meth( args, ... )
  16      }
  17  }
  18  
  19  # For classes with names prefixed with My:
  20  class @AspectForMyClasses for My~
  21  {
  22      routine @Method( meth(args) : routine ) for Method~ {
  23          io.writeln( 'In @AspectForMyClasses::@Method():', std.about(meth) )
  24          return meth( args, ... )
  25      }
  26  }
  27  
  28  class MyClass
  29  {
  30      routine Method(){ io.writeln( 'MyClass::Method()' ) }
  31  }
  32  
  33  k = MyClass()  # Invoke the default constructor of Klass;
  34  k.Method()