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
+        }
+    }
 }

Reply via email to