Javassist:如何解决重复的类异常?

问题描述

我使用Javassist试图在方法的主体中插入一行代码。这是对intellij-IDE标签文本颜色的简单修改。尝试这样做时出现以下错误

原因:java.lang.LinkageError:加载程序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 link


Rafael Winterhalter在几年前(link评论了类似的问题。不幸的是,我对Javassist的了解使我无法找到合适的解决方案。

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


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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)