1 4 package com.tctest.transparency; 5 6 import com.tc.exception.TCNonPortableObjectError; 7 import com.tc.object.config.ConfigLockLevel; 8 import com.tc.object.config.ConfigVisitor; 9 import com.tc.object.config.DSOClientConfigHelper; 10 import com.tc.simulator.app.ApplicationConfig; 11 import com.tc.simulator.listener.ListenerProvider; 12 import com.tctest.runner.AbstractTransparentApp; 13 14 import java.util.HashMap ; 15 import java.util.Map ; 16 17 public class InnerClassInstrumentationTestApp extends AbstractTransparentApp { 18 19 private static final String INSTRUMENTED_KEY = "instrumented"; 20 private static final String NOT_INSTRUMENTED_KEY = "not instrumented"; 21 22 private final Map root = new HashMap (); 23 24 public InnerClassInstrumentationTestApp(String appId, ApplicationConfig config, ListenerProvider listenerProvider) { 25 super(appId, config, listenerProvider); 26 } 27 28 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 29 String testClassName = InnerClassInstrumentationTestApp.class.getName(); 30 config.addIncludePattern(testClassName); 31 config.addIncludePattern(MyInstrumentedInnerClass.class.getName()); 32 33 config.addIncludePattern(InnerInnerExtendsInstrumentedClass.class.getName()); 34 config.addIncludePattern(InnerInnerExtendsInstrumentedClass.InnerInnerClass.class.getName()); 35 config.addIncludePattern(InnerInnerExtendsInstrumentedClass.InnerInnerClass.InnerInnerInnerClass.class.getName()); 36 37 config.addIncludePattern(MyNonInstrumentedInnerSubclass.class.getName()); 38 39 config.addIncludePattern(InnerInnerExtendsNonInstrumentedClass.class.getName()); 40 config.addIncludePattern(InnerInnerExtendsNonInstrumentedClass.InnerInnerClass.class.getName()); 41 config.addIncludePattern(InnerInnerExtendsNonInstrumentedClass.InnerInnerClass.InnerInnerInnerClass.class.getName()); 42 43 config.addIncludePattern(InnerInnerStaticExtendsInstrumentedClass.class.getName()); 44 config.addIncludePattern(InnerInnerStaticExtendsInstrumentedClass.InnerInnerClass.class.getName()); 45 46 config.addIncludePattern(InnerInnerStaticExtendsNonInstrumentedClass.class.getName()); 47 config.addIncludePattern(InnerInnerStaticExtendsNonInstrumentedClass.InnerInnerClass.class.getName()); 48 49 config.addIncludePattern(AnonymousInstrumentedInnerInnerClass.class.getName()); 50 config.addIncludePattern(testClassName+"$1"); 51 config.addIncludePattern(AnonymousNonInstrumentedInnerInnerClass.class.getName()); 52 config.addIncludePattern(testClassName+"$2"); 53 config.addRoot(testClassName, "root", "root", true); 54 config.addAutolock("* " + testClassName + ".*(..)", ConfigLockLevel.WRITE); 55 } 56 57 public void run() { 58 synchronized (root) { 59 root.put(INSTRUMENTED_KEY, new MyInstrumentedInnerClass()); 60 try { 61 root.put(NOT_INSTRUMENTED_KEY, new MyNonInstrumentedInnerClass()); 62 throw new AssertionError ("This should have thrown an exception!"); 63 } catch ( TCNonPortableObjectError t) { 64 } 66 root.put(INSTRUMENTED_KEY, new InnerInnerExtendsInstrumentedClass()); 67 try { 68 root.put(NOT_INSTRUMENTED_KEY, new MyNonInstrumentedInnerSubclass()); 69 throw new AssertionError ("This should have thrown an exception!"); 70 } catch ( TCNonPortableObjectError t) { 71 } 73 74 try { 75 root.put(NOT_INSTRUMENTED_KEY, new InnerInnerExtendsNonInstrumentedClass()); 76 throw new AssertionError ("This should have thrown an exception!"); 77 } catch ( TCNonPortableObjectError t) { 78 } 80 81 root.put(INSTRUMENTED_KEY, new InnerInnerStaticExtendsInstrumentedClass()); 82 83 try { 84 root.put(NOT_INSTRUMENTED_KEY, new InnerInnerStaticExtendsNonInstrumentedClass()); 85 throw new AssertionError ("This should have thrown an exception!"); 86 } catch ( TCNonPortableObjectError t) { 87 } 89 90 root.put(INSTRUMENTED_KEY, new AnonymousInstrumentedInnerInnerClass()); 91 92 try { 93 root.put(NOT_INSTRUMENTED_KEY, new AnonymousNonInstrumentedInnerInnerClass()); 94 throw new AssertionError ("This should have thrown an exception!"); 95 } catch ( TCNonPortableObjectError t) { 96 } 98 } 99 } 100 101 private static class MyNonInstrumentedInnerClass { 102 } 104 105 private static class MyInstrumentedInnerClass { 106 } 108 109 private static final class InnerInnerExtendsInstrumentedClass { 110 private final InnerInnerClass inner = new InnerInnerClass(); 111 112 public Object getInner() { 114 return inner; 115 } 116 117 private class InnerInnerClass extends MyInstrumentedInnerClass { 118 private final InnerInnerInnerClass innerInner = new InnerInnerInnerClass(); 119 120 public Object getInnerInner() { 122 return innerInner; 123 } 124 125 private class InnerInnerInnerClass extends MyInstrumentedInnerClass { 126 } 128 } 129 } 130 131 private static final class InnerInnerStaticExtendsInstrumentedClass { 132 private final InnerInnerClass inner = new InnerInnerClass(); 133 134 public Object getInner() { 136 return inner; 137 } 138 139 private static class InnerInnerClass extends MyInstrumentedInnerClass { 140 } 142 } 143 144 private static final class MyNonInstrumentedInnerSubclass extends MyNonInstrumentedInnerClass { 145 } 147 148 private static final class InnerInnerExtendsNonInstrumentedClass { 149 private final InnerInnerClass inner = new InnerInnerClass(); 150 151 public Object getInner() { 153 return inner; 154 } 155 156 157 private class InnerInnerClass extends MyInstrumentedInnerClass { 158 private final InnerInnerInnerClass innerInner = new InnerInnerInnerClass(); 159 160 public Object getInnerInner() { 162 return innerInner; 163 } 164 165 private class InnerInnerInnerClass extends MyNonInstrumentedInnerClass { 166 } 168 } 169 } 170 171 private static final class InnerInnerStaticExtendsNonInstrumentedClass { 172 private final InnerInnerClass inner = new InnerInnerClass(); 173 174 public Object getInner() { 176 return inner; 177 } 178 179 private static class InnerInnerClass extends MyNonInstrumentedInnerClass { 180 } 182 } 183 184 private static final class AnonymousInstrumentedInnerInnerClass extends MyInstrumentedInnerClass { 185 public final MyInstrumentedInnerClass innerInner = new MyInstrumentedInnerClass() { 186 }; 188 } 189 190 private static final class AnonymousNonInstrumentedInnerInnerClass extends MyInstrumentedInnerClass { 191 public final MyNonInstrumentedInnerClass innerInner = new MyNonInstrumentedInnerClass() { 192 }; 194 } 195 } 196
| Popular Tags
|