public static TypePatternList read(VersionedDataInputStream s, ISourceContext context) throws IOException { short len = s.readShort(); TypePattern[] arguments = new TypePattern[len]; for (int i = 0; i < len; i++) { arguments[i] = TypePattern.read(s, context); } TypePatternList ret = new TypePatternList(arguments); if (!s.isAtLeast169()) { ret.readLocation(context, s); } return ret; }
private void checkParameterAnnotations( PointcutExpression pe, int parameterNumber, String expectedParameterAnnotations, String expectedParameterTypeAnnotations, String expectedNodeStructure) { org.aspectj.weaver.patterns.Pointcut p = ((PointcutExpressionImpl) pe).getUnderlyingPointcut(); KindedPointcut kindedP = (KindedPointcut) p; SignaturePattern sp = kindedP.getSignature(); TypePatternList tpl = sp.getParameterTypes(); TypePattern[] tps = tpl.getTypePatterns(); // A visitor over the annotation pattern for the parameter will break it down into parameter vs // parameter type annotations MyPatternNodeVisitor mpnv = new MyPatternNodeVisitor(); tps[parameterNumber].getAnnotationPattern().accept(mpnv, null); if (expectedNodeStructure == null) { // The caller hasn't worked it out yet!! System.out.println(mpnv.getStringRepresentation()); } else if (!mpnv.getStringRepresentation().equals(expectedNodeStructure)) { System.out.println(mpnv.getStringRepresentation()); fail( "Expected annotation pattern node structure for expression " + pe.getPointcutExpression() + " was '" + expectedNodeStructure + "' but it turned out to be '" + mpnv.getStringRepresentation() + "'"); } tps[parameterNumber].getAnnotationPattern().toString(); // parameter type annotation checking Set<String> expected = new HashSet<String>(); expected.addAll(mpnv.getParameterTypeAnnotations()); StringTokenizer st = new StringTokenizer( expectedParameterTypeAnnotations == null ? "" : expectedParameterTypeAnnotations); while (st.hasMoreTokens()) { String nextToken = st.nextToken(); if (!expected.contains(nextToken)) fail( "In pointcut expression " + pe.getPointcutExpression() + " parameter " + parameterNumber + ". The annotation type pattern did not include parameter type annotation " + nextToken + ". It's full set was " + mpnv.getParameterTypeAnnotations()); expected.remove(nextToken); } if (expected.size() > 0) { // we have excess ones! StringBuffer excessTokens = new StringBuffer(); for (Iterator iterator = expected.iterator(); iterator.hasNext(); ) { String string = (String) iterator.next(); excessTokens.append(string).append(" "); } fail( "In pointcut expression " + pe.getPointcutExpression() + " parameter " + parameterNumber + ". The annotation type pattern has these unexpected parameter type annotations " + excessTokens.toString()); } // parameter annotation checking expected = new HashSet<String>(); expected.addAll(mpnv.getParameterAnnotations()); st = new StringTokenizer( expectedParameterAnnotations == null ? "" : expectedParameterAnnotations); while (st.hasMoreTokens()) { String nextToken = st.nextToken(); if (!expected.contains(nextToken)) fail( "In pointcut expression " + pe.getPointcutExpression() + " parameter " + parameterNumber + ". The annotation type pattern did not include parameter annotation " + nextToken + ". It's full set was " + mpnv.getParameterAnnotations()); expected.remove(nextToken); } if (expected.size() > 0) { // we have excess ones! StringBuffer excessTokens = new StringBuffer(); for (Iterator iterator = expected.iterator(); iterator.hasNext(); ) { String string = (String) iterator.next(); excessTokens.append(string).append(" "); } fail( "In pointcut expression " + pe.getPointcutExpression() + " parameter " + parameterNumber + ". The annotation type pattern has these unexpected parameter annotations " + excessTokens.toString()); } }