From cc699ec497725c9e682695bdc9afdbb04035c78c Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Tue, 24 Sep 2019 11:41:01 -0400 Subject: [PATCH 1/2] Fix StackOverflowException --- .../ide/vscode/boot/java/data/DomainType.java | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DomainType.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DomainType.java index 1e2b7979c..17081a704 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DomainType.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DomainType.java @@ -16,6 +16,9 @@ import java.util.List; import org.eclipse.jdt.core.dom.IMethodBinding; import org.eclipse.jdt.core.dom.ITypeBinding; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; + /** * @author Martin Lippert */ @@ -24,7 +27,7 @@ public class DomainType { private final String packageName; private final String fullName; private final String simpleName; - private DomainProperty[] properties; + private Supplier properties; public DomainType(String packageName, String fullName, String simpleName) { this.packageName = packageName; @@ -37,24 +40,24 @@ public class DomainType { this.fullName = typeBinding.getQualifiedName(); this.simpleName = typeBinding.getName(); - if (!this.packageName.startsWith("java")) { - IMethodBinding[] methods = typeBinding.getDeclaredMethods(); - if (methods != null && methods.length > 0) { - List properties = new ArrayList<>(); + this.properties = Suppliers.memoize(() -> { + if (!this.packageName.startsWith("java")) { + IMethodBinding[] methods = typeBinding.getDeclaredMethods(); + if (methods != null && methods.length > 0) { + List properties = new ArrayList<>(); - for (IMethodBinding method : methods) { - String methodName = method.getName(); - if (methodName != null && methodName.startsWith("get")) { - String propertyName = methodName.substring(3); - properties.add(new DomainProperty(propertyName, new DomainType(method.getReturnType()))); + for (IMethodBinding method : methods) { + String methodName = method.getName(); + if (methodName != null && methodName.startsWith("get")) { + String propertyName = methodName.substring(3); + properties.add(new DomainProperty(propertyName, new DomainType(method.getReturnType()))); + } } + return (DomainProperty[]) properties.toArray(new DomainProperty[properties.size()]); } - this.properties = (DomainProperty[]) properties.toArray(new DomainProperty[properties.size()]); } - else { - this.properties = new DomainProperty[0]; - } - } + return new DomainProperty[0]; + }); } public String getPackageName() { @@ -70,7 +73,7 @@ public class DomainType { } public DomainProperty[] getProperties() { - return properties; + return properties.get(); } } From 2219d4697d7716460a261d434c3d584ce8019209 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 24 Sep 2019 14:07:54 -0700 Subject: [PATCH 2/2] Remove asm dependency from boot ls Use the repackaged asm bits that are contained withing spring-core instead. --- headless-services/commons/commons-boot-app-cli/pom.xml | 5 ----- .../cli/requestmappings/Boot20DispatcherServletMapping.java | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/headless-services/commons/commons-boot-app-cli/pom.xml b/headless-services/commons/commons-boot-app-cli/pom.xml index 084da2c7b..d94597f70 100644 --- a/headless-services/commons/commons-boot-app-cli/pom.xml +++ b/headless-services/commons/commons-boot-app-cli/pom.xml @@ -39,11 +39,6 @@ org.springframework.ide.vscode ${project.version} - - org.ow2.asm - asm - 6.1.1 - diff --git a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/requestmappings/Boot20DispatcherServletMapping.java b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/requestmappings/Boot20DispatcherServletMapping.java index ba610ee53..02fcf3552 100644 --- a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/requestmappings/Boot20DispatcherServletMapping.java +++ b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/requestmappings/Boot20DispatcherServletMapping.java @@ -18,7 +18,7 @@ import java.util.Set; import org.json.JSONArray; import org.json.JSONObject; -import org.objectweb.asm.Type; +import org.springframework.asm.Type; public class Boot20DispatcherServletMapping implements RequestMapping {