Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*     */ package net.sf.cglib.core;
  /*     */ 
  /*     */ import java.lang.reflect.Method;
  /*     */ import net.sf.cglib.asm.ClassVisitor;
  /*     */ import net.sf.cglib.asm.Label;
  /*     */ import net.sf.cglib.asm.Type;
  /*     */ 
  /*     */ public abstract class KeyFactory
  /*     */ {
 /*  54 */   private static final Signature GET_NAME = TypeUtils.parseSignature("String getName()");
 /*     */ 
 /*  56 */   private static final Signature GET_CLASS = TypeUtils.parseSignature("Class getClass()");
 /*     */ 
 /*  58 */   private static final Signature HASH_CODE = TypeUtils.parseSignature("int hashCode()");
 /*     */ 
 /*  60 */   private static final Signature EQUALS = TypeUtils.parseSignature("boolean equals(Object)");
 /*     */ 
 /*  62 */   private static final Signature TO_STRING = TypeUtils.parseSignature("String toString()");
 /*     */ 
 /*  64 */   private static final Signature APPEND_STRING = TypeUtils.parseSignature("StringBuffer append(String)");
 /*     */ 
 /*  66 */   private static final Type KEY_FACTORY = TypeUtils.parseType("net.sf.cglib.core.KeyFactory");
 /*     */ 
 /*  70 */   private static final int[] PRIMES = { 11, 73, 179, 331, 521, 787, 1213, 1823, 2609, 3691, 5189, 7247, 10037, 13931, 19289, 26627, 36683, 50441, 69403, 95401, 131129, 180179, 247501, 340057, 467063, 641371, 880603, 1209107, 1660097, 2279161, 3129011, 4295723, 5897291, 8095873, 11114263, 15257791, 20946017, 28754629, 39474179, 54189869, 74391461, 102123817, 140194277, 192456917, 264202273, 362693231, 497900099, 683510293, 938313161, 1288102441, 1768288259 };
 /*     */ 
 /*  86 */   public static final Customizer CLASS_BY_NAME = new Customizer() {
 /*     */     public void customize(CodeEmitter eType type) {
 /*  88 */       if (type.equals(.))
 /*  89 */         e.invoke_virtual(..);
 /*     */     }
 /*  86 */   };
 /*     */ 
 /*  94 */   public static final Customizer OBJECT_BY_CLASS = new Customizer() {
 /*     */     public void customize(CodeEmitter eType type) {
 /*  96 */       e.invoke_virtual(..);
 /*     */     }
 /*  94 */   };
 /*     */ 
 /*     */   public static KeyFactory create(Class keyInterface)
 /*     */   {
 /* 104 */     return create(keyInterfacenull);
 /*     */   }
 /*     */ 
 /*     */   public static KeyFactory create(Class keyInterfaceCustomizer customizer) {
 /* 108 */     return create(keyInterface.getClassLoader(), keyInterfacecustomizer);
 /*     */   }
 /*     */ 
 /*     */   public static KeyFactory create(ClassLoader loaderClass keyInterfaceCustomizer customizer) {
 /* 112 */     Generator gen = new Generator();
 /* 113 */     gen.setInterface(keyInterface);
 /* 114 */     gen.setCustomizer(customizer);
 /* 115 */     gen.setClassLoader(loader);
 /* 116 */     gen.setAttemptLoad(true);
 /* 117 */     return gen.create(); } 
 /* 121 */   public static class Generator extends AbstractClassGenerator { private static final AbstractClassGenerator.Source SOURCE = new AbstractClassGenerator.Source(KeyFactory.class.getName());
 /*     */     private Class keyInterface;
 /*     */     private Customizer customizer;
 /*     */     private int constant;
 /*     */     private int multiplier;
 /*     */ 
 /* 128 */     public Generator() { super(); }
 /*     */ 
 /*     */     protected ClassLoader getDefaultClassLoader()
 /*     */     {
 /* 132 */       return this..getClassLoader();
 /*     */     }
 /*     */ 
 /*     */     public void setCustomizer(Customizer customizer) {
 /* 136 */       this. = customizer;
 /*     */     }
 /*     */ 
 /*     */     public void setInterface(Class keyInterface) {
 /* 140 */       this. = keyInterface;
 /*     */     }
 /*     */ 
 /*     */     public KeyFactory create() {
 /* 144 */       setNamePrefix(this..getName());
 /* 145 */       return (KeyFactory)super.create(this..getName());
 /*     */     }
 /*     */ 
 /*     */     public void setHashConstant(int constant) {
 /* 149 */       this. = constant;
 /*     */     }
 /*     */ 
 /*     */     public void setHashMultiplier(int multiplier) {
 /* 153 */       this. = multiplier;
 /*     */     }
 /*     */ 
 /*     */     protected Object firstInstance(Class type) {
 /* 157 */       return ReflectUtils.newInstance(type);
 /*     */     }
 /*     */ 
 /*     */     protected Object nextInstance(Object instance) {
 /* 161 */       return instance;
 /*     */     }
 /*     */ 
 /*     */     public void generateClass(ClassVisitor v) {
 /* 165 */       ClassEmitter ce = new ClassEmitter(v);
 /*     */ 
/* 167 */       Method newInstance = ReflectUtils.findNewInstance(this.);
/* 168 */       if (!newInstance.getReturnType().equals(Object.class)) {
/* 169 */         throw new IllegalArgumentException("newInstance method must return Object");
/*     */       }
/*     */ 
/* 172 */       Type[] parameterTypes = TypeUtils.getTypes(newInstance.getParameterTypes());
/* 173 */       ce.begin_class(46, 1, getClassName(), .new Type[] { Type.getType(this.) }, "<generated>");
/*     */ 
/* 179 */       EmitUtils.null_constructor(ce);
/* 180 */       EmitUtils.factory_method(ce, ReflectUtils.getSignature(newInstance));
/*     */ 
/* 182 */       int seed = 0;
/* 183 */       CodeEmitter e = ce.begin_method(1, TypeUtils.parseConstructor(parameterTypes), nullnull);
/*     */ 
/* 187 */       e.load_this();
/* 188 */       e.super_invoke_constructor();
/* 189 */       e.load_this();
/* 190 */       for (int i = 0; i < parameterTypes.lengthi++) {
/* 191 */         seed += parameterTypes[i].hashCode();
/* 192 */         ce.declare_field(18, getFieldName(i), parameterTypes[i], nullnull);
/*     */ 
/* 197 */         e.dup();
/* 198 */         e.load_arg(i);
/* 199 */         e.putfield(getFieldName(i));
/*     */       }
/* 201 */       e.return_value();
/* 202 */       e.end_method();
/*     */ 
/* 205 */       e = ce.begin_method(1, .nullnull);
/* 206 */       int hc = this. != 0 ? this. : .[(java.lang.Math.abs(seed) % ..)];
/* 207 */       int hm = this. != 0 ? this. : .[(java.lang.Math.abs(seed * 13) % ..)];
/* 208 */       e.push(hc);
/* 209 */       for (int i = 0; i < parameterTypes.lengthi++) {
/* 210 */         e.load_this();
/* 211 */         e.getfield(getFieldName(i));
/* 212 */         EmitUtils.hash_code(eparameterTypes[i], hmthis.);
/*     */       }
/* 214 */       e.return_value();
/* 215 */       e.end_method();
/*     */ 
/* 218 */       e = ce.begin_method(1, .nullnull);
/* 219 */       Label fail = e.make_label();
/* 220 */       e.load_arg(0);
/* 221 */       e.instance_of_this();
/* 222 */       e.if_jump(153, fail);
/* 223 */       for (int i = 0; i < parameterTypes.lengthi++) {
/* 224 */         e.load_this();
/* 225 */         e.getfield(getFieldName(i));
/* 226 */         e.load_arg(0);
/* 227 */         e.checkcast_this();
/* 228 */         e.getfield(getFieldName(i));
/* 229 */         EmitUtils.not_equals(eparameterTypes[i], failthis.);
/*     */       }
/* 231 */       e.push(1);
/* 232 */       e.return_value();
/* 233 */       e.mark(fail);
/* 234 */       e.push(0);
/* 235 */       e.return_value();
/* 236 */       e.end_method();
/*     */ 
/* 239 */       e = ce.begin_method(1, .nullnull);
/* 240 */       e.new_instance(.);
/* 241 */       e.dup();
/* 243 */       for (int i = 0; i < parameterTypes.lengthi++) {
/* 244 */         if (i > 0) {
/* 245 */           e.push(", ");
/*     */         }
/* 248 */         e.load_this();
/* 249 */         e.getfield(getFieldName(i));
/* 250 */         EmitUtils.append_string(eparameterTypes[i], .this.);
/*     */       }
/* 253 */       e.return_value();
/* 254 */       e.end_method();
/*     */ 
/* 256 */       ce.end_class();
/*     */     }
/*     */ 
/*     */     private String getFieldName(int arg) {
/* 260 */       return "FIELD_" + arg;
/*     */     }
/*     */   }
/*     */ }
/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
 * Qualified Name:     net.sf.cglib.core.KeyFactory
 * JD-Core Version:    0.6.0
 */
New to GrepCode? Check out our FAQ X