Question 1: =========== 25 points Consider the object tree a_in representing an object of class A in the Java program below. We want to traverse this object in depth-first order as shown in the implementation below. Consider the method t. It's code is spread across several classes. 1. Write an aspect that localizes that code. 10 points 2. Write an aspect that prints the following for every D-object d1 that is found during some traversal t: a) d1.toString() b) x2.toString() for the object x2 visited immediately before the D-object d1 is visited. Your program should be generic and work for any application that has a method t() that is called on D-objects. 15 points The program: class A { B b; C c; A(B b, C c){ this.b = b; this.c = c;} void t() { b.t(); c.t(); } } class B { D d; E e; B(D d, E e) {this.d = d; this.e = e;} void t() { d.t(); e.t(); } } class C { void t() {} } class D extends C { void t() { System.out.println(" in D-object "); } } class E extends C { void t() { System.out.println(" in E-object "); } } class Main { static public void main(String args[]) { A a_in = new A(new B(new D(), new E()), new D()); a_in.t(); } }