Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*     */ package net.sf.cglib.proxy;
  /*     */ 
  /*     */ import java.util.HashMap;
  /*     */ import java.util.Iterator;
  /*     */ import java.util.List;
  /*     */ import java.util.Map;
  /*     */ import java.util.Set;
  /*     */ import net.sf.cglib.asm.Label;
  /*     */ import net.sf.cglib.asm.Type;
 /*     */ import net.sf.cglib.core.ClassEmitter;
 /*     */ import net.sf.cglib.core.CodeEmitter;
 /*     */ import net.sf.cglib.core.Constants;
 /*     */ import net.sf.cglib.core.EmitUtils;
 /*     */ import net.sf.cglib.core.Local;
 /*     */ import net.sf.cglib.core.MethodInfo;
 /*     */ import net.sf.cglib.core.ObjectSwitchCallback;
 /*     */ import net.sf.cglib.core.Signature;
 /*     */ import net.sf.cglib.core.TypeUtils;
 /*     */ 
 /*     */ class MethodInterceptorGenerator
 /*     */   implements CallbackGenerator
 /*     */ {
 /*  26 */   public static final MethodInterceptorGenerator INSTANCE = new MethodInterceptorGenerator();
 /*     */   static final String EMPTY_ARGS_NAME = "CGLIB$emptyArgs";
 /*     */   static final String FIND_PROXY_NAME = "CGLIB$findMethodProxy";
 /*  30 */   static final Class[] FIND_PROXY_TYPES = { Signature.class };
 /*     */ 
 /*  32 */   private static final Type ABSTRACT_METHOD_ERROR = TypeUtils.parseType("AbstractMethodError");
 /*     */ 
 /*  34 */   private static final Type METHOD = TypeUtils.parseType("java.lang.reflect.Method");
 /*     */ 
 /*  36 */   private static final Type METHOD_PROXY = TypeUtils.parseType("net.sf.cglib.proxy.MethodProxy");
 /*     */ 
 /*  38 */   private static final Type METHOD_INTERCEPTOR = TypeUtils.parseType("net.sf.cglib.proxy.MethodInterceptor");
 /*     */ 
 /*  40 */   private static final Signature GET_DECLARING_CLASS = TypeUtils.parseSignature("Class getDeclaringClass()");
 /*     */ 
 /*  42 */   private static final Signature GET_CLASS_LOADER = TypeUtils.parseSignature("ClassLoader getClassLoader()");
 /*     */ 
 /*     */ 
 /*  53 */   private static final Signature INTERCEPT = new Signature("intercept".new Type[] { .. });
 /*     */ 
 /*  60 */   private static final Signature FIND_PROXY = new Signature("CGLIB$findMethodProxy"new Type[] { . });
 /*     */ 
 /*  62 */   private static final Signature TO_STRING = TypeUtils.parseSignature("String toString()");
 /*     */ 
 /*     */   private String getMethodField(Signature impl)
 /*     */   {
 /*  66 */     return impl.getName() + "$Method";
 /*     */   }
 /*     */   private String getMethodProxyField(Signature impl) {
 /*  69 */     return impl.getName() + "$Proxy";
 /*     */   }
 /*     */ 
 /*     */   public void generate(ClassEmitter ceCallbackGenerator.Context contextList methods) {
 /*  73 */     Map sigMap = new HashMap();
 /*  74 */     for (Iterator it = methods.iterator(); it.hasNext(); ) {
 /*  75 */       MethodInfo method = (MethodInfo)it.next();
 /*  76 */       Signature impl = context.getImplSignature(method);
 /*     */ 
 /*  78 */       String methodField = getMethodField(impl);
 /*  79 */       String methodProxyField = getMethodProxyField(impl);
 /*     */ 
 /*  81 */       sigMap.put(method.getSignature().toString(), methodProxyField);
 /*  82 */       ce.declare_field(26, methodFieldnullnull);
 /*  83 */       ce.declare_field(26, methodProxyFieldnullnull);
 /*  84 */       ce.declare_field(26, "CGLIB$emptyArgs".nullnull);
 /*     */ 
 /*  88 */       CodeEmitter e = ce.begin_method(16, implmethod.getExceptionTypes(), null);
 /*     */ 
 /*  92 */       if (TypeUtils.isAbstract(method.getModifiers())) {
 /*  93 */         e.throw_exception(method.toString() + " is abstract");
 /*     */       } else {
 /*  95 */         e.load_this();
 /*  96 */         e.load_args();
 /*  97 */         e.super_invoke(method.getSignature());
 /*     */       }
 /*  99 */       e.return_value();
 /* 100 */       e.end_method();
 /*     */ 
 /* 103 */       e = context.beginMethod(cemethod);
 /* 104 */       Label nullInterceptor = e.make_label();
 /* 105 */       context.emitCallback(econtext.getIndex(method));
 /* 106 */       e.dup();
 /* 107 */       e.ifnull(nullInterceptor);
 /*     */ 
 /* 109 */       e.load_this();
 /* 110 */       e.getfield(methodField);
 /*     */ 
 /* 112 */       if (method.getSignature().getArgumentTypes().length == 0)
 /* 113 */         e.getfield("CGLIB$emptyArgs");
 /*     */       else {
 /* 115 */         e.create_arg_array();
 /*     */       }
 /*     */ 
 /* 118 */       e.getfield(methodProxyField);
 /* 119 */       e.invoke_interface();
 /* 120 */       e.unbox_or_zero(method.getSignature().getReturnType());
/* 121 */       e.return_value();
/*     */ 
/* 123 */       e.mark(nullInterceptor);
/* 124 */       e.load_this();
/* 125 */       e.load_args();
/* 126 */       e.super_invoke(method.getSignature());
/* 127 */       e.return_value();
/* 128 */       e.end_method();
/*     */     }
/* 130 */     generateFindProxy(cesigMap);
/*     */   }
/*     */ 
/*     */   public void generateStatic(CodeEmitter eCallbackGenerator.Context contextList methods)
/*     */   {
/* 144 */     Local thisclass = e.make_local();
/* 145 */     EmitUtils.load_class_this(e);
/* 146 */     e.dup();
/* 147 */     e.store_local(thisclass);
/*     */ 
/* 150 */     e.push(0);
/* 151 */     e.newarray();
/* 152 */     e.putfield("CGLIB$emptyArgs");
/*     */ 
/* 154 */     for (Iterator it = methods.iterator(); it.hasNext(); ) {
/* 155 */       e.dup();
/* 156 */       MethodInfo method = (MethodInfo)it.next();
/* 157 */       Signature impl = context.getImplSignature(method);
/* 158 */       EmitUtils.load_method(emethod);
/* 159 */       e.dup();
/* 160 */       e.putfield(getMethodField(impl));
/*     */ 
/* 162 */       Signature sig = method.getSignature();
/* 163 */       e.invoke_virtual();
/* 164 */       e.load_local(thisclass);
/* 165 */       e.push(sig.getDescriptor());
/* 166 */       e.push(sig.getName());
/* 167 */       e.push(impl.getName());
/* 168 */       e.invoke_static();
/* 169 */       e.putfield(getMethodProxyField(impl));
/*     */     }
/*     */   }
/*     */ 
/*     */   public void generateFindProxy(ClassEmitter ceMap sigMap) {
/* 174 */     CodeEmitter e = ce.begin_method(9, nullnull);
/*     */ 
/* 178 */     e.load_arg(0);
/* 180 */     ObjectSwitchCallback callback = new ObjectSwitchCallback(esigMap) {
/*     */       public void processCase(Object keyLabel end) {
/* 182 */         this..getfield((String)this..get(key));
/* 183 */         this..return_value();
/*     */       }
/*     */       public void processDefault() {
/* 186 */         this..aconst_null();
/* 187 */         this..return_value();
/*     */       }
/*     */     };
/* 190 */     EmitUtils.string_switch(e, (String[])sigMap.keySet().toArray(new String[0]), 1, callback);
/*     */ 
/* 194 */     e.end_method();
/*     */   }
/*     */ }
/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
 * Qualified Name:     net.sf.cglib.proxy.MethodInterceptorGenerator
 * JD-Core Version:    0.6.0
 */
New to GrepCode? Check out our FAQ X