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);
}