From c7f171e8662547ef59f8b24043bc613aa659245d Mon Sep 17 00:00:00 2001 From: Conor Gallagher Date: Thu, 3 Sep 2015 13:15:02 +0100 Subject: [PATCH] Adding a unit test and some comments for how to implement multiple interfaces exports. It should be relatively straightforward from here once you figure out what the Peaberry code should look like. --- .../ServiceExportAnnotationProcessor.java | 9 ++++++--- .../PeaberryAnnotationProcessorTest.java | 20 +++++++++++++++++++ .../testdata/ServiceOneAndTwoImpl.java | 10 ++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 src/test/java/org/eclipse/sisu/contrib/peaberry/testdata/ServiceOneAndTwoImpl.java diff --git a/src/main/java/org/eclipse/sisu/contrib/peaberry/ServiceExportAnnotationProcessor.java b/src/main/java/org/eclipse/sisu/contrib/peaberry/ServiceExportAnnotationProcessor.java index 6744614..7a1bb83 100644 --- a/src/main/java/org/eclipse/sisu/contrib/peaberry/ServiceExportAnnotationProcessor.java +++ b/src/main/java/org/eclipse/sisu/contrib/peaberry/ServiceExportAnnotationProcessor.java @@ -83,9 +83,12 @@ private PeaberryData populatePeaberryData(final Element componentClazz) { } catch( MirroredTypesException mte ) { List typeMirrors = mte.getTypeMirrors(); - Element element = ((DeclaredType)typeMirrors.get(0)).asElement(); - peaberryData.serviceInterface = element.toString(); - peaberryData.serviceInterfaceSimpleName = element.getSimpleName().toString(); + // todo - Figure out what the Peaberry code to export a service under multiple interfaces looks like and update the velocity templates + for (TypeMirror typeMirror : typeMirrors) { + Element serviceInterface = ((DeclaredType)typeMirror).asElement(); + peaberryData.serviceInterface = serviceInterface.toString(); + peaberryData.serviceInterfaceSimpleName = serviceInterface.getSimpleName().toString(); + } } TypeElement classElement = (TypeElement) componentClazz; diff --git a/src/test/java/org/eclipse/sisu/contrib/peaberry/PeaberryAnnotationProcessorTest.java b/src/test/java/org/eclipse/sisu/contrib/peaberry/PeaberryAnnotationProcessorTest.java index e73f155..df816b3 100644 --- a/src/test/java/org/eclipse/sisu/contrib/peaberry/PeaberryAnnotationProcessorTest.java +++ b/src/test/java/org/eclipse/sisu/contrib/peaberry/PeaberryAnnotationProcessorTest.java @@ -3,6 +3,7 @@ import static com.google.common.truth.Truth.assert_; import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource; +import org.junit.Ignore; import org.junit.Test; import com.google.testing.compile.JavaFileObjects; @@ -104,4 +105,23 @@ private void testPeaberryImportClassGeneratesCorrectlyForServiceLists() { ); } + @Test + @Ignore + public void testPeaberryExportClassGeneratesCorrectlyForMultipleServiceInterfaces() { + assert_().about(javaSource()) + .that(JavaFileObjects.forResource("ServiceOneAndTwoImpl.java")) + .processedWith( + new ServiceExportAnnotationProcessor(), + new ServiceImportAnnotationProcessor() + ) + .compilesWithoutError() + /* todo - Figure out what the Peaberry code to export a service under multiple interfaces looks like + .and() + + .generatesSources( + JavaFileObjects.forResource("ServiceOnePeaberryExportModule.java"), + JavaFileObjects.forResource("ServiceOnePeaberryServiceExport.java") + )*/; + } + } diff --git a/src/test/java/org/eclipse/sisu/contrib/peaberry/testdata/ServiceOneAndTwoImpl.java b/src/test/java/org/eclipse/sisu/contrib/peaberry/testdata/ServiceOneAndTwoImpl.java new file mode 100644 index 0000000..65e6285 --- /dev/null +++ b/src/test/java/org/eclipse/sisu/contrib/peaberry/testdata/ServiceOneAndTwoImpl.java @@ -0,0 +1,10 @@ +package org.eclipse.sisu.contrib.peaberry.testdata; + +import org.eclipse.sisu.contrib.peaberry.annotations.ServiceExport; + +/** + * Example Service to be exported under multiple interfaces. + */ +@ServiceExport( interfaces = {ServiceOne.class, ServiceTwo.class}) +public class ServiceOneAndTwoImpl implements ServiceOne, ServiceTwo { +}