SLING-7404 - ObjectModel and similar classes need consistent null checks
(closes #1)
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java
index 3f491e6..cfe9cca 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java
@@ -26,6 +26,9 @@
@Override
protected Object getProperty(Object target, Object propertyObj) {
+ if (target == null || propertyObj == null) {
+ return null;
+ }
Object result = super.getProperty(target, propertyObj);
if (result == null && target instanceof Adaptable) {
ValueMap valueMap = ((Adaptable) target).adaptTo(ValueMap.class);
diff --git a/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java b/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java
index 8987d60..e396c2a 100644
--- a/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java
+++ b/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java
@@ -36,21 +36,30 @@
private SlingRuntimeObjectModel slingRuntimeObjectModel = new SlingRuntimeObjectModel();
@Test
- public void getPropertyFromAdaptableWithField() throws Exception {
+ public void getPropertyFromAdaptableWithField() {
assertEquals("Expected public fields to have priority over ValueMap adaptable's properties.", FieldTestMockAdaptable.test,
slingRuntimeObjectModel.getProperty(new FieldTestMockAdaptable(), "test"));
}
@Test
- public void getPropertyFromAdaptableWithMethod() throws Exception {
+ public void getPropertyFromAdaptableWithMethod() {
assertEquals("Expected public methods to have priority over ValueMap adaptable's properties.", METHOD_VALUE,
slingRuntimeObjectModel.getProperty(new MethodTestMockAdaptable(), "test"));
- }@Test
- public void getPropertyFromAdaptable() throws Exception {
+ }
+
+ @Test
+ public void getPropertyFromAdaptable() {
assertEquals("Expected to solve property from ValueMap returned by an adaptable.", VALUE_MAP_VALUE,
slingRuntimeObjectModel.getProperty(new AdaptableTestMock(), "test"));
}
+ @Test
+ public void nullChecks() {
+ assertNull(slingRuntimeObjectModel.getProperty(null, null));
+ assertNull(slingRuntimeObjectModel.getProperty(this, null));
+ assertNull(slingRuntimeObjectModel.getProperty(this, ""));
+ }
+
private abstract class MockAdaptable implements Adaptable {
ValueMap getValueMap() {