在我的插件中添加特定代码路径以支持多个 IntelliJ 版本
Add a specific code path in my plugin to support multiple IntelliJ version
IntelliJ 15 在 SimpleJavaParameters class 中引入了一个名为 setUseClasspathJar 的新方法。
如果用户是 运行 IntelliJ 15,我希望我的插件设置调用此方法。如果用户运行 IntelliJ 14.1,则该方法甚至不可用(无法编译)。
我该如何编写我的插件,以便当有这样的签名更改时,它会根据版本做不同的事情?
您只能在 IntelliJ IDEA 15 上编译并使用 if 语句保护调用。例如:
final BuildNumber build = ApplicationInfo.getInstance().getBuild();
if (build.getBaselineVersion() >= 143) {
// call setUseClasspathJar() here
}
基于 IntelliJ 平台的不同产品的内部版本号范围可用 here。
另一种选择是使用反射来调用该方法(如果可用)。这要冗长得多,但是 com.intellij.util.ReflectionUtil
可以使它变得更容易一些:
final Method method =
ReflectionUtil.getDeclaredMethod(SimpleJavaParameters.class,
"setUseClasspathJar", boolean.class);
if (method != null) {
try {
method.invoke(parameters, true);
}
catch (IllegalAccessException e1) {
throw new RuntimeException(e1);
}
catch (InvocationTargetException e1) {
throw new RuntimeException(e1);
}
}
IntelliJ 15 在 SimpleJavaParameters class 中引入了一个名为 setUseClasspathJar 的新方法。
如果用户是 运行 IntelliJ 15,我希望我的插件设置调用此方法。如果用户运行 IntelliJ 14.1,则该方法甚至不可用(无法编译)。
我该如何编写我的插件,以便当有这样的签名更改时,它会根据版本做不同的事情?
您只能在 IntelliJ IDEA 15 上编译并使用 if 语句保护调用。例如:
final BuildNumber build = ApplicationInfo.getInstance().getBuild();
if (build.getBaselineVersion() >= 143) {
// call setUseClasspathJar() here
}
基于 IntelliJ 平台的不同产品的内部版本号范围可用 here。
另一种选择是使用反射来调用该方法(如果可用)。这要冗长得多,但是 com.intellij.util.ReflectionUtil
可以使它变得更容易一些:
final Method method =
ReflectionUtil.getDeclaredMethod(SimpleJavaParameters.class,
"setUseClasspathJar", boolean.class);
if (method != null) {
try {
method.invoke(parameters, true);
}
catch (IllegalAccessException e1) {
throw new RuntimeException(e1);
}
catch (InvocationTargetException e1) {
throw new RuntimeException(e1);
}
}