From 6f1e80944c4462e6fb6e2bf0ade21c0fbdec19de Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 21 Nov 2017 14:20:05 -0800 Subject: [PATCH] Fix PT-153072942 Ignore `$$EnhancerBySpringCGLIB$$` in determining whether a live bean corresponds to a bean defined in source-code. --- .../boot/java/livehover/LiveHoverUtils.java | 2 +- .../ComponentInjectionsHoverProviderTest.java | 38 +++++++++++++++++++ .../boot/app/cli/livebean/LiveBean.java | 11 ++++++ .../boot/app/cli/livebean/LiveBeansModel.java | 5 --- 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/LiveHoverUtils.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/LiveHoverUtils.java index f0f03e335..7a681a967 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/LiveHoverUtils.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/LiveHoverUtils.java @@ -71,7 +71,7 @@ public class LiveHoverUtils { Stream relevantBeans = beansModel.getBeansOfName(definedBean.getId()).stream(); String type = definedBean.getType(); if (type != null) { - relevantBeans = relevantBeans.filter(bean -> type.equals(bean.getType())); + relevantBeans = relevantBeans.filter(bean -> type.equals(bean.getType(true))); } return relevantBeans; } diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/livehover/test/ComponentInjectionsHoverProviderTest.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/livehover/test/ComponentInjectionsHoverProviderTest.java index dc278a496..04367e536 100644 --- a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/livehover/test/ComponentInjectionsHoverProviderTest.java +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/livehover/test/ComponentInjectionsHoverProviderTest.java @@ -585,4 +585,42 @@ public class ComponentInjectionsHoverProviderTest { ); } + @Test public void bug_153072942_SpringBootApplication__withCGLib_is_a_Component() throws Exception { + LiveBeansModel beans = LiveBeansModel.builder() + .add(LiveBean.builder() + .id("demoApplication") + .type("com.example.DemoApplication$$EnhancerBySpringCGLIB$$f378241f") + .build() + ) + .build(); + mockAppProvider.builder() + .isSpringBootApp(true) + .processId("111") + .processName("the-app") + .beans(beans) + .build(); + + Editor editor = harness.newEditor(LanguageId.JAVA, + "package com.example;\n" + + "\n" + + "import org.springframework.boot.SpringApplication;\n" + + "import org.springframework.boot.autoconfigure.SpringBootApplication;\n" + + "import org.springframework.context.annotation.Bean;\n" + + "import org.springframework.web.client.RestTemplate;\n" + + "\n" + + "@SpringBootApplication\n" + + "public class DemoApplication {\n" + + " \n" + + "\n" + + " public static void main(String[] args) {\n" + + " SpringApplication.run(DemoApplication.class, args);\n" + + " }\n" + + "}\n" + ); + editor.assertHighlights("@SpringBootApplication"); + editor.assertHoverContains("@SpringBootApplication", + "**Injection report for Bean [id: demoApplication, type: `com.example.DemoApplication`]**" + ); + } + } diff --git a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/livebean/LiveBean.java b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/livebean/LiveBean.java index 9600b3778..5c0b0722f 100644 --- a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/livebean/LiveBean.java +++ b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/livebean/LiveBean.java @@ -93,6 +93,17 @@ public class LiveBean { return type; } + public String getType(boolean stripCGLib) { + String type = this.type; + if (stripCGLib) { + int chop = type.indexOf("$$EnhancerBySpringCGLIB$$"); + if (chop>=0) { + type = type.substring(0, chop); + } + } + return type; + } + public String getResource() { return resource; } diff --git a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/livebean/LiveBeansModel.java b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/livebean/LiveBeansModel.java index 74f8e3fe5..50e069b33 100644 --- a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/livebean/LiveBeansModel.java +++ b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/livebean/LiveBeansModel.java @@ -11,9 +11,7 @@ package org.springframework.ide.vscode.commons.boot.app.cli.livebean; import java.util.ArrayList; -import java.util.Collection; import java.util.List; -import java.util.stream.Stream; import org.json.JSONArray; import org.json.JSONObject; @@ -21,9 +19,6 @@ import org.springframework.ide.vscode.commons.util.Log; import org.springframework.ide.vscode.commons.util.StringUtil; import com.google.common.collect.ImmutableListMultimap; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; -import com.google.common.collect.MultimapBuilder; /** * @author Martin Lippert