import java.io.FileNotFoundException;

public aspect MethodCall {

	pointcut p() : call(public * C1.m2());
	
	before() throws FileNotFoundException : p() { 
		throw new FileNotFoundException();
	}
	
	pointcut p2() : call(public * C1.m4());
	
	before() : p2() {
	}
	
}

class C1 {
	
	public void m1() throws FileNotFoundException {
		new C1().m2();
	}
	
	// don't want the 'declared exception not actually
	// thrown' warning because the advice is affecting
	// this method
	public void m2() throws FileNotFoundException {		
	}
	
	public void m3() throws FileNotFoundException {
		new C1().m4();
	}
	
	// do want the 'declared exception not actually
	// thrown' warning
	public void m4() throws FileNotFoundException {
	}
}