View Javadoc
1 package org.codehaus.nanning.config; 2 3 import org.codehaus.nanning.config.Pointcut; 4 import org.codehaus.nanning.Mixin; 5 import org.codehaus.nanning.AspectInstance; 6 import org.codehaus.nanning.MethodInterceptor; 7 import org.codehaus.nanning.attribute.Attributes; 8 9 import java.lang.reflect.Method; 10 import java.util.regex.Pattern; 11 import java.util.Iterator; 12 13 public class P { 14 public static Pointcut and(Pointcut pointcut1, Pointcut pointcut2) { 15 return new And(pointcut1, pointcut2); 16 } 17 18 public static Pointcut all() { 19 return new All(); 20 } 21 22 public static Pointcut isMixinInterface(final Class interfaceClass) { 23 return new IsMixinInterface(interfaceClass); 24 } 25 26 public static Pointcut not(final Pointcut pointcut) { 27 return new Not(pointcut); 28 } 29 30 public static Pointcut methodAttribute(String attribute) { 31 return new MethodAttribute(attribute); 32 } 33 34 public static Pointcut empty() { 35 return new Pointcut() { 36 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 37 return false; 38 } 39 }; 40 } 41 42 public static Pointcut or(final Pointcut pointcut1, final Pointcut pointcut2) { 43 return new Or(pointcut1, pointcut2); 44 } 45 46 public static Pointcut methodName(final String pattern) { 47 return new MethodName(pattern); 48 } 49 50 public static Pointcut classAttribute(final String attribute) { 51 return new ClassAttribute(attribute); 52 } 53 54 public static Pointcut isClass(final Class classIdentifier) { 55 return new IsClass(classIdentifier); 56 } 57 58 public static class And extends Pointcut { 59 private Pointcut pointcut1; 60 private Pointcut pointcut2; 61 62 public And(Pointcut pointcut1, Pointcut pointcut2) { 63 this.pointcut1 = pointcut1; 64 this.pointcut2 = pointcut2; 65 } 66 67 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 68 return pointcut1.adviseMethod(instance, mixin, method) && pointcut2.adviseMethod(instance, mixin, method); 69 } 70 } 71 72 private static class Not extends Pointcut { 73 private final Pointcut pointcut; 74 75 public Not(Pointcut pointcut) { 76 this.pointcut = pointcut; 77 } 78 79 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 80 return !pointcut.adviseMethod(instance, mixin, method); 81 } 82 } 83 84 public static class All extends Pointcut { 85 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 86 return true; 87 } 88 89 public boolean introduceOn(AspectInstance instance) { 90 return true; 91 } 92 } 93 94 private static class IsMixinInterface extends Pointcut { 95 private final Class interfaceClass; 96 97 public IsMixinInterface(Class interfaceClass) { 98 this.interfaceClass = interfaceClass; 99 } 100 101 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 102 return checkMixin(mixin); 103 } 104 105 private boolean checkMixin(Mixin mixin) { 106 return mixin.getInterfaceClass() == interfaceClass; 107 } 108 109 public boolean introduceOn(AspectInstance instance) { 110 for (Iterator iterator = instance.getMixins().iterator(); iterator.hasNext();) { 111 Mixin mixin = (Mixin) iterator.next(); 112 if (checkMixin(mixin)) { 113 return true; 114 } 115 } 116 return false; 117 } 118 } 119 120 public static class MethodAttribute extends Pointcut { 121 private String attribute; 122 123 public MethodAttribute(String attribute) { 124 this.attribute = attribute; 125 } 126 127 public String getAttribute() { 128 return attribute; 129 } 130 131 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 132 return Attributes.hasAttribute(method, attribute); 133 } 134 } 135 136 private static class Or extends Pointcut { 137 private final Pointcut pointcut1; 138 private final Pointcut pointcut2; 139 140 public Or(Pointcut pointcut1, Pointcut pointcut2) { 141 this.pointcut1 = pointcut1; 142 this.pointcut2 = pointcut2; 143 } 144 145 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 146 return pointcut1.adviseMethod(instance, mixin, method) || pointcut2.adviseMethod(instance, mixin, method); 147 } 148 } 149 150 private static class MethodName extends Pointcut { 151 private final Pattern pattern; 152 153 public MethodName(String pattern) { 154 this.pattern = Pattern.compile(pattern); 155 } 156 157 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 158 return pattern.matcher(method.getName()).matches(); 159 } 160 } 161 162 private static class ClassAttribute extends Pointcut { 163 private final String attribute; 164 165 public ClassAttribute(String attribute) { 166 this.attribute = attribute; 167 } 168 169 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 170 return matches(instance); 171 } 172 173 public boolean introduceOn(AspectInstance instance) { 174 return matches(instance); 175 } 176 177 private boolean matches(AspectInstance instance) { 178 return Attributes.hasInheritedAttribute(instance.getClassIdentifier(), attribute); 179 } 180 } 181 182 private static class IsClass extends Pointcut { 183 private final Class classIdentifier; 184 185 public IsClass(Class classIdentifier) { 186 this.classIdentifier = classIdentifier; 187 } 188 189 public boolean introduceOn(AspectInstance instance) { 190 return matches(instance); 191 } 192 193 private boolean matches(AspectInstance instance) { 194 return classIdentifier.equals(instance.getClassIdentifier()); 195 } 196 197 public boolean adviseMethod(AspectInstance instance, Mixin mixin, Method method) { 198 return matches(instance); 199 } 200 } 201 }

This page was automatically generated by Maven