1 27 package ch.ethz.prose.filter; 28 29 import java.util.*; 31 import java.io.*; 32 import ch.ethz.jvmai.JoinPointKinds; 33 import ch.ethz.jvmai.JoinPoint; 34 import ch.ethz.jvmai.CodeJoinPoint; 35 import ch.ethz.prose.engine.ExceptionThrowRequest; 36 import ch.ethz.prose.engine.ExceptionCatchRequest; 37 import ch.ethz.prose.engine.JoinPointRequest; 38 39 40 47 public 48 class ExceptionTypeFilter extends PointCutter implements JoinPointKinds{ 49 50 public final static int SUBCLASS_INHERITANCE = 1; 51 public final static int SUPERCLASS_INHERITANCE = 2; 52 public final static int NO_INHERITANCE = 3; 53 54 private int inheritanceType; 55 private Class subOrSuperClass; 56 60 public ExceptionTypeFilter(Class cls, int inhType) 61 { 62 this.inheritanceType = inhType; 63 this.subOrSuperClass = cls; 64 65 acceptMask = MASK_EXCEPTION_THROW_ARGS_JP | MASK_EXCEPTION_CATCH_ARGS_JP; 66 mayFilterStaticallyMask = MASK_EXCEPTION_THROW_ARGS_JP | MASK_EXCEPTION_CATCH_ARGS_JP; 67 canFilterStaticallyMask = MASK_EXCEPTION_THROW_ARGS_JP | MASK_EXCEPTION_CATCH_ARGS_JP; 68 } 69 70 71 protected boolean doIsSpecialRequest(JoinPointRequest jpr) 72 { 73 Class declaringClass; 74 75 switch (jpr.getMask() & (MASK_EXCEPTION_THROW_ARGS_JP | MASK_EXCEPTION_CATCH_ARGS_JP)) 76 { 77 case MASK_EXCEPTION_THROW_ARGS_JP: 78 declaringClass = ((ExceptionThrowRequest)jpr).getExceptionClass(); 79 break; 80 case MASK_EXCEPTION_CATCH_ARGS_JP: 81 declaringClass = ((ExceptionCatchRequest)jpr).getExceptionClass(); 82 break; 83 default: 84 throw new Error ("ExceptionTypeFilter.doIsSpecialRequest: unrequested request"); 85 } 86 87 88 switch(inheritanceType) 89 { 90 case SUBCLASS_INHERITANCE: 91 return subOrSuperClass.isAssignableFrom(declaringClass); 92 93 case SUPERCLASS_INHERITANCE: return declaringClass.isAssignableFrom(subOrSuperClass); 94 case NO_INHERITANCE: return subOrSuperClass.equals(declaringClass); 95 default: 96 throw new Error ("Illegal state Exception"); 97 } 98 } 99 100 protected boolean doIsSpecialEvent(CodeJoinPoint jpr) 101 { 102 throw new Error ("PointCutter did not fullfil its contract"); 103 } 104 105 106 107 } 108 109 110 | Popular Tags |