You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2017/03/17 13:39:07 UTC

svn commit: r1787379 - in /sling/trunk/bundles/extensions/models: impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java integration-tests/src/main/java/org/apache/sling/models/it/ImplementsExtendsTest.java

Author: justin
Date: Fri Mar 17 13:39:06 2017
New Revision: 1787379

URL: http://svn.apache.org/viewvc?rev=1787379&view=rev
Log:
SLING-6658 - always include implementation class in adapterTypes list. Thanks to Dirk Rudolph for the patch!

This closes #206

Modified:
    sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java
    sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/ImplementsExtendsTest.java

Modified: sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java?rev=1787379&r1=1787378&r2=1787379&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java Fri Mar 17 13:39:06 2017
@@ -26,6 +26,7 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.adapter.AdapterFactory;
@@ -143,6 +144,8 @@ public class ModelPackageBundleListener
                 Class<?>[] adapterTypes = annotation.adapters();
                 if (adapterTypes.length == 0) {
                     adapterTypes = new Class<?>[] { implType };
+                } else if (!ArrayUtils.contains(adapterTypes, implType)) {
+                    adapterTypes = (Class<?>[]) ArrayUtils.add(adapterTypes, implType);
                 }
                 // register adapter only if given adapters are valid
                 if (validateAdapterClasses(implType, adapterTypes)) {
@@ -156,7 +159,7 @@ public class ModelPackageBundleListener
                     for (String resourceType : resourceTypes) {
                         if (StringUtils.isNotEmpty(resourceType)) {
                             for (Class<?> adaptable : annotation.adaptables()) {
-                                adapterImplementations.registerModelToResourceType(bundle, resourceType, adaptable, adapterTypes[0]);
+                                adapterImplementations.registerModelToResourceType(bundle, resourceType, adaptable, implType);
                                 ExportServlet.ExportedObjectAccessor accessor = null;
                                 if (adaptable == Resource.class) {
                                     accessor = ExportServlet.RESOURCE_ACCESSOR;

Modified: sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/ImplementsExtendsTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/ImplementsExtendsTest.java?rev=1787379&r1=1787378&r2=1787379&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/ImplementsExtendsTest.java (original)
+++ sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/ImplementsExtendsTest.java Fri Mar 17 13:39:06 2017
@@ -85,12 +85,12 @@ public class ImplementsExtendsTest {
     }
 
     /**
-     * Ensure that the implementation class itself cannot be adapted to if it is not part of the "adapter" property in the annotation.
+     * Ensure that the implementation class itself can be adapted to, even if it is not part of the "adapter" property in the annotation.
      */
     @Test
-    public void testImplementsInterfaceModel_ImplClassNotMapped() {
+    public void testImplementsInterfaceModel_ImplClassImplicitlyMapped() {
         ImplementsInterfacePropertyModel model = adapterManager.getAdapter(resource, ImplementsInterfacePropertyModel.class);
-        assertNull(model);
+        assertNotNull(model);
     }
 
     /**