From fc5b738e35dc737858abd9b31299b573a6c920c9 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Wed, 21 Nov 2018 11:07:23 -0500 Subject: [PATCH] PT #159866210: Remove injected beans from bean parameter hover --- .../AbstractInjectedIntoHoverProvider.java | 44 ++++++----- .../BeanInjectedIntoHoverProvider.java | 2 +- .../ComponentInjectionsHoverProvider.java | 2 +- .../BeanInjectedIntoHoverProviderTest.java | 74 +++++++++++++++++++ 4 files changed, 100 insertions(+), 22 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/AbstractInjectedIntoHoverProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/AbstractInjectedIntoHoverProvider.java index f272b7e11..29bd1e5d4 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/AbstractInjectedIntoHoverProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/AbstractInjectedIntoHoverProvider.java @@ -83,7 +83,7 @@ public abstract class AbstractInjectedIntoHoverProvider implements HoverProvider LiveBean definedBean = getDefinedBean(annotation); if (definedBean != null) { - Hover hover = assembleHover(project, runningApps, definedBean, annotation); + Hover hover = assembleHover(project, runningApps, definedBean, annotation, true, true); if (hover != null) { Optional nameRange = ASTUtils.nameRange(doc, annotation); if (nameRange.isPresent()) { @@ -134,7 +134,7 @@ public abstract class AbstractInjectedIntoHoverProvider implements HoverProvider return Collections.emptyList(); } - protected Hover assembleHover(IJavaProject project, SpringBootApp[] runningApps, LiveBean definedBean, ASTNode astNode) { + protected Hover assembleHover(IJavaProject project, SpringBootApp[] runningApps, LiveBean definedBean, ASTNode astNode, boolean injected, boolean wired) { StringBuilder hover = new StringBuilder(); for (SpringBootApp app : runningApps) { @@ -142,30 +142,34 @@ public abstract class AbstractInjectedIntoHoverProvider implements HoverProvider List relevantBeans = LiveHoverUtils.findRelevantBeans(app, definedBean); if (!relevantBeans.isEmpty()) { - List injectedBeans = getRelevantInjectedIntoBeans(project, app, definedBean, relevantBeans); - if (hover.length() > 0) { hover.append(" \n \n"); } - if (!injectedBeans.isEmpty()) { - hover.append("**"); - hover.append(LiveHoverUtils.createBeansTitleMarkdown(sourceLinks, project, injectedBeans, BEANS_PREFIX_MARKDOWN, MAX_INLINE_BEANS_STRING_LENGTH, INLINE_BEANS_STRING_SEPARATOR)); - hover.append("**\n"); - hover.append(injectedBeans.stream() - .map(b -> "- " + LiveHoverUtils.showBeanWithResource(sourceLinks, b, " ", project)) - .collect(Collectors.joining("\n"))); - hover.append("\n \n"); - } - List wiredBeans = findWiredBeans(project, app, relevantBeans, astNode); - if (!wiredBeans.isEmpty()) { - AutowiredHoverProvider.createHoverContentForBeans(sourceLinks, project, hover, wiredBeans); + if (injected) { + List injectedBeans = getRelevantInjectedIntoBeans(project, app, definedBean, relevantBeans); + if (!injectedBeans.isEmpty()) { + hover.append("**"); + hover.append(LiveHoverUtils.createBeansTitleMarkdown(sourceLinks, project, injectedBeans, BEANS_PREFIX_MARKDOWN, MAX_INLINE_BEANS_STRING_LENGTH, INLINE_BEANS_STRING_SEPARATOR)); + hover.append("**\n"); + hover.append(injectedBeans.stream() + .map(b -> "- " + LiveHoverUtils.showBeanWithResource(sourceLinks, b, " ", project)) + .collect(Collectors.joining("\n"))); + hover.append("\n \n"); + } } - hover.append("Bean id: `"); - hover.append(definedBean.getId()); - hover.append("` \n"); - hover.append(LiveHoverUtils.niceAppName(app)); + if (wired) { + List wiredBeans = findWiredBeans(project, app, relevantBeans, astNode); + if (!wiredBeans.isEmpty()) { + AutowiredHoverProvider.createHoverContentForBeans(sourceLinks, project, hover, wiredBeans); + } + + hover.append("Bean id: `"); + hover.append(definedBean.getId()); + hover.append("` \n"); + hover.append(LiveHoverUtils.niceAppName(app)); + } } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/BeanInjectedIntoHoverProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/BeanInjectedIntoHoverProvider.java index 6bfece4cd..3ed8e2cf5 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/BeanInjectedIntoHoverProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/BeanInjectedIntoHoverProvider.java @@ -129,7 +129,7 @@ public class BeanInjectedIntoHoverProvider extends AbstractInjectedIntoHoverProv if (beanAnnotation != null) { LiveBean definedBean = getDefinedBean(beanAnnotation); if (definedBean != null) { - Hover hover = assembleHover(project, runningApps, definedBean, parameter); + Hover hover = assembleHover(project, runningApps, definedBean, parameter, false, true); if (hover != null) { hover.setRange(range); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/ComponentInjectionsHoverProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/ComponentInjectionsHoverProvider.java index 55d041e38..54326c8ce 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/ComponentInjectionsHoverProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/ComponentInjectionsHoverProvider.java @@ -131,7 +131,7 @@ public class ComponentInjectionsHoverProvider extends AbstractInjectedIntoHoverP LiveBean definedBean = getDefinedBeanForType(typeDeclaration, null); if (definedBean != null) { - Hover hover = assembleHover(project, runningApps, definedBean, typeDeclaration); + Hover hover = assembleHover(project, runningApps, definedBean, typeDeclaration, true, true); if (hover != null) { SimpleName name = typeDeclaration.getName(); try { diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/livehover/test/BeanInjectedIntoHoverProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/livehover/test/BeanInjectedIntoHoverProviderTest.java index 15bbfb07c..6eecae621 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/livehover/test/BeanInjectedIntoHoverProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/livehover/test/BeanInjectedIntoHoverProviderTest.java @@ -238,6 +238,80 @@ public class BeanInjectedIntoHoverProviderTest { ); } + @Test + public void beanWithOneInjectionAndWiring() throws Exception { + LiveBeansModel beans = LiveBeansModel.builder() + .add(LiveBean.builder() + .id("fooImplementation") + .type("hello.FooImplementation") + .dependencies("message") + .build() + ) + .add(LiveBean.builder() + .id("myController") + .type("hello.MyController") + .dependencies("fooImplementation") + .build() + ) + .add(LiveBean.builder() + .id("message") + .type("java.lang.String") + .build() + ) + .add(LiveBean.builder() + .id("irrelevantBean") + .type("com.example.IrrelevantBean") + .dependencies("myController") + .build() + ) + .build(); + mockAppProvider.builder() + .isSpringBootApp(true) + .processId("111") + .processName("the-app") + .beans(beans) + .build(); + + Editor editor = harness.newEditor(LanguageId.JAVA, + "package hello;\n" + + "\n" + + "import org.springframework.context.annotation.Bean;\n" + + "import org.springframework.context.annotation.Configuration;\n" + + "import org.springframework.context.annotation.Profile;\n" + + "\n" + + "@Configuration\n" + + "public class LocalConfig {\n" + + " \n" + + " @Bean(\"fooImplementation\")\n" + + " Foo someFoo(String msg) {\n" + + " return new FooImplementation();\n" + + " }\n" + + "}" + ); + // !!! 2 highlights over @Bean. 1 for injected beans CodeLens, 1 for wired beans CodeLens + editor.assertHighlights("@Bean", "@Bean", "msg"); + editor.assertTrimmedHover("@Bean", + "**→ `MyController`**\n" + + "- Bean: `myController` \n" + + " Type: `hello.MyController`\n" + + " \n" + + "**← `String`**\n" + + "- Bean: `message` \n" + + " Type: `java.lang.String`\n" + + " \n" + + "Bean id: `fooImplementation` \n" + + "Process [PID=111, name=`the-app`]" + ); + editor.assertTrimmedHover("msg", + "**← `String`**\n" + + "- Bean: `message` \n" + + " Type: `java.lang.String`\n" + + " \n" + + "Bean id: `fooImplementation` \n" + + "Process [PID=111, name=`the-app`]" + ); + } + @Test public void beanFromInnerClassWithOneInjection() throws Exception { LiveBeansModel beans = LiveBeansModel.builder()