@Test public void testClassHierarchy() throws InstrumentException { JavassistClassPool pool = new JavassistClassPool(new GlobalInterceptorRegistryBinder(), null); String testObjectName = "com.navercorp.pinpoint.profiler.interceptor.bci.TestObject"; // final CallLoader loader = null; // systemClassLoader // final ClassLoader loader = ClassLoader.getSystemClassLoader(); InstrumentClass testObject = pool.getClass(null, testObjectName, null); Assert.assertEquals(testObject.getName(), testObjectName); String testObjectSuperClass = testObject.getSuperClass(); Assert.assertEquals("java.lang.Object", testObjectSuperClass); String[] testObjectSuperClassInterfaces = testObject.getInterfaces(); Assert.assertEquals(testObjectSuperClassInterfaces.length, 0); InstrumentClass classHierarchyObject = pool.getClass( null, "com.navercorp.pinpoint.profiler.interceptor.bci.ClassHierarchyTestMock", null); String hierarchySuperClass = classHierarchyObject.getSuperClass(); Assert.assertEquals("java.util.HashMap", hierarchySuperClass); String[] hierarchyInterfaces = classHierarchyObject.getInterfaces(); Assert.assertEquals(hierarchyInterfaces.length, 2); Assert.assertEquals(hierarchyInterfaces[0], "java.lang.Runnable"); Assert.assertEquals(hierarchyInterfaces[1], "java.lang.Comparable"); }
@Test public void testDeclaredMethod() throws InstrumentException { JavassistClassPool pool = new JavassistClassPool(new GlobalInterceptorRegistryBinder(), null); String testObjectName = "com.navercorp.pinpoint.profiler.interceptor.bci.TestObject"; InstrumentClass testObject = pool.getClass(null, testObjectName, null); Assert.assertEquals(testObject.getName(), testObjectName); InstrumentMethod declaredMethod = testObject.getDeclaredMethod("callA", null); Assert.assertNotNull(declaredMethod); }
@Test public void hasEnclodingMethod() throws Exception { JavassistClassPool pool = new JavassistClassPool(new GlobalInterceptorRegistryBinder(), null); String testObjectName = "com.navercorp.pinpoint.profiler.interceptor.bci.TestObjectNestedClass"; InstrumentClass testObject = pool.getClass(null, testObjectName, null); Assert.assertEquals(testObject.getName(), testObjectName); assertEquals( 1, testObject .getNestedClasses( ClassFilters.enclosingMethod("enclosingMethod", "java.lang.String", "int")) .size()); assertEquals( 0, testObject.getNestedClasses(ClassFilters.enclosingMethod("enclosingMethod", "int")).size()); }
@Test public void testDeclaredMethods() throws InstrumentException { JavassistClassPool pool = new JavassistClassPool(new GlobalInterceptorRegistryBinder(), null); String testObjectName = "com.navercorp.pinpoint.profiler.interceptor.bci.TestObject"; InstrumentClass testObject = pool.getClass(null, testObjectName, null); Assert.assertEquals(testObject.getName(), testObjectName); int findMethodCount = 0; for (InstrumentMethod methodInfo : testObject.getDeclaredMethods()) { if (!methodInfo.getName().equals("callA")) { continue; } String[] parameterTypes = methodInfo.getParameterTypes(); if (parameterTypes == null || parameterTypes.length == 0) { findMethodCount++; } } Assert.assertEquals(findMethodCount, 1); }
@Test public void getNestedClasses() throws Exception { JavassistClassPool pool = new JavassistClassPool(new GlobalInterceptorRegistryBinder(), null); String testObjectName = "com.navercorp.pinpoint.profiler.interceptor.bci.TestObjectNestedClass"; InstrumentClass testObject = pool.getClass(null, testObjectName, null); Assert.assertEquals(testObject.getName(), testObjectName); // find class name condition. final String targetClassName = "com.navercorp.pinpoint.profiler.interceptor.bci.TestObjectNestedClass$InstanceInner"; for (InstrumentClass c : testObject.getNestedClasses(ClassFilters.name(targetClassName))) { assertEquals(targetClassName, c.getName()); } // find enclosing method condition. assertEquals( 2, testObject.getNestedClasses(ClassFilters.enclosingMethod("annonymousInnerClass")).size()); // find interface condition. assertEquals( 2, testObject .getNestedClasses(ClassFilters.interfaze("java.util.concurrent.Callable")) .size()); // find enclosing method & interface condition. assertEquals( 1, testObject .getNestedClasses( ClassFilters.chain( ClassFilters.enclosingMethod("annonymousInnerClass"), ClassFilters.interfaze("java.util.concurrent.Callable"))) .size()); }