0

使用Javassist我正在尝试将一行代码插入方法的主体。这是对intellij-IDE. 尝试这样做时出现以下错误:

原因:java.lang.LinkageError: loader com.intellij.util.lang.UrlClassLoader @d2cc05a 尝试为 com.intellij.ui.components.labels.LinkLabel 重复类定义。(com.intellij.ui.components.labels.LinkLabel 位于加载器 com.intellij.util.lang.UrlClassLoader @d2cc05a 的未命名模块中,父加载器“平台”)

这意味着我试图修改的类已经被 Java 类加载器加载了(至少我喜欢这样想..)。代码示例如下:

private static void test() {
        try {
            ClassPool cp = ClassPool.getDefault();
            CtClass cc = cp.get("com.intellij.ui.components.labels.LinkLabel");
            CtMethod cm = cc.getDeclaredMethod("getTextColor");
            cm.insertBefore("System.out.println(\"helloworld\");");

            cc.toClass(); // <--- the problem
        } catch (final Throwable e) {
            e.printStackTrace();
        }
    }

作为参考,这里是访问的类:intellij 链接


几年前,Rafael Winterhalter评论了一个类似的问题(链接)。不幸的是,我的知识Javassist限制了我找到​​合适的解决方案。

关于如何解决这个问题的任何想法?


更新:可以在这里找到一个最小的、可重复的示例:github 链接

4

0 回答 0