KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > cglib > transform > impl > AddStaticInitTransformer


1 /*
2  * Copyright 2003,2004 The Apache Software Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package net.sf.cglib.transform.impl;
17
18 import java.lang.reflect.Method JavaDoc;
19 import net.sf.cglib.core.*;
20 import net.sf.cglib.transform.*;
21 import org.objectweb.asm.Type;
22
23 /**
24  * @author Juozas Baliuka, Chris Nokleberg
25  */

26 public class AddStaticInitTransformer extends ClassEmitterTransformer {
27     private MethodInfo info;
28
29     public AddStaticInitTransformer(Method JavaDoc classInit) {
30         info = ReflectUtils.getMethodInfo(classInit);
31         if (!TypeUtils.isStatic(info.getModifiers())) {
32             throw new IllegalArgumentException JavaDoc(classInit + " is not static");
33         }
34         Type[] types = info.getSignature().getArgumentTypes();
35         if (types.length != 1 ||
36             !types[0].equals(Constants.TYPE_CLASS) ||
37             !info.getSignature().getReturnType().equals(Type.VOID_TYPE)) {
38             throw new IllegalArgumentException JavaDoc(classInit + " illegal signature");
39         }
40     }
41
42     protected void init() {
43         if (!TypeUtils.isInterface(getAccess())) {
44             CodeEmitter e = getStaticHook();
45             EmitUtils.load_class_this(e);
46             e.invoke(info);
47         }
48     }
49 }
50
Popular Tags