You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/10/14 19:32:40 UTC

svn commit: r1631828 - in /tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src: main/java/org/apache/openejb/testing/ApplicationComposers.java main/java/org/apache/openejb/testing/Classes.java test/java/org/apache/openejb/testing/AddInnerTest.java

Author: rmannibucau
Date: Tue Oct 14 17:32:40 2014
New Revision: 1631828

URL: http://svn.apache.org/r1631828
Log:
TOMEE-1411 create a finder from inner classes with app composer

Added:
    tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/testing/AddInnerTest.java
Modified:
    tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
    tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/Classes.java

Modified: tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
URL: http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1631828&r1=1631827&r2=1631828&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java (original)
+++ tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java Tue Oct 14 17:32:40 2014
@@ -100,6 +100,7 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -107,6 +108,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -467,8 +469,10 @@ public final class ApplicationComposers 
                 Class<?>[] cdiAlternatives = null;
                 Class<?>[] cdiDecorators = null;
                 boolean cdi = false;
+                boolean innerClassesAsBean = false;
                 if (classesAnnotation != null) {
                     classes = classesAnnotation.value();
+                    innerClassesAsBean = classesAnnotation.innerClassesAsBean();
                     cdiInterceptors = classesAnnotation.cdiInterceptors();
                     cdiDecorators = classesAnnotation.cdiDecorators();
                     cdiAlternatives = classesAnnotation.cdiAlternatives();
@@ -510,6 +514,25 @@ public final class ApplicationComposers 
                             classes = newClasses.toArray(new Class<?>[newClasses.size()]);
                         }
                     }
+                    if (innerClassesAsBean) {
+                        final Collection<Class<?>> inners = new LinkedList<Class<?>>();
+                        for (final Class<?> clazz : testClass.getClasses()) {
+                            final int modifiers = clazz.getModifiers();
+                            try {
+                                if (Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers) && clazz.getConstructor() != null) {
+                                    inners.add(clazz);
+                                }
+                            } catch (final NoSuchMethodException nsme) {
+                                // no-op, skip it
+                            }
+                        }
+
+                        if (!inners.isEmpty()) {
+                            final Collection<Class<?>> newClasses = new ArrayList<Class<?>>(asList(classes));
+                            newClasses.addAll(inners);
+                            classes = newClasses.toArray(new Class<?>[newClasses.size()]);
+                        }
+                    }
 
                     final IAnnotationFinder finder = finderFromClasses(webModule, classes, findFiles(jarsAnnotation));
                     webModule.setFinder(finder);

Modified: tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/Classes.java
URL: http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/Classes.java?rev=1631828&r1=1631827&r2=1631828&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/Classes.java (original)
+++ tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/main/java/org/apache/openejb/testing/Classes.java Tue Oct 14 17:32:40 2014
@@ -34,4 +34,7 @@ public @interface Classes {
     Class<?>[] cdiAlternatives() default {};
 
     boolean cdi() default false;
+
+    // only for WebApp ATM
+    boolean innerClassesAsBean() default false;
 }

Added: tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/testing/AddInnerTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/testing/AddInnerTest.java?rev=1631828&view=auto
==============================================================================
--- tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/testing/AddInnerTest.java (added)
+++ tomee/tomee/branches/tomee-1.7.x/container/openejb-core/src/test/java/org/apache/openejb/testing/AddInnerTest.java Tue Oct 14 17:32:40 2014
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.testing;
+
+import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.inject.Inject;
+
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(ApplicationComposer.class)
+public class AddInnerTest {
+    @Module
+    @Classes(innerClassesAsBean = true, cdi = true)
+    public WebApp web() {
+        return new WebApp();
+    }
+
+    @Inject
+    private Injectable notNull;
+
+    @Test
+    public void run() {
+        assertNotNull(notNull);
+    }
+
+    public static class Injectable {}
+}