diff --git a/spring-javaformat-intellij/spring-javaformat-intellij-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatComponent.java b/spring-javaformat-intellij/spring-javaformat-intellij-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatComponent.java
index fc9952ab..6d9dc4a9 100644
--- a/spring-javaformat-intellij/spring-javaformat-intellij-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatComponent.java
+++ b/spring-javaformat-intellij/spring-javaformat-intellij-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatComponent.java
@@ -16,6 +16,7 @@
package io.spring.format.formatter.intellij;
+import java.lang.reflect.Method;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@@ -26,10 +27,11 @@
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.extensions.PluginDescriptor;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.project.Project;
import com.intellij.psi.codeStyle.CodeStyleManager;
-import com.intellij.serviceContainer.PlatformComponentManagerImpl;
+import com.intellij.serviceContainer.ComponentManagerImpl;
import org.picocontainer.MutablePicoContainer;
import io.spring.format.formatter.intellij.codestyle.SpringCodeStyleManager;
@@ -112,9 +114,14 @@ private void update(State state) {
private void registerCodeStyleManager(CodeStyleManager manager) {
if (ApplicationInfo.getInstance().getBuild().getBaselineVersion() >= 193) {
- PlatformComponentManagerImpl platformComponentManager = (PlatformComponentManagerImpl) this.project;
IdeaPluginDescriptor plugin = PluginManagerCore.getPlugin(PluginId.getId("spring-javaformat"));
- platformComponentManager.registerServiceInstance(CodeStyleManager.class, manager, plugin);
+ try {
+ ((ComponentManagerImpl) this.project).registerServiceInstance(CodeStyleManager.class, manager, plugin);
+ }
+ catch (NoSuchMethodError ex) {
+ Method method = findRegisterServiceInstanceMethod(this.project.getClass());
+ invokeRegisterServiceInstanceMethod(manager, plugin, method);
+ }
}
else {
MutablePicoContainer container = (MutablePicoContainer) this.project.getPicoContainer();
@@ -123,4 +130,32 @@ private void registerCodeStyleManager(CodeStyleManager manager) {
}
}
+ private Method findRegisterServiceInstanceMethod(Class> projectClass) {
+ if (projectClass != null) {
+ Method[] methods = projectClass.getDeclaredMethods();
+ for (Method method : methods) {
+ if (method.getName().equals("registerServiceInstance") && method.getParameterCount() == 3) {
+ if (PluginDescriptor.class.isAssignableFrom(method.getParameterTypes()[2])) {
+ return method;
+ }
+ }
+ }
+ return findRegisterServiceInstanceMethod(projectClass.getSuperclass());
+ }
+ return null;
+ }
+
+ private void invokeRegisterServiceInstanceMethod(CodeStyleManager manager, IdeaPluginDescriptor plugin,
+ Method method) {
+ if (method == null) {
+ throw new IllegalStateException("Unsupported IntelliJ version");
+ }
+ method.setAccessible(true);
+ try {
+ method.invoke(this.project, manager, plugin);
+ }
+ catch (Exception ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
}
diff --git a/spring-javaformat-intellij/spring-javaformat-intellij-runtime/pom.xml b/spring-javaformat-intellij/spring-javaformat-intellij-runtime/pom.xml
index f82ab1c4..81d93047 100644
--- a/spring-javaformat-intellij/spring-javaformat-intellij-runtime/pom.xml
+++ b/spring-javaformat-intellij/spring-javaformat-intellij-runtime/pom.xml
@@ -13,9 +13,9 @@
Spring JavaFormat IntelliJ Runtime
${basedir}/../..
- https://download.jetbrains.com/idea/ideaIC-2019.3.1.tar.gz
- https://github.com/JetBrains/intellij-community/archive/idea/193.5662.53.zip
- idea-IC-193.5662.53
+ https://download.jetbrains.com/idea/ideaIC-2020.1.tar.gz
+ https://github.com/JetBrains/intellij-community/archive/idea/201.6668.121.zip
+ idea-IC-201.6668.121