This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-compiler-java.git
commit 81e708f8094278d8e909c948cc96ddeeea78c387 Author: Radu Cotescu <[email protected]> AuthorDate: Wed Jan 11 11:57:58 2017 +0000 SLING-6450 - [HTL] Cannot retrieve "length" property for arrays of primitive types * treated all arrays in a unitary way, irrespective of their type, for "length" retrieval git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1778282 13f79535-47bb-0310-9956-ffa450edef68 --- .../sightly/render/AbstractRuntimeObjectModel.java | 8 ++--- .../render/AbstractRuntimeObjectModelTest.java | 34 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModel.java b/src/main/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModel.java index 357d680..4b512c3 100644 --- a/src/main/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModel.java +++ b/src/main/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModel.java @@ -16,6 +16,7 @@ ******************************************************************************/ package org.apache.sling.scripting.sightly.render; +import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -306,11 +307,10 @@ public abstract class AbstractRuntimeObjectModel implements RuntimeObjectModel { } protected static Object getField(Object obj, String property) { - if (obj instanceof Object[] && "length".equals(property)) { - // Working around this limitation: http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getFields%28%29 - return ((Object[]) obj).length; - } Class<?> cls = obj.getClass(); + if (cls.isArray() && "length".equals(property)) { + return Array.getLength(obj); + } try { Field field = cls.getDeclaredField(property); return field.get(obj); diff --git a/src/test/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModelTest.java b/src/test/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModelTest.java new file mode 100644 index 0000000..1cc988c --- /dev/null +++ b/src/test/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModelTest.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ +package org.apache.sling.scripting.sightly.render; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class AbstractRuntimeObjectModelTest { + + private AbstractRuntimeObjectModel runtimeObjectModel = new AbstractRuntimeObjectModel() {}; + + @Test + public void testResolveProperty_ArrayLength() throws Exception { + int[] ints = new int[] {1, 2, 3}; + Integer[] integers = new Integer[] {1, 2, 3}; + assertEquals(ints.length, runtimeObjectModel.resolveProperty(ints, "length")); + assertEquals(integers.length, runtimeObjectModel.resolveProperty(integers, "length")); + } +} -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
