case ATTHIS_OR_TARGET: ret = ThisOrTargetAnnotationPointcut.read(s, context); break;
	public static Pointcut read(DataInputStream s, ISourceContext context) throws IOException {		byte kind = s.readByte();		Pointcut ret;				switch(kind) {			case KINDED: ret = KindedPointcut.read(s, context); break;			case WITHIN: ret = WithinPointcut.read(s, context); break;			case THIS_OR_TARGET: ret = ThisOrTargetPointcut.read(s, context); break;			case ARGS: ret = ArgsPointcut.read(s, context); break;			case AND: ret = AndPointcut.read(s, context); break;			case OR: ret = OrPointcut.read(s, context); break;			case NOT: ret = NotPointcut.read(s, context); break;			case REFERENCE: ret = ReferencePointcut.read(s, context); break;			case IF: ret = IfPointcut.read(s, context); break;			case CFLOW: ret = CflowPointcut.read(s, context); break;			case WITHINCODE: ret = WithincodePointcut.read(s, context); break;			case HANDLER: ret = HandlerPointcut.read(s, context); break;			case IF_TRUE: ret = IfPointcut.makeIfTruePointcut(RESOLVED); break;			case IF_FALSE: ret = IfPointcut.makeIfFalsePointcut(RESOLVED); break;			case ANNOTATION: ret = AnnotationPointcut.read(s, context); break;			case ATWITHIN: ret = WithinAnnotationPointcut.read(s, context); break;			case ATWITHINCODE: ret = WithinCodeAnnotationPointcut.read(s, context); break;			case NONE: ret = makeMatchesNothing(RESOLVED); break;			default:				throw new BCException("unknown kind: " + kind);		}		ret.state = RESOLVED;		ret.pointcutKind = kind;		return ret;			}