Java 类java.lang.instrument.UnmodifiableClassException 实例源码

项目:openrasp    文件:Agent.java   
/**
 * 初始化类字节码的转换器
 *
 * @param inst 用于管理字节码转换器
 */
private static void initTransformer(Instrumentation inst) throws UnmodifiableClassException {
    LinkedList<Class> retransformClasses = new LinkedList<Class>();
    CustomClassTransformer customClassTransformer = new CustomClassTransformer();
    inst.addTransformer(customClassTransformer, true);
    Class[] loadedClasses = inst.getAllLoadedClasses();
    for (Class clazz : loadedClasses) {
        for (final AbstractClassHook hook : customClassTransformer.getHooks()) {
            if (hook.isClassMatched(clazz.getName().replace(".", "/"))) {
                if (inst.isModifiableClass(clazz) && !clazz.getName().startsWith("java.lang.invoke.LambdaForm")) {
                    retransformClasses.add(clazz);
                }
            }
        }
    }
    // hook已经加载的类
    Class[] classes = new Class[retransformClasses.size()];
    retransformClasses.toArray(classes);
    if (classes.length > 0) {
        inst.retransformClasses(classes);
    }
}
项目:openjdk-jdk10    文件:TestLambdaFormRetransformation.java   
public static void premain(String args, Instrumentation instrumentation) {
    if (!instrumentation.isRetransformClassesSupported()) {
        System.out.println("Class retransformation is not supported.");
        return;
    }
    System.out.println("Calling lambda to ensure that lambda forms were created");

    Agent.lambda.run();

    System.out.println("Registering class file transformer");

    instrumentation.addTransformer(new Agent());

    for (Class c : instrumentation.getAllLoadedClasses()) {
        if (c.getName().contains("LambdaForm") &&
            instrumentation.isModifiableClass(c)) {
            System.out.format("We've found a modifiable lambda form: %s%n", c.getName());
            try {
                instrumentation.retransformClasses(c);
            } catch (UnmodifiableClassException e) {
                throw new AssertionError("Modification of modifiable class " +
                                         "caused UnmodifiableClassException", e);
            }
        }
    }
}
项目:openjdk9    文件:TestLambdaFormRetransformation.java   
public static void premain(String args, Instrumentation instrumentation) {
    if (!instrumentation.isRetransformClassesSupported()) {
        System.out.println("Class retransformation is not supported.");
        return;
    }
    System.out.println("Calling lambda to ensure that lambda forms were created");

    Agent.lambda.run();

    System.out.println("Registering class file transformer");

    instrumentation.addTransformer(new Agent());

    for (Class c : instrumentation.getAllLoadedClasses()) {
        if (c.getName().contains("LambdaForm") &&
            instrumentation.isModifiableClass(c)) {
            System.out.format("We've found a modifiable lambda form: %s%n", c.getName());
            try {
                instrumentation.retransformClasses(c);
            } catch (UnmodifiableClassException e) {
                throw new AssertionError("Modification of modifiable class " +
                                         "caused UnmodifiableClassException", e);
            }
        }
    }
}
项目:tracing-framework    文件:TestJDWPAgentDebug.java   
@Test
public void testBadModification2() throws ClassNotFoundException, AgentLoadException, AgentInitializationException, IOException, AttachNotSupportedException, UnmodifiableClassException, IllegalConnectorArgumentsException {
    // Rewrite method
    DynamicModification badModification = new DynamicModification() {
        public Collection<String> affects() {
            return Lists.newArrayList(TestJDWPAgentDebug.class.getName());
        }
        public void apply(ClassPool arg0) throws NotFoundException, CannotCompileException {
            CtClass cls = arg0.getCtClass(TestJDWPAgentDebug.class.getName());
            cls.getMethods()[0].insertBefore("definitely not code...");
        }
    };
    JDWPAgent dynamic = JDWPAgent.get();
    // Modification should just be ignored since it throws a notfoundexception
    try {
        dynamic.install(badModification);
        fail();
    } catch (CannotCompileException e) {
    }
}
项目:tracing-framework    文件:TestJVMAgent.java   
@Test
public void testBadModification2() throws ClassNotFoundException, AgentLoadException, AgentInitializationException, IOException, AttachNotSupportedException, UnmodifiableClassException {
    // Rewrite method
    DynamicModification badModification = new DynamicModification() {
        public Collection<String> affects() {
            return Lists.newArrayList(TestJVMAgent.class.getName());
        }
        public void apply(ClassPool arg0) throws NotFoundException, CannotCompileException {
            CtClass cls = arg0.getCtClass(TestJVMAgent.class.getName());
            cls.getMethods()[0].insertBefore("definitely not code...");
        }
    };
    JVMAgent dynamic = JVMAgent.get();
    // Modification should just be ignored since it throws a notfoundexception
    try {
        dynamic.install(badModification);
        fail();
    } catch (CannotCompileException e) {
    }
}
项目:tracing-framework    文件:TestMethodRewriteModification.java   
@Test
public void testBadTracepoint() throws ClassNotFoundException, UnmodifiableClassException, CannotCompileException {
    // Create and register dummy advice
    PTAgentForTest test = new PTAgentForTest();
    AdviceImplForTest advice = new AdviceImplForTest();
    int lookupId = test.agent.adviceManager.register(advice);

    // Method under test
    MethodTracepointSpec t1 = TracepointsTestUtils.getMethodSpec(getClass(), "method");
    MethodTracepointSpec tbad = MethodTracepointSpec.newBuilder(t1).setMethodName("badmethod").build();

    // Invoke method - should do nothing before rewrite
    method("hi");
    advice.expectSize(0);

    // Rewrite method
    MethodRewriteModification mod = new MethodRewriteModification(tbad, lookupId);

    test.agent.dynamic.clear().add(mod).install();
    advice.expectSize(0);

    method("hi");
    advice.expectSize(0);
}
项目:testrecorder    文件:FakeIOTransformer.java   
public void reset() {
    Class<?>[] classesToReset = classes.toArray(new Class[0]);
    Class<?>[] classesToRelink = nativeClasses.toArray(new Class[0]);
    classes.clear();
    methods.clear();
    nativeClasses.clear();
    if (classesToReset.length > 0) {
        try {
            inst.retransformClasses(classesToReset);
        } catch (UnmodifiableClassException e) {
            System.err.println("unexpected class transforming restriction: " + e.getMessage());
            e.printStackTrace(System.err);
        }
    }
    for (Class<?> clazz : classesToRelink) {
        relinkNativeMethods(clazz);
    }
}
项目:testrecorder    文件:TestrecorderAgentRunner.java   
private void setupTransformer() {
    try {
        System.out.println("setup");
        Instrumented instrumented = getTestClass().getJavaClass().getAnnotation(Instrumented.class);

        TestRecorderAgentConfig config = fetchConfig(instrumented);

        Class<?>[] classes = fetchClasses(instrumented);

        agent = new TestRecorderAgent(inst);
        agent.prepareInstrumentations(config);
        if (classes.length > 0) {
            inst.retransformClasses(classes);
        }
    } catch (ReflectiveOperationException | UnmodifiableClassException | Error e) {
        throw new RuntimeException(e);
    }
}
项目:Cojac    文件:Double2FloatTest.java   
@Before
public void instrument() throws ClassNotFoundException, UnmodifiableClassException, InstantiationException, IllegalAccessException{

    Assert.assertTrue(methods.length == expectedResults.length);
    Args args = new Args();

    args.specify(Arg.DOUBLE2FLOAT);
    args.specify(Arg.PRINT);
    CojacReferencesBuilder builder = new CojacReferencesBuilder(args);

    agent = new Agent(builder.build());
    AgentTest.instrumentation.addTransformer(agent);

    classz = ClassLoader.getSystemClassLoader().loadClass("com.github.cojac.unit.behaviours.Double2FloatTests");
    AgentTest.instrumentation.retransformClasses(classz);

    object = classz.newInstance();
}
项目:Cojac    文件:NativeRoundingTest.java   
private void setRounding(Arg a) throws ClassNotFoundException, UnmodifiableClassException, InstantiationException, IllegalAccessException{
    Args args = new Args();
    args.specify(a);
    args.specify(Arg.PRINT);
    CojacReferencesBuilder builder = new CojacReferencesBuilder(args);
    try{
        agent = new Agent(builder.build());
        isLibraryLoaded = true;
        AgentTest.instrumentation.addTransformer(agent);

        classz = ClassLoader.getSystemClassLoader().loadClass("com.github.cojac.unit.behaviours.NativeRoundingTests");
        AgentTest.instrumentation.retransformClasses(classz);

        object = classz.newInstance();
    }catch(RuntimeException e){
        System.err.println("Library couldn't be charged. Abording Native rounding tests.");
        isLibraryLoaded = false;
    }
}
项目:Cojac    文件:CallBackAgentTest.java   
@Test
  public void testCallBackMethodCalled() throws ClassNotFoundException, IllegalAccessException, InstantiationException,
          NoSuchMethodException, InvocationTargetException, NoSuchFieldException, UnmodifiableClassException {
      Args args = new Args();

      args.specify(Arg.ALL);
      args.setValue(Arg.CALL_BACK, "com/github/cojac/unit/CallBacksAgent/log");

CojacReferencesBuilder builder = new CojacReferencesBuilder(args);

      Agent agent = new Agent(builder.build());
      AgentTest.instrumentation.addTransformer(agent);

      Class<?> classz = ClassLoader.getSystemClassLoader().loadClass("com.github.cojac.unit.SimpleOverflows");
      AgentTest.instrumentation.retransformClasses(classz);

      Object object = classz.newInstance();
      Method m = classz.getMethod("test");
      m.invoke(object);

      classz = ClassLoader.getSystemClassLoader().loadClass("com.github.cojac.unit.CallBacksAgent");
      Field field = classz.getField("count");
      Assert.assertEquals(1, field.get(null));

      AgentTest.instrumentation.removeTransformer(agent);
  }
项目:allocation-instrumenter    文件:ConstructorInstrumenter.java   
/**
 * Ensures that the given sampler will be invoked every time a constructor
 * for class c is invoked.
 *
 * @param c The class to be tracked
 * @param sampler the code to be invoked when an instance of c is constructed
 * @throws UnmodifiableClassException if c cannot be modified.
 */
public static void instrumentClass(Class<?> c, ConstructorCallback<?> sampler)
    throws UnmodifiableClassException {
  // IMPORTANT: Don't forget that other threads may be accessing this
  // class while this code is running.  Specifically, the class may be
  // executed directly after the retransformClasses is called.  Thus, we need
  // to be careful about what happens after the retransformClasses call.
  synchronized (samplerPutAtomicityLock) {
    List<ConstructorCallback<?>> list = samplerMap.get(c);
    if (list == null) {
      CopyOnWriteArrayList<ConstructorCallback<?>> samplerList =
          new CopyOnWriteArrayList<ConstructorCallback<?>>();
      samplerList.add(sampler);
      samplerMap.put(c, samplerList);
      Instrumentation inst = AllocationRecorder.getInstrumentation();
      Class<?>[] cs = new Class<?>[1];
      cs[0] = c;
      inst.retransformClasses(c);
    } else {
      list.add(sampler);
    }
  }
}
项目:allocation-instrumenter    文件:ConstructorInstrumenter.java   
/**
 * Inserts the appropriate INVOKESTATIC call
 */
@Override public void visitInsn(int opcode) {
  if ((opcode == Opcodes.ARETURN) ||
      (opcode == Opcodes.IRETURN) ||
      (opcode == Opcodes.LRETURN) ||
      (opcode == Opcodes.FRETURN) ||
      (opcode == Opcodes.DRETURN)) {
    throw new RuntimeException(new UnmodifiableClassException(
        "Constructors are supposed to return void"));
  }
  if (opcode == Opcodes.RETURN) {
    super.visitVarInsn(Opcodes.ALOAD, 0);
    super.visitMethodInsn(
        Opcodes.INVOKESTATIC,
        "com/google/monitoring/runtime/instrumentation/ConstructorInstrumenter",
        "invokeSamplers",
        "(Ljava/lang/Object;)V",
        false);
  }
  super.visitInsn(opcode);
}
项目:jreloader    文件:Transformer.java   
private void reload(Entry e)
    throws IOException, ClassNotFoundException, UnmodifiableClassException {
    System.err.println(e.file);
    cdefs.clear();
    if (e.loaderRef != null) {
        ClassLoader cl = e.loaderRef.get();
        if (cl != null) {
            request(e, cl);
            if (e.children != null) {
                for (Entry ce : e.children) {
                    request(ce, cl);
                }
            }
            // System.err.println(cdefs);
            Agent.inst.redefineClasses(cdefs.toArray(new ClassDefinition[0]));
        } else {
            e.loaderRef = null;
        }
    }
}
项目:Voovan    文件:Hotswaper.java   
/**
 * 自动热加载 Class
 * @param  intervals 自动重读的时间间隔, 单位: 秒
 * @throws UnmodifiableClassException  不可修改的 Class 异常
 * @throws ClassNotFoundException Class未找到异常
 */
public void autoReload(int intervals) throws UnmodifiableClassException, ClassNotFoundException {
    this.reloadIntervals = intervals;

    cancelAutoReload();

    Logger.info("[HOTSWAP] Start auto reload and hotswap every " + intervals + " seconds");

    reloadTask = new HashWheelTask() {
        @Override
        public void run() {
            try {
                List<ClassFileInfo> changedFiles = fileWatcher();
                reloadClass(changedFiles);
            } catch (UnmodifiableClassException |ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    };

    Global.getHashWheelTimer().addTask(reloadTask, intervals, true);
}
项目:scott    文件:ConstructorTransformerMethodVisitor.java   
@Override
public void visitInsn(int opcode) {
    if ((opcode == Opcodes.ARETURN) || (opcode == Opcodes.IRETURN)
            || (opcode == Opcodes.LRETURN)
            || (opcode == Opcodes.FRETURN)
            || (opcode == Opcodes.DRETURN)) {
        throw new RuntimeException(new UnmodifiableClassException("Constructors are supposed to return void"));
    }
    if (opcode == Opcodes.RETURN) {
        super.visitVarInsn(Opcodes.ALOAD, 0);
        super.visitTypeInsn(Opcodes.NEW, Type.getInternalName(ScottReportingRule.class));
        super.visitInsn(Opcodes.DUP);
        super.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getInternalName(ScottReportingRule.class), "<init>", "()V", false);

        super.visitFieldInsn(Opcodes.PUTFIELD, 
                className, "scottReportingRule",
                Type.getDescriptor(ScottReportingRule.class));
    }

    super.visitInsn(opcode);
}
项目:Lucee    文件:PhysicalClassLoader.java   
@Override
public synchronized Class<?> loadClass(String name, byte[] barr) throws UnmodifiableClassException {
    Class<?> clazz=null;
    try {
        clazz = loadClass(name,false,false); // we do not load existing class from disk
    } catch (ClassNotFoundException cnf) {}

    // if class already exists
    if(clazz!=null) {
        try {
            InstrumentationFactory.getInstrumentation(config).redefineClasses(new ClassDefinition(clazz,barr));
        } 
        catch (ClassNotFoundException e) {
            // the documentation clearly sais that this exception only exists for backward compatibility and never happen
        }
        return clazz;
    }
    // class not exists yet
    return _loadClass(name, barr);
}
项目:Lucee    文件:MemoryClassLoader.java   
@Override
public synchronized Class<?> loadClass(String name, byte[] barr) throws UnmodifiableClassException {
    Class<?> clazz=null;
    try {
        clazz = loadClass(name);
    } catch (ClassNotFoundException cnf) {}

    // if class already exists
    if(clazz!=null) {
        try {
            InstrumentationFactory.getInstrumentation(config).redefineClasses(new ClassDefinition(clazz,barr));
        } 
        catch (ClassNotFoundException e) {
            // the documentation clearly sais that this exception only exists for backward compatibility and never happen
        }
        aprint.e("redefined:memory:"+clazz.getName());
        return clazz;
    }
    // class not exists yet
    return _loadClass(name, barr);
}
项目:Lucee    文件:ASMProxyFactory.java   
public static ASMClass getClass(ExtendableClassLoader pcl,Resource classRoot,Class clazz) throws IOException, InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException, UnmodifiableClassException{
    Type type = Type.getType(clazz); 

    // Fields
    Field[] fields = clazz.getFields();
    for(int i=0;i<fields.length;i++){
        if(Modifier.isPrivate(fields[i].getModifiers())) continue;
        createField(type,fields[i]);
    }

    // Methods
    Method[] methods = clazz.getMethods();
    Map<String,ASMMethod> amethods=new HashMap<String, ASMMethod>();
    for(int i=0;i<methods.length;i++){
        if(Modifier.isPrivate(methods[i].getModifiers())) continue;
        amethods.put(methods[i].getName(), getMethod(pcl,classRoot,type,clazz,methods[i]));
    }

    return new ASMClass(clazz.getName(),amethods);

}
项目:Lucee    文件:ASMProxyFactory.java   
private static ASMMethod getMethod(ExtendableClassLoader pcl, Resource classRoot, Type type,Class clazz, Method method) throws IOException, InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException, UnmodifiableClassException {
    String className = createMethodName(clazz,method.getName(),method.getParameterTypes());

    // check if already in memory cache
    ASMMethod asmm = methods.get(className);
    if(asmm!=null)return asmm;

    // try to load existing ASM Class
    Class<?> asmClass;
    try {
        asmClass = pcl.loadClass(className);
    }
    catch (ClassNotFoundException cnfe) {
        byte[] barr = _createMethod(type, clazz, method, classRoot, className);
        asmClass=pcl.loadClass(className, barr);
    }

    asmm = newInstance(asmClass,clazz,method.getParameterTypes());
    methods.put(className, asmm);
    return asmm;
}
项目:highway-to-urhell    文件:CoreEngine.java   
public void enableEntryPointCoverage(FilterEntryPath filter)
        throws ClassNotFoundException, UnmodifiableClassException {
    System.out.println("enabling entry point coverage "+filter.toString());
    Instrumentation instrumentation = InstrumentationHolder.getInstance().getInst();
    if (instrumentation != null) {
        TransformerService ts = new TransformerService();
        Map<String, List<EntryPathData>> mapConvert = ts
                .transformDataFromLeechPluginForTransformation(leechPluginRegistry.values(), filter);
        if (!config.getPathSend()) {
            // if the initPath are not called
            initPathsRemote();
        }
        instrumentation.addTransformer(
                new EntryPointTransformer(mapConvert, CoreEngine.getInstance().getConfig().getPerformance()), true);
        ts.transformAllClassScanByH2h(instrumentation, mapConvert.keySet());
    } else {
        System.err.println("Instrumentation fail because internal inst is null");
    }
}
项目:pinpoint    文件:DynamicTransformServiceTest.java   
@Test()
public void testRetransform_Fail_memoryleak_prevent() throws Exception {
    final Instrumentation instrumentation = mock(Instrumentation.class);
    when(instrumentation.isModifiableClass(any(Class.class))).thenReturn(true);
    doAnswer(new Answer<Void>() {
        @Override
        public Void answer(InvocationOnMock invocation) throws Throwable {
            throw new UnmodifiableClassException();
        }
    }).when(instrumentation).retransformClasses(any(Class.class));


    DefaultDynamicTransformerRegistry listener = new DefaultDynamicTransformerRegistry();

    final ClassFileTransformer classFileTransformer = mock(ClassFileTransformer.class);

    DynamicTransformService dynamicTransformService = new DynamicTransformService(instrumentation, listener);

    try {
        dynamicTransformService.retransform(String.class, classFileTransformer);
        Assert.fail("expected retransform fail");
    } catch (Exception e) {
    }
    Assert.assertEquals(listener.size(), 0);
}
项目:guards    文件:GuardsAgent.java   
public static void agentmain(String agentArgs, Instrumentation instrumentation) {
    main(agentArgs, instrumentation);
    LOG.info("Retransforming all classes");
    for( Class<?> c : instrumentation.getAllLoadedClasses() ) {
        Transformer transformer = getInstance().transformer;
        if ( transformer.isTransformable(c) ) {
            try {
                instrumentation.retransformClasses(c);
            }
            catch ( UnmodifiableClassException e ) {
                LOG.log(Level.WARNING, "Cannot retransform " + c, e);
            }
        }
    }
    LOG.info("Retransformation done");
}
项目:HotswapAgent    文件:InstrumentationRedefiner.java   
public void redefineClasses(Map<Class<?>, byte[]> classes) throws ClassNotFoundException,
        UnmodifiableClassException {

    if (PluginManager.getInstance().getInstrumentation() == null) {
        throw new IllegalStateException("Instrumentation agent is not properly installed!");
    }

    ClassDefinition[] definitions = new ClassDefinition[classes.size()];
    int i = 0;
    for (Map.Entry<Class<?>, byte[]> entry : classes.entrySet()) {
        definitions[i++] = new ClassDefinition(entry.getKey(), entry.getValue());
        URL classResource = getClassResource(entry.getKey());

        try (OutputStream fileWriter = new FileOutputStream(new File(classResource.toURI()))) {
            fileWriter.write(entry.getValue());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    PluginManager.getInstance().getInstrumentation().redefineClasses(definitions);
}
项目:RuntimeTransformer    文件:Agent.java   
public void process(Class<?> ... transformerClasses) {
    List<AgentJob> agentJobs = new ArrayList<>();

    for (Class<?> clazz : transformerClasses)
        agentJobs.add(new AgentJob(clazz));

    ClassTransformer classTransformer = new ClassTransformer(agentJobs);
    instrumentation.addTransformer(classTransformer, true);

    try {
        instrumentation.retransformClasses(classTransformer.getClassesToTransform());
    } catch (UnmodifiableClassException e) {
        e.printStackTrace();
    }
}
项目:incubator-netbeans    文件:AgentWorker.java   
@Override
public void redefine(ClassBytecodes[] cbcs) throws ClassInstallException, NotImplementedException, EngineTerminationException {
    int count = cbcs.length;
    boolean[] status = new boolean[cbcs.length];
    int success = 0;
    NbRemoteLoader ldr = prepareClassLoader();
    for (int i = 0; i < count; i++) {
        String name = cbcs[i].name();
        byte[] replaceBytecode = cbcs[i].bytecodes();
        Long id = ldr.getClassId(name);
        if (id != null) {
            Class defined = ldr.getClassOfId(id);
            try {
                agent.getInstrumentation().redefineClasses(
                        new ClassDefinition(defined, replaceBytecode)
                );
                status[i] = true;
                success++;
            } catch (ClassNotFoundException | UnmodifiableClassException ex) {
                Logger.getLogger(AgentWorker.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (success < count) {
            throw new ClassInstallException("Could not redefine classes", status);
        }
    }
}
项目:Gasket    文件:TestSingletons.java   
@Test
public void testSingleton() throws IOException, UnmodifiableClassException
{
    new GasketInjector().register(TestClass.class, SomeSingleton.class, SomeOtherSingleton.class);

    final TestClass testClass = new TestClass(5);
    Assert.assertEquals("Invalid data returned", 5, testClass.getSingletonData());
    Assert.assertEquals("Invalid data returned", 9, testClass.getOtherSingletonData());

    final TestClass testClass2 = new TestClass("kek");
    Assert.assertEquals("Invalid data returned", 5, testClass2.getSingletonData());
    Assert.assertEquals("Invalid data returned", 9, testClass2.getOtherSingletonData());
}
项目:Gasket    文件:TestSingletons.java   
@Test
public void testNamedSingleton() throws IOException, UnmodifiableClassException
{
    new GasketInjector().register(TestNamed.class, TestImplementation1.class, TestImplementation2.class);

    final TestNamed testNamed = new TestNamed();
    Assert.assertEquals("Implementation 1 returned wrong value", NAMED_VALUE1, testNamed.getValue1());
    Assert.assertEquals("Implementation 2 returned wrong value", NAMED_VALUE2, testNamed.getValue2());
}
项目:Gasket    文件:TestProvider.java   
@Test
public void testProviders() throws IOException, UnmodifiableClassException
{
    final GasketInjector injector = new GasketInjector();
    injector.register(Config.class, ProviderTest.class, TestClass.class);

    injector.getConfig().setProperty("provider_type", "test1");

    Assert.assertEquals("Returned value is invalid", CONFIG_VALUE * SERVICE1_VALUE, new TestClass().getValue());

    injector.getConfig().setProperty("provider_type", "test2");

    Assert.assertEquals("Returned value is invalid", CONFIG_VALUE * SERVICE2_VALUE, new TestClass().getValue());
}
项目:cornerstone    文件:AgentMain.java   
public static void agentmain(String agentArgs, Instrumentation instrumentation)
        throws ClassNotFoundException, UnmodifiableClassException,
        InterruptedException {
      inst = instrumentation;
      inst.addTransformer(new CodeTransformer(), true);

}
项目:cornerstone    文件:AgentTool.java   
public synchronized static void removeMetricsClass(String name) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, UnmodifiableClassException {
    Class seleClass = Class.forName(name.replace('/', '.'));
    needRecoverClasses.put(name, needMetricsClasses.remove(name));
    Instrumentation inst = instrumentation();
    inst.retransformClasses(seleClass);
    MetricsCollector.getCollector().removeClassMetrics(name);
}
项目:cornerstone    文件:AgentStatus.java   
public static void restoreClass(ViewASMCodeReq req) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, UnmodifiableClassException, IllegalAccessException, NotFoundException {
    DebugInfo debugInfo = AgentTool.getDebugInfoByClassName(req.className);
    if(debugInfo != null){
        AgentTool.removeDebugClassByTraceId(debugInfo.getTraceId(),true);

    }else {
        AgentTool.removeMetricsClass(req.className);
    }
}
项目:mjolnir    文件:AgentFacadeImpl.java   
@Override
public void rewriteIfPossible(Class<?> declaringClass) throws IllegalStateException {
  Instrumentation instrumentation = checkInstrumentation();

  /*
  byte[] bytecode;
  ClassLoader loader = declaringClass.getClassLoader();
  try(InputStream input = loader.getResourceAsStream(declaringClass.getName().replace('.', '/') + ".class")) {
    if (input == null) {
      throw new IllegalStateException("no input");
    }

    Function<String, Optional<InputStream>> classFileFinder = internalName -> Optional.ofNullable(loader.getResourceAsStream(internalName + ".class"));
    bytecode = Rewriter.rewrite(input, classFileFinder);
  } catch (IOException e) {
    throw new IllegalStateException(e);
  }

  try {
    instrumentation.redefineClasses(new ClassDefinition(declaringClass, bytecode));
  } catch (ClassNotFoundException | UnmodifiableClassException e) {
    throw new IllegalStateException(e);
  }*/

  try {
    instrumentation.retransformClasses(declaringClass);
  } catch (UnmodifiableClassException e) {
    throw new IllegalStateException(e);
  }
}
项目:openjdk-jdk10    文件:RedefineAnnotations.java   
private void testTransformAndVerify()
    throws NoSuchFieldException, NoSuchMethodException {

    Class<TypeAnnotatedTestClass> c = TypeAnnotatedTestClass.class;
    Class<?> myClass = c;

    /*
     * Verify that the expected annotations are where they should be before transform.
     */
    verifyClassTypeAnnotations(c);
    verifyFieldTypeAnnotations(c);
    verifyMethodTypeAnnotations(c);

    try {
        inst.addTransformer(new Transformer(), true);
        inst.retransformClasses(myClass);
    } catch (UnmodifiableClassException e) {
        throw new RuntimeException(e);
    }

    /*
     * Verify that the expected annotations are where they should be after transform.
     * Also verify that before and after are equal.
     */
    verifyClassTypeAnnotations(c);
    verifyFieldTypeAnnotations(c);
    verifyMethodTypeAnnotations(c);
}
项目:openjdk9    文件:RedefineAnnotations.java   
private void testTransformAndVerify()
    throws NoSuchFieldException, NoSuchMethodException {

    Class<TypeAnnotatedTestClass> c = TypeAnnotatedTestClass.class;
    Class<?> myClass = c;

    /*
     * Verify that the expected annotations are where they should be before transform.
     */
    verifyClassTypeAnnotations(c);
    verifyFieldTypeAnnotations(c);
    verifyMethodTypeAnnotations(c);

    try {
        inst.addTransformer(new Transformer(), true);
        inst.retransformClasses(myClass);
    } catch (UnmodifiableClassException e) {
        throw new RuntimeException(e);
    }

    /*
     * Verify that the expected annotations are where they should be after transform.
     * Also verify that before and after are equal.
     */
    verifyClassTypeAnnotations(c);
    verifyFieldTypeAnnotations(c);
    verifyMethodTypeAnnotations(c);
}
项目:lookaside_java-1.8.0-openjdk    文件:RedefineAnnotations.java   
private void testTransformAndVerify()
    throws NoSuchFieldException, NoSuchMethodException {

    Class<TypeAnnotatedTestClass> c = TypeAnnotatedTestClass.class;
    Class<?> myClass = c;

    /*
     * Verify that the expected annotations are where they should be before transform.
     */
    verifyClassTypeAnnotations(c);
    verifyFieldTypeAnnotations(c);
    verifyMethodTypeAnnotations(c);

    try {
        inst.addTransformer(new Transformer(), true);
        inst.retransformClasses(myClass);
    } catch (UnmodifiableClassException e) {
        throw new RuntimeException(e);
    }

    /*
     * Verify that the expected annotations are where they should be after transform.
     * Also verify that before and after are equal.
     */
    verifyClassTypeAnnotations(c);
    verifyFieldTypeAnnotations(c);
    verifyMethodTypeAnnotations(c);
}
项目:tracing-framework    文件:Agent.java   
/** Reload original class definition */
public void reset(Collection<String> classNames) throws UnmodifiableClassException, CannotCompileException {
    Map<String, Collection<DynamicModification>> modifications = Maps.newHashMap();
    for (String className : classNames) {
        modifications.put(className, new HashSet<DynamicModification>());
    }
    install(modifications);
}
项目:tracing-framework    文件:Agent.java   
/** Install the provided modifications, deriving the affected classes from the modifications */
public void install(Collection<? extends DynamicModification> modifications) throws UnmodifiableClassException, CannotCompileException {
    Multimap<String, DynamicModification> modificationsByClass = HashMultimap.create();
    for (DynamicModification modification : modifications) {
        for (String className : modification.affects()) {
            modificationsByClass.put(className, modification);
        }
    }
    install(modificationsByClass.asMap());
}
项目:tracing-framework    文件:Agent.java   
/** Install the provided modifications.  If a class is unknown, its modification is ignored, but if the provided modifications
 * cannot compile then exceptions will be thrown */
public void install(Map<String, Collection<DynamicModification>> modifications, Collection<Throwable> problems) throws CannotCompileException, UnmodifiableClassException {
    Installation i = new Installation();
    i.modifyAll(modifications, problems);
    if (!i.reloadMap.isEmpty()) {
        log.info("Reloading {} classes: {}", modifications.size(), modifications.keySet());
        reload(i.reloadMap);
    }
}
项目:tracing-framework    文件:DynamicManager.java   
public void install() throws CannotCompileException, UnmodifiableClassException {
    if (agent != null) {
        problems.clear();
        agent.install(pending.changes(), problems);
        pending.persist();
    }
}