namespace attributes import Boo.Lang.Compiler import Boo.Lang.Compiler.Ast import Boo.Lang.Compiler.MetaProgramming class NotNullAttribute(AbstractAstAttribute): override def Apply(node as Node): p as ParameterDeclaration = node method as Method = p.ParentNode method.Body = [| if $p is null: raise System.ArgumentNullException($(p.Name)) $(method.Body) |] code = [| import attributes class Lumberjack: def sing([NotNull] song): print song |] type = compile(code).GetType("Lumberjack") lumberjack as duck = type() lumberjack.sing(null) #print code.ToCodeString()