Author: radu Date: Wed Sep 13 12:22:30 2017 New Revision: 1808232 URL: http://svn.apache.org/viewvc?rev=1808232&view=rev Log: SLING-7123 - ObjectModel does not correctly analyse all super types when solving methods
* ignored NoSuchMethodExceptions thrown by #getClassMethod so that all super types can be analysed when looking for public methods Modified: sling/trunk/bundles/scripting/sightly/compiler/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java sling/trunk/bundles/scripting/sightly/compiler/src/test/java/org/apache/sling/scripting/sightly/util/ObjectModelTest.java Modified: sling/trunk/bundles/scripting/sightly/compiler/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/compiler/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java?rev=1808232&r1=1808231&r2=1808232&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/compiler/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java (original) +++ sling/trunk/bundles/scripting/sightly/compiler/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java Wed Sep 13 12:22:30 2017 @@ -417,7 +417,7 @@ public final class ObjectModel { return declaringClass != Object.class || TO_STRING_METHOD.equals(method.getName()); } - private static Method extractMethodInheritanceChain(Class type, Method method) throws NoSuchMethodException { + private static Method extractMethodInheritanceChain(Class type, Method method) { if (method == null || Modifier.isPublic(type.getModifiers())) { return method; } @@ -432,11 +432,15 @@ public final class ObjectModel { return getClassMethod(type.getSuperclass(), method); } - private static Method getClassMethod(Class<?> type, Method method) throws NoSuchMethodException { - Method parentMethod = type.getMethod(method.getName(), method.getParameterTypes()); - parentMethod = extractMethodInheritanceChain(parentMethod.getDeclaringClass(), parentMethod); - if (parentMethod != null) { - return parentMethod; + private static Method getClassMethod(Class<?> type, Method method) { + try { + Method parentMethod = type.getMethod(method.getName(), method.getParameterTypes()); + parentMethod = extractMethodInheritanceChain(parentMethod.getDeclaringClass(), parentMethod); + if (parentMethod != null) { + return parentMethod; + } + } catch (NoSuchMethodException e) { + // ignore - maybe we don't have access to that method or the method does not belong to the current type } return null; } Modified: sling/trunk/bundles/scripting/sightly/compiler/src/test/java/org/apache/sling/scripting/sightly/util/ObjectModelTest.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/compiler/src/test/java/org/apache/sling/scripting/sightly/util/ObjectModelTest.java?rev=1808232&r1=1808231&r2=1808232&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/compiler/src/test/java/org/apache/sling/scripting/sightly/util/ObjectModelTest.java (original) +++ sling/trunk/bundles/scripting/sightly/compiler/src/test/java/org/apache/sling/scripting/sightly/util/ObjectModelTest.java Wed Sep 13 12:22:30 2017 @@ -19,7 +19,6 @@ package org.apache.sling.scripting.sightly.util; import java.util.Arrays; -import java.util.Calendar; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -130,6 +129,7 @@ public class ObjectModelTest { @Test public void testResolveProperty() { + assertEquals(0, ObjectModel.resolveProperty(Collections.EMPTY_LIST, "size")); assertNull(ObjectModel.resolveProperty(null, null)); Integer[] testArray = new Integer[] {1, 2, 3}; assertEquals(2, ObjectModel.resolveProperty(testArray, 1));