Advertisement
BLeAmz

Untitled

Jun 8th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 1.13 KB | None | 0 0
  1. import 'dart:mirrors';
  2.  
  3. class MethodExtensible {
  4.     Map _methods = {};
  5.     void noSuchMethod(Invocation inv) {
  6.         String name = MirrorSystem.getName(inv.memberName);
  7.         String fname = name.replaceAll('=','');
  8.         if (_methods.containsKey(fname) && !name.endsWith('=')) {
  9.             List args = new List<dynamic>.from(inv.positionalArguments);
  10.             args.insert(0, this);
  11.             Function.apply(_methods[fname], args, inv.namedArguments);
  12.         } else if (name.endsWith('=') && inv.positionalArguments[0] is Function) {
  13.             _methods[fname] = inv.positionalArguments[0];
  14.         } else {
  15.             throw new NoSuchMethodError(this, inv.memberName, inv.positionalArguments, inv.namedArguments);
  16.         }
  17.     }
  18. }
  19.  
  20. class myObj extends MethodExtensible {
  21.     String val = 'test string';
  22. }
  23.  
  24.  
  25. void injected_func(self, {name: 'bleamz'}) {
  26.     print(self.val);
  27.     print(name);
  28. }
  29.  
  30. void main() {
  31.     myObj myobj = new myObj();
  32.     myobj.printVal = (var self) => print(self.val);
  33.     myobj.printVal();
  34.     myobj.printVal = (self) => print('${self.val} from new method');
  35.     myobj.printVal();
  36.     myobj.printVal = injected_func;
  37.     myobj.printVal(name:'blah blah');
  38.     myobj.fasfdasasd(); //expect NoSuchMethodError.
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement