PT #159866173: Add autowired beans for @Bean hover and codelens

This commit is contained in:
BoykoAlex
2018-08-21 16:58:50 -04:00
parent 01a15ec0ba
commit a4734b8029
5 changed files with 289 additions and 27 deletions

View File

@@ -39,6 +39,28 @@ public class BeanInjectedIntoHoverProviderTest {
" void doSomeFoo();\n" +
"}\n"
);
p.createType("hello.IDependency",
"package hello;\n" +
"\n" +
"public interface IDependency {\n" +
"}\n"
);
p.createType("hello.DependencyA",
"package hello;\n" +
"\n" +
"public class DependencyA implements IDependency {\n" +
"}\n"
);
p.createType("hello.DependencyB",
"package hello;\n" +
"\n" +
"public class DependencyB implements IDependency {\n" +
"}\n"
);
};
private BootJavaLanguageServerHarness harness;
@@ -484,4 +506,214 @@ public class BeanInjectedIntoHoverProviderTest {
editor.assertHighlights(/*NONE*/);
editor.assertNoHover("@Bean");
}
@Test
public void beanWithOneWiring() throws Exception {
LiveBeansModel beans = LiveBeansModel.builder()
.add(LiveBean.builder()
.id("fooImplementation")
.type("hello.FooImplementation")
.dependencies("depA")
.build()
)
.add(LiveBean.builder()
.id("depA")
.type("hello.DependencyA")
.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(DependencyA a) {\n" +
" return new FooImplementation();\n" +
" }\n" +
"}"
);
editor.assertHighlights("@Bean");
editor.assertTrimmedHover("@Bean",
"**Injected `fooImplementation` → _not injected anywhere_** \n" +
"**Autowired `fooImplementation` ← `depA`**\n" +
"- Bean: `depA` \n" +
" Type: `hello.DependencyA`\n" +
" \n" +
"Process [PID=111, name=`the-app`]"
);
}
@Test
public void beanWithMultipleWirings() throws Exception {
LiveBeansModel beans = LiveBeansModel.builder()
.add(LiveBean.builder()
.id("fooImplementation")
.type("hello.FooImplementation")
.dependencies("depA", "depB")
.build()
)
.add(LiveBean.builder()
.id("depA")
.type("hello.DependencyA")
.build()
)
.add(LiveBean.builder()
.id("depB")
.type("hello.DependencyB")
.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(DependencyA a, DependencyB b) {\n" +
" return new FooImplementation();\n" +
" }\n" +
"}"
);
editor.assertHighlights("@Bean");
editor.assertTrimmedHover("@Bean",
"**Injected `fooImplementation` → _not injected anywhere_** \n" +
"**Autowired `fooImplementation` ← `depA` `depB`**\n" +
"- Bean: `depA` \n" +
" Type: `hello.DependencyA`\n" +
"- Bean: `depB` \n" +
" Type: `hello.DependencyB`\n" +
" \n" +
"Process [PID=111, name=`the-app`]"
);
}
@Test
public void beanWithCollectionWiring() throws Exception {
LiveBeansModel beans = LiveBeansModel.builder()
.add(LiveBean.builder()
.id("fooImplementation")
.type("hello.FooImplementation")
.dependencies("depA", "depB")
.build()
)
.add(LiveBean.builder()
.id("depA")
.type("hello.DependencyA")
.build()
)
.add(LiveBean.builder()
.id("depB")
.type("hello.DependencyB")
.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(IDependency[] deps) {\n" +
" return new FooImplementation();\n" +
" }\n" +
"}"
);
editor.assertHighlights("@Bean");
editor.assertTrimmedHover("@Bean",
"**Injected `fooImplementation` → _not injected anywhere_** \n" +
"**Autowired `fooImplementation` ← `depA` `depB`**\n" +
"- Bean: `depA` \n" +
" Type: `hello.DependencyA`\n" +
"- Bean: `depB` \n" +
" Type: `hello.DependencyB`\n" +
" \n" +
"Process [PID=111, name=`the-app`]"
);
}
@Test
public void beanWithQualifierWiring() throws Exception {
LiveBeansModel beans = LiveBeansModel.builder()
.add(LiveBean.builder()
.id("fooImplementation")
.type("hello.FooImplementation")
.dependencies("depA", "depB")
.build()
)
.add(LiveBean.builder()
.id("depB")
.type("hello.DependencyB")
.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(@Qualifier(\"depB\") IDependency[] deps) {\n" +
" return new FooImplementation();\n" +
" }\n" +
"}"
);
editor.assertHighlights("@Bean");
editor.assertTrimmedHover("@Bean",
"**Injected `fooImplementation` → _not injected anywhere_** \n" +
"**Autowired `fooImplementation` ← `depB`**\n" +
"- Bean: `depB` \n" +
" Type: `hello.DependencyB`\n" +
" \n" +
"Process [PID=111, name=`the-app`]"
);
}
}