问题描述
我使用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 (将#修改为@)