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 2016/11/30 17:47:13 UTC

svn commit: r1772093 - in /sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl: ModelAdapterFactory.java injectors/BindingsInjector.java injectors/ValueMapInjector.java injectors/ValuePreparer.java

Author: justin
Date: Wed Nov 30 17:47:13 2016
New Revision: 1772093

URL: http://svn.apache.org/viewvc?rev=1772093&view=rev
Log:
SLING-6318 - improve optimization by avoiding null return values from prepareValues

Modified:
    sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java
    sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/BindingsInjector.java
    sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValueMapInjector.java
    sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValuePreparer.java

Modified: sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java?rev=1772093&r1=1772092&r2=1772093&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java Wed Nov 30 17:47:13 2016
@@ -458,18 +458,10 @@ public class ModelAdapterFactory impleme
                         final ValuePreparer preparer = (ValuePreparer) injector;
                         Object fromMap = preparedValues.get(preparer);
                         if (fromMap != null) {
-                            if (ObjectUtils.NULL.equals(fromMap)) {
-                                preparedValue = null;
-                            } else {
-                                preparedValue = fromMap;
-                            }
+                            preparedValue = fromMap;
                         } else {
                             preparedValue = preparer.prepareValue(injectionAdaptable);
-                            if (preparedValue == null) {
-                                preparedValues.put(preparer, ObjectUtils.NULL);
-                            } else {
-                                preparedValues.put(preparer, preparedValue);
-                            }
+                            preparedValues.put(preparer, preparedValue);
                         }
                     }
 

Modified: sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/BindingsInjector.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/BindingsInjector.java?rev=1772093&r1=1772092&r2=1772093&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/BindingsInjector.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/BindingsInjector.java Wed Nov 30 17:47:13 2016
@@ -22,6 +22,7 @@ import java.lang.reflect.Type;
 import javax.annotation.Nonnull;
 import javax.servlet.ServletRequest;
 
+import org.apache.commons.lang.ObjectUtils;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
@@ -51,6 +52,9 @@ public class BindingsInjector implements
 
     public Object getValue(@Nonnull Object adaptable, String name, @Nonnull Type type, @Nonnull AnnotatedElement element,
             @Nonnull DisposalCallbackRegistry callbackRegistry) {
+        if (adaptable == ObjectUtils.NULL) {
+            return null;
+        }
         SlingBindings bindings = getBindings(adaptable);
         if (bindings == null) {
             return null;
@@ -86,7 +90,8 @@ public class BindingsInjector implements
 
     @Override
     public Object prepareValue(Object adaptable) {
-        return getBindings(adaptable);
+        Object prepared = getBindings(adaptable);
+        return prepared != null ? prepared : ObjectUtils.NULL;
     }
 
     private static class ScriptVariableAnnotationProcessor extends AbstractInjectAnnotationProcessor2 {

Modified: sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValueMapInjector.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValueMapInjector.java?rev=1772093&r1=1772092&r2=1772093&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValueMapInjector.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValueMapInjector.java Wed Nov 30 17:47:13 2016
@@ -27,6 +27,7 @@ import java.util.List;
 import javax.annotation.Nonnull;
 
 import org.apache.commons.lang.ClassUtils;
+import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
@@ -59,6 +60,9 @@ public class ValueMapInjector extends Ab
 
     public Object getValue(@Nonnull Object adaptable, String name, @Nonnull Type type, @Nonnull AnnotatedElement element,
             @Nonnull DisposalCallbackRegistry callbackRegistry) {
+        if (adaptable == ObjectUtils.NULL) {
+            return null;
+        }
         ValueMap map = getValueMap(adaptable);
         if (map == null) {
             return null;
@@ -135,7 +139,8 @@ public class ValueMapInjector extends Ab
 
     @Override
     public Object prepareValue(final Object adaptable) {
-        return getValueMap(adaptable);
+        Object prepared = getValueMap(adaptable);
+        return prepared != null ? prepared : ObjectUtils.NULL;
     }
 
     @Override

Modified: sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValuePreparer.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValuePreparer.java?rev=1772093&r1=1772092&r2=1772093&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValuePreparer.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ValuePreparer.java Wed Nov 30 17:47:13 2016
@@ -19,7 +19,18 @@ package org.apache.sling.models.impl.inj
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
+/**
+ * Optimization interface for Injectors which wish to avoid repeated accessing of some object
+ * based on the adaptable. If an Injector implements this interface, it must also be prepared
+ * to handle the case where ObjectUtils.NULL is passed as the adaptable.
+ */
 public interface ValuePreparer {
 
-    @CheckForNull Object prepareValue(@Nonnull Object adaptable);
+    /**
+     * Prepare a value from the adaptable.
+     *
+     * @param adaptable the adaptable
+     * @return a prepared value or ObjectUtils.NULL if a value is not preparable
+     */
+    @Nonnull Object prepareValue(@Nonnull Object adaptable);
 }