Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*     */ package net.sf.cglib.reflect;
  /*     */ 
  /*     */ import java.lang.reflect.Method;
  /*     */ import net.sf.cglib.asm.ClassVisitor;
  /*     */ import net.sf.cglib.asm.Type;
  /*     */ import net.sf.cglib.core.AbstractClassGenerator;
  /*     */ import  net.sf.cglib.core.AbstractClassGenerator.Source;
  /*     */ import net.sf.cglib.core.ClassEmitter;
  /*     */ import net.sf.cglib.core.ClassInfo;
 /*     */ import net.sf.cglib.core.CodeEmitter;
 /*     */ import net.sf.cglib.core.Constants;
 /*     */ import net.sf.cglib.core.EmitUtils;
 /*     */ import net.sf.cglib.core.KeyFactory;
 /*     */ import net.sf.cglib.core.MethodInfo;
 /*     */ import net.sf.cglib.core.ReflectUtils;
 /*     */ import net.sf.cglib.core.Signature;
 /*     */ import net.sf.cglib.core.TypeUtils;
 /*     */ 
 /*     */ public abstract class MethodDelegate
 /*     */ {
 /* 108 */   private static final MethodDelegateKey KEY_FACTORY = (MethodDelegateKey)KeyFactory.create(MethodDelegateKey.class.);
 /*     */   protected Object target;
 /*     */   protected String eqMethod;
 /*     */ 
 /*     */   public static MethodDelegate createStatic(Class targetClassString methodNameClass iface)
 /*     */   {
 /* 119 */     Generator gen = new Generator();
 /* 120 */     gen.setTargetClass(targetClass);
 /* 121 */     gen.setMethodName(methodName);
 /* 122 */     gen.setInterface(iface);
 /* 123 */     return gen.create();
 /*     */   }
 /*     */ 
 /*     */   public static MethodDelegate create(Object targetString methodNameClass iface) {
 /* 127 */     Generator gen = new Generator();
 /* 128 */     gen.setTarget(target);
 /* 129 */     gen.setMethodName(methodName);
 /* 130 */     gen.setInterface(iface);
 /* 131 */     return gen.create();
 /*     */   }
 /*     */ 
 /*     */   public boolean equals(Object obj) {
 /* 135 */     MethodDelegate other = (MethodDelegate)obj;
 /* 136 */     return (this. == other.target) && (this..equals(other.eqMethod));
 /*     */   }
 /*     */ 
 /*     */   public int hashCode() {
 /* 140 */     return this..hashCode() ^ this..hashCode();
 /*     */   }
 /*     */ 
 /*     */   public Object getTarget() {
 /* 144 */     return this.; } 
 /*     */   public abstract MethodDelegate newInstance(Object paramObject);
 /*     */ 
 /* 150 */   public static class Generator extends AbstractClassGenerator { private static final AbstractClassGenerator.Source SOURCE = new AbstractClassGenerator.Source(MethodDelegate.class.getName());
 /* 151 */     private static final Type METHOD_DELEGATE = TypeUtils.parseType("net.sf.cglib.reflect.MethodDelegate");
 /*     */ 
 /* 153 */     private static final Signature NEW_INSTANCE = new Signature("newInstance"new Type[] { . });
 /*     */     private Object target;
 /*     */     private Class targetClass;
 /*     */     private String methodName;
 /*     */     private Class iface;
 /*     */ 
 /* 162 */     public Generator() { super(); }
 /*     */ 
 /*     */     public void setTarget(Object target)
 /*     */     {
 /* 166 */       this. = target;
 /* 167 */       this. = target.getClass();
 /*     */     }
 /*     */ 
 /*     */     public void setTargetClass(Class targetClass) {
 /* 171 */       this. = targetClass;
 /*     */     }
 /*     */ 
 /*     */     public void setMethodName(String methodName) {
 /* 175 */       this. = methodName;
 /*     */     }
 /*     */ 
 /*     */     public void setInterface(Class iface) {
 /* 179 */       this. = iface;
 /*     */     }
 /*     */ 
 /*     */     protected ClassLoader getDefaultClassLoader() {
 /* 183 */       return this..getClassLoader();
 /*     */     }
 /*     */ 
 /*     */     public MethodDelegate create() {
 /* 187 */       setNamePrefix(this..getName());
 /* 188 */       Object key = ..newInstance(this.this.this.);
 /* 189 */       return (MethodDelegate)super.create(key);
 /*     */     }
 /*     */ 
 /*     */     protected Object firstInstance(Class type) {
 /* 193 */       return ((MethodDelegate)ReflectUtils.newInstance(type)).newInstance(this.);
 /*     */     }
 /*     */ 
 /*     */     protected Object nextInstance(Object instance) {
 /* 197 */       return ((MethodDelegate)instance).newInstance(this.);
/*     */     }
/*     */ 
/*     */     public void generateClass(ClassVisitor vthrows NoSuchMethodException {
/* 201 */       Method proxy = ReflectUtils.findInterfaceMethod(this.);
/* 202 */       Method method = this..getMethod(this.proxy.getParameterTypes());
/* 203 */       if (!proxy.getReturnType().isAssignableFrom(method.getReturnType())) {
/* 204 */         throw new IllegalArgumentException("incompatible return types");
/*     */       }
/*     */ 
/* 207 */       MethodInfo methodInfo = ReflectUtils.getMethodInfo(method);
/*     */ 
/* 209 */       boolean isStatic = TypeUtils.isStatic(methodInfo.getModifiers());
/* 210 */       if ((this. == null ^ isStatic)) {
/* 211 */         throw new IllegalArgumentException("Static method " + (isStatic ? "not " : "") + "expected");
/*     */       }
/*     */ 
/* 214 */       ClassEmitter ce = new ClassEmitter(v);
/*     */ 
/* 216 */       ce.begin_class(46, 1, getClassName(), new Type[] { Type.getType(this.) }, "<generated>");
/*     */ 
/* 222 */       ce.declare_field(26, "eqMethod".nullnull);
/* 223 */       EmitUtils.null_constructor(ce);
/*     */ 
/* 226 */       MethodInfo proxied = ReflectUtils.getMethodInfo(this..getDeclaredMethods()[0]);
/* 227 */       CodeEmitter e = EmitUtils.begin_method(ceproxied, 1);
/* 228 */       e.load_this();
/* 229 */       e.super_getfield("target".);
/* 230 */       e.checkcast(methodInfo.getClassInfo().getType());
/* 231 */       e.load_args();
/* 232 */       e.invoke(methodInfo);
/* 233 */       e.return_value();
/* 234 */       e.end_method();
/*     */ 
/* 237 */       e = ce.begin_method(1, nullnull);
/* 238 */       e.new_instance_this();
/* 239 */       e.dup();
/* 240 */       e.dup2();
/* 241 */       e.invoke_constructor_this();
/* 242 */       e.getfield("eqMethod");
/* 243 */       e.super_putfield("eqMethod".);
/* 244 */       e.load_arg(0);
/* 245 */       e.super_putfield("target".);
/* 246 */       e.return_value();
/* 247 */       e.end_method();
/*     */ 
/* 250 */       e = ce.begin_static();
/* 251 */       e.push(methodInfo.getSignature().toString());
/* 252 */       e.putfield("eqMethod");
/* 253 */       e.return_value();
/* 254 */       e.end_method();
/*     */ 
/* 256 */       ce.end_class();
/*     */     }
/*     */   }
/*     */ 
/*     */   static abstract interface MethodDelegateKey
/*     */   {
/*     */     public abstract Object newInstance(Class paramClass1String paramStringClass paramClass2);
/*     */   }
/*     */ }
/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
 * Qualified Name:     net.sf.cglib.reflect.MethodDelegate
 * JD-Core Version:    0.6.0
 */
New to GrepCode? Check out our FAQ X