From 1383fff41d01a7a65cebe87b920b758bd14accce Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Fri, 6 Jul 2018 15:24:10 -0700 Subject: [PATCH] Treat @Inject as synonymous to @Autowired --- .../ide/vscode/boot/java/Annotations.java | 3 +- .../BootJavaLanguageServerComponents.java | 1 + .../autowired/AutowiredHoverProvider.java | 17 +++--- .../ComponentInjectionsHoverProvider.java | 9 ++-- .../test/AutowiredHoverProviderTest.java | 52 ++++++++++++++++++- .../empty-boot-15-web-app/pom.xml | 11 ++-- 6 files changed, 76 insertions(+), 17 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/Annotations.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/Annotations.java index a2d03f07a..9cbe5b078 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/Annotations.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/Annotations.java @@ -19,11 +19,12 @@ public class Annotations { public static final String BEAN = "org.springframework.context.annotation.Bean"; public static final String PROFILE = "org.springframework.context.annotation.Profile"; public static final String CONDITIONAL = "org.springframework.context.annotation.Conditional"; - + public static final String COMPONENT = "org.springframework.stereotype.Component"; public static final String REPOSITORY = "org.springframework.stereotype.Repository"; public static final String AUTOWIRED = "org.springframework.beans.factory.annotation.Autowired"; + public static final String INJECT = "javax.inject.Inject"; public static final String SPRING_REQUEST_MAPPING = "org.springframework.web.bind.annotation.RequestMapping"; public static final String SPRING_GET_MAPPING = "org.springframework.web.bind.annotation.GetMapping"; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java index fa4dbc74c..fb1ba06a9 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java @@ -301,6 +301,7 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent providers.put(Annotations.PROFILE, new ActiveProfilesProvider()); providers.put(Annotations.AUTOWIRED, new AutowiredHoverProvider(this)); + providers.put(Annotations.INJECT, new AutowiredHoverProvider(this)); providers.put(Annotations.COMPONENT, new ComponentInjectionsHoverProvider(this)); providers.put(Annotations.BEAN, new BeanInjectedIntoHoverProvider(this)); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/autowired/AutowiredHoverProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/autowired/AutowiredHoverProvider.java index 1835ba336..418bce5b6 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/autowired/AutowiredHoverProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/autowired/AutowiredHoverProvider.java @@ -21,6 +21,8 @@ import org.eclipse.jdt.core.dom.TypeDeclaration; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.ide.vscode.boot.java.Annotations; import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents; import org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchies; @@ -32,8 +34,6 @@ import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp; import org.springframework.ide.vscode.commons.boot.app.cli.livebean.LiveBean; import org.springframework.ide.vscode.commons.boot.app.cli.livebean.LiveBeansModel; import org.springframework.ide.vscode.commons.java.IJavaProject; -import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; -import org.springframework.ide.vscode.commons.util.Log; import org.springframework.ide.vscode.commons.util.StringUtil; import org.springframework.ide.vscode.commons.util.text.TextDocument; @@ -43,9 +43,11 @@ import com.google.common.collect.ImmutableList; * @author Martin Lippert */ public class AutowiredHoverProvider implements HoverProvider { - + + final static Logger log = LoggerFactory.getLogger(AutowiredHoverProvider.class); + private BootJavaLanguageServerComponents server; - + public AutowiredHoverProvider(BootJavaLanguageServerComponents server) { this.server = server; } @@ -70,13 +72,13 @@ public class AutowiredHoverProvider implements HoverProvider { } } catch (Exception e) { - Log.log(e); + log.error("", e); } } } } catch (Exception e) { - Log.log(e); + log.error("", e); } return null; @@ -178,8 +180,7 @@ public class AutowiredHoverProvider implements HoverProvider { } @Override - public Collection getLiveHoverHints(TypeDeclaration typeDeclaration, TextDocument doc, - SpringBootApp[] runningApps) { + public Collection getLiveHoverHints(TypeDeclaration typeDeclaration, TextDocument doc, SpringBootApp[] runningApps) { return null; } 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 6dab248b3..db255328b 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 @@ -80,8 +80,9 @@ public class ComponentInjectionsHoverProvider extends AbstractInjectedIntoHoverP for (Object modifier : modifiers) { if (modifier instanceof MarkerAnnotation) { ITypeBinding typeBinding = ((MarkerAnnotation) modifier).resolveTypeBinding(); - if (typeBinding != null && typeBinding.getQualifiedName().equals(Annotations.AUTOWIRED)) { - return true; + if (typeBinding != null) { + String fqName = typeBinding.getQualifiedName(); + return Annotations.AUTOWIRED.equals(fqName) || Annotations.INJECT.equals(fqName); } } } @@ -198,7 +199,7 @@ public class ComponentInjectionsHoverProvider extends AbstractInjectedIntoHoverP } return false; } - + private boolean isComponentAnnotation(ITypeBinding type) { Set transitiveSuperAnnotations = AnnotationHierarchies.getTransitiveSuperAnnotations(type); for (String annotationType : transitiveSuperAnnotations) { @@ -206,7 +207,7 @@ public class ComponentInjectionsHoverProvider extends AbstractInjectedIntoHoverP return true; } } - + return false; } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/autowired/test/AutowiredHoverProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/autowired/test/AutowiredHoverProviderTest.java index 636bd0730..7ce68543f 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/autowired/test/AutowiredHoverProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/autowired/test/AutowiredHoverProviderTest.java @@ -55,7 +55,6 @@ public class AutowiredHoverProviderTest { "public class DependencyB {\n" + "}\n" ); - }; private BootJavaLanguageServerHarness harness; @@ -78,6 +77,57 @@ public class AutowiredHoverProviderTest { harness.intialize(null); } + @Test + public void javaxInjectAnnotationHover() throws Exception { + LiveBeansModel beans = LiveBeansModel.builder() + .add(LiveBean.builder() + .id("autowiredClass") + .type("com.example.AutowiredClass") + .dependencies("dependencyA") + .build() + ) + .add(LiveBean.builder() + .id("dependencyA") + .type("com.example.DependencyA") + .fileResource(harness.getOutputFolder() + Paths.get("/com/example/DependencyA.class").toString()) + .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 javax.inject.Inject;\n" + + "import org.springframework.stereotype.Component;\n" + + "\n" + + "@Component\n" + + "public class AutowiredClass {\n" + + "\n" + + " @Inject\n" + + " private DependencyA depA;\n" + + "}\n" + ); + + editor.assertHighlights("@Component", "@Inject"); + editor.assertTrimmedHover("@Inject", + "**Injection report for Bean [id: autowiredClass, type: `com.example.AutowiredClass`]**\n" + + "\n" + + "Process [PID=111, name=`the-app`]:\n" + + "\n" + + "Bean [id: autowiredClass, type: `com.example.AutowiredClass`] got autowired with:\n" + + "\n" + + "- Bean: dependencyA \n" + + " Type: `com.example.DependencyA` \n" + + " Resource: `" + Paths.get("com/example/DependencyA.class") + "`" + ); + } + @Test public void componentWithAutomaticallyWiredConstructorInjections() throws Exception { LiveBeansModel beans = LiveBeansModel.builder() diff --git a/headless-services/spring-boot-language-server/src/test/resources/test-projects/empty-boot-15-web-app/pom.xml b/headless-services/spring-boot-language-server/src/test/resources/test-projects/empty-boot-15-web-app/pom.xml index b060b9f7e..a14261168 100644 --- a/headless-services/spring-boot-language-server/src/test/resources/test-projects/empty-boot-15-web-app/pom.xml +++ b/headless-services/spring-boot-language-server/src/test/resources/test-projects/empty-boot-15-web-app/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 @@ -15,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent 1.5.8.RELEASE - + @@ -33,7 +34,11 @@ org.springframework.boot spring-boot-starter-web - + + javax.inject + javax.inject + 1 + org.springframework.boot spring-boot-starter-test