Repository: deltaspike Updated Branches: refs/heads/master 1af137d84 -> 1c3a16be1
DELTASPIKE-1317 workaround for getGenericParameter returning wrong amount of params This happens in rare situations. Still not sure whether this is by spec, whether it is a JVM bug or whether it is simply an undefined edge case. We need to investigate further. At least ne now don't blow up anymore Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/b5f94113 Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/b5f94113 Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/b5f94113 Branch: refs/heads/master Commit: b5f94113b15716e7fed81ea643f3948040079422 Parents: 1af137d Author: Mark Struberg <strub...@apache.org> Authored: Fri Feb 23 10:48:20 2018 +0100 Committer: Mark Struberg <strub...@apache.org> Committed: Fri Feb 23 10:48:20 2018 +0100 ---------------------------------------------------------------------- .../builder/AnnotatedConstructorImpl.java | 4 +- .../api/metadata/AnnotatedTypeBuilderTest.java | 42 ++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b5f94113/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/metadata/builder/AnnotatedConstructorImpl.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/metadata/builder/AnnotatedConstructorImpl.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/metadata/builder/AnnotatedConstructorImpl.java index 2683afd..310400c 100644 --- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/metadata/builder/AnnotatedConstructorImpl.java +++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/metadata/builder/AnnotatedConstructorImpl.java @@ -51,9 +51,9 @@ class AnnotatedConstructorImpl<X> extends AnnotatedCallableImpl<X, Constructor<X // length, this is a hack to fix this. // TODO: investigate this behavior further, on different JVM's and // compilers - if (genericTypes.length + 1 == constructor.getParameterTypes().length) + if (genericTypes.length < constructor.getParameterTypes().length) { - genericTypes = new Type[constructor.getGenericParameterTypes().length + 1]; + genericTypes = new Type[constructor.getParameterTypes().length]; genericTypes[0] = constructor.getParameterTypes()[0]; for (int i = 0; i < constructor.getGenericParameterTypes().length; ++i) { http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b5f94113/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/metadata/AnnotatedTypeBuilderTest.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/metadata/AnnotatedTypeBuilderTest.java b/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/metadata/AnnotatedTypeBuilderTest.java index 2398dff..fcef0da 100644 --- a/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/metadata/AnnotatedTypeBuilderTest.java +++ b/deltaspike/core/api/src/test/java/org/apache/deltaspike/test/api/metadata/AnnotatedTypeBuilderTest.java @@ -36,6 +36,7 @@ import javax.enterprise.inject.spi.AnnotatedConstructor; import javax.enterprise.inject.spi.AnnotatedMethod; import javax.enterprise.inject.spi.AnnotatedParameter; import javax.enterprise.inject.spi.AnnotatedType; +import javax.enterprise.util.AnnotationLiteral; import javax.inject.Named; import java.util.List; import java.util.Set; @@ -160,4 +161,45 @@ public class AnnotatedTypeBuilderTest assertThat(smallAnnotatedType.getConstructors().size(), is(0)); assertThat(smallAnnotatedType.getFields().size(), is(0)); } + + + @Test + public void testCtWithMultipleParams() + { + final AnnotatedTypeBuilder<TypeWithParamsInCt> builder = new AnnotatedTypeBuilder<TypeWithParamsInCt>(); + builder.readFromType(TypeWithParamsInCt.class); + builder.addToClass(new AnnotationLiteral<Default>() {}); + + AnnotatedType<TypeWithParamsInCt> newAt = builder.create(); + assertNotNull(newAt); + } + + @Test + public void testEnumWithParam() + { + final AnnotatedTypeBuilder<EnumWithParams> builder = new AnnotatedTypeBuilder<EnumWithParams>(); + builder.readFromType(EnumWithParams.class); + builder.addToClass(new AnnotationLiteral<Default>() {}); + + AnnotatedType<EnumWithParams> newAt = builder.create(); + assertNotNull(newAt); + } + + + public static class TypeWithParamsInCt + { + public TypeWithParamsInCt(String a, int b, String c) + { + // all fine + } + } + + public enum EnumWithParams + { + VALUE("A"); + + EnumWithParams(String val) { + // all fine + } + } }