01: /*
02: * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
03: * notice. All rights reserved.
04: */
05: package com.tc.weblogic.transform;
06:
07: import com.tc.asm.ClassAdapter;
08: import com.tc.asm.ClassVisitor;
09: import com.tc.asm.Label;
10: import com.tc.asm.MethodVisitor;
11: import com.tc.asm.Opcodes;
12: import com.tc.object.bytecode.ClassAdapterFactory;
13:
14: public class FilterManagerAdapter extends ClassAdapter implements
15: Opcodes, ClassAdapterFactory {
16:
17: public FilterManagerAdapter() {
18: super (null);
19: }
20:
21: private FilterManagerAdapter(ClassVisitor cv, ClassLoader caller) {
22: super (cv);
23: }
24:
25: public ClassAdapter create(ClassVisitor visitor, ClassLoader loader) {
26: return new FilterManagerAdapter(visitor, loader);
27: }
28:
29: public void visitEnd() {
30: addGetContextMethod();
31: super .visitEnd();
32: }
33:
34: // see the dummy FilterManager class in dso-weblogic-stubs for this method post-asm
35: private void addGetContextMethod() {
36: MethodVisitor mv = cv.visitMethod(ACC_PUBLIC,
37: "__tc_getContext",
38: "()Lweblogic/servlet/internal/WebAppServletContext;",
39: null, null);
40:
41: mv.visitCode();
42: Label l0 = new Label();
43: mv.visitLabel(l0);
44: mv.visitLineNumber(8, l0);
45: mv.visitVarInsn(ALOAD, 0);
46: mv.visitFieldInsn(GETFIELD,
47: "weblogic/servlet/internal/FilterManager", "context",
48: "Lweblogic/servlet/internal/WebAppServletContext;");
49: mv.visitInsn(ARETURN);
50: Label l1 = new Label();
51: mv.visitLabel(l1);
52: mv.visitLocalVariable("this",
53: "Lweblogic/servlet/internal/FilterManager;", null, l0,
54: l1, 0);
55: mv.visitMaxs(1, 1);
56: mv.visitEnd();
57: }
58:
59: }
|