Stop using deprecated AttributeSetter outside of the deprecated package (#5038)

This commit is contained in:
Nikita Salnikov-Tarnovski 2022-01-07 12:57:39 +02:00 committed by GitHub
parent 0c5812951f
commit 1745e7bb55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 71 additions and 72 deletions

View File

@ -5,17 +5,17 @@
package io.opentelemetry.instrumentation.api.annotation.support;
import io.opentelemetry.instrumentation.api.tracer.AttributeSetter;
import io.opentelemetry.api.common.AttributesBuilder;
/** Represents the binding of a method parameter to an attribute of a traced method. */
@FunctionalInterface
public interface AttributeBinding {
interface AttributeBinding {
/**
* Applies the value of the method argument as an attribute on the span for the traced method.
*
* @param setter the {@link AttributeSetter} onto which to add the attribute
* @param target the {@link AttributesBuilder} onto which to add the attribute
* @param arg the value of the method argument
*/
void apply(AttributeSetter setter, Object arg);
void apply(AttributesBuilder target, Object arg);
}

View File

@ -25,27 +25,27 @@ class AttributeBindingFactory {
// Simple scalar parameter types
if (type == String.class) {
AttributeKey<String> key = AttributeKey.stringKey(name);
return (setter, arg) -> setter.setAttribute(key, (String) arg);
return (setter, arg) -> setter.put(key, (String) arg);
}
if (type == long.class || type == Long.class) {
AttributeKey<Long> key = AttributeKey.longKey(name);
return (setter, arg) -> setter.setAttribute(key, (Long) arg);
return (setter, arg) -> setter.put(key, (Long) arg);
}
if (type == double.class || type == Double.class) {
AttributeKey<Double> key = AttributeKey.doubleKey(name);
return (setter, arg) -> setter.setAttribute(key, (Double) arg);
return (setter, arg) -> setter.put(key, (Double) arg);
}
if (type == boolean.class || type == Boolean.class) {
AttributeKey<Boolean> key = AttributeKey.booleanKey(name);
return (setter, arg) -> setter.setAttribute(key, (Boolean) arg);
return (setter, arg) -> setter.put(key, (Boolean) arg);
}
if (type == int.class || type == Integer.class) {
AttributeKey<Long> key = AttributeKey.longKey(name);
return (setter, arg) -> setter.setAttribute(key, ((Integer) arg).longValue());
return (setter, arg) -> setter.put(key, ((Integer) arg).longValue());
}
if (type == float.class || type == Float.class) {
AttributeKey<Double> key = AttributeKey.doubleKey(name);
return (setter, arg) -> setter.setAttribute(key, ((Float) arg).doubleValue());
return (setter, arg) -> setter.put(key, ((Float) arg).doubleValue());
}
if (isArrayType(type)) {
@ -74,19 +74,19 @@ class AttributeBindingFactory {
// Simple array attribute types without conversion
if (type == String[].class) {
AttributeKey<List<String>> key = AttributeKey.stringArrayKey(name);
return (setter, arg) -> setter.setAttribute(key, Arrays.asList((String[]) arg));
return (setter, arg) -> setter.put(key, Arrays.asList((String[]) arg));
}
if (type == Long[].class) {
AttributeKey<List<Long>> key = AttributeKey.longArrayKey(name);
return (setter, arg) -> setter.setAttribute(key, Arrays.asList((Long[]) arg));
return (setter, arg) -> setter.put(key, Arrays.asList((Long[]) arg));
}
if (type == Double[].class) {
AttributeKey<List<Double>> key = AttributeKey.doubleArrayKey(name);
return (setter, arg) -> setter.setAttribute(key, Arrays.asList((Double[]) arg));
return (setter, arg) -> setter.put(key, Arrays.asList((Double[]) arg));
}
if (type == Boolean[].class) {
AttributeKey<List<Boolean>> key = AttributeKey.booleanArrayKey(name);
return (setter, arg) -> setter.setAttribute(key, Arrays.asList((Boolean[]) arg));
return (setter, arg) -> setter.put(key, Arrays.asList((Boolean[]) arg));
}
if (type == long[].class) {
@ -118,19 +118,19 @@ class AttributeBindingFactory {
private static AttributeBinding listBinding(String name, Type componentType) {
if (componentType == String.class) {
AttributeKey<List<String>> key = AttributeKey.stringArrayKey(name);
return (setter, arg) -> setter.setAttribute(key, (List<String>) arg);
return (setter, arg) -> setter.put(key, (List<String>) arg);
}
if (componentType == Long.class) {
AttributeKey<List<Long>> key = AttributeKey.longArrayKey(name);
return (setter, arg) -> setter.setAttribute(key, (List<Long>) arg);
return (setter, arg) -> setter.put(key, (List<Long>) arg);
}
if (componentType == Double.class) {
AttributeKey<List<Double>> key = AttributeKey.doubleArrayKey(name);
return (setter, arg) -> setter.setAttribute(key, (List<Double>) arg);
return (setter, arg) -> setter.put(key, (List<Double>) arg);
}
if (componentType == Boolean.class) {
AttributeKey<List<Boolean>> key = AttributeKey.booleanArrayKey(name);
return (setter, arg) -> setter.setAttribute(key, (List<Boolean>) arg);
return (setter, arg) -> setter.put(key, (List<Boolean>) arg);
}
if (componentType == Integer.class) {
AttributeKey<List<Long>> key = AttributeKey.longArrayKey(name);
@ -160,7 +160,7 @@ class AttributeBindingFactory {
return array.length;
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -181,7 +181,7 @@ class AttributeBindingFactory {
return array.length;
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -201,7 +201,7 @@ class AttributeBindingFactory {
return array.length;
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -221,7 +221,7 @@ class AttributeBindingFactory {
return array.length;
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -242,7 +242,7 @@ class AttributeBindingFactory {
return array.length;
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -262,7 +262,7 @@ class AttributeBindingFactory {
return array.length;
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -282,7 +282,7 @@ class AttributeBindingFactory {
return array.length;
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -303,7 +303,7 @@ class AttributeBindingFactory {
return array.length;
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -325,7 +325,7 @@ class AttributeBindingFactory {
return list.size();
}
};
setter.setAttribute(key, wrapper);
setter.put(key, wrapper);
};
}
@ -336,6 +336,6 @@ class AttributeBindingFactory {
private static AttributeBinding defaultBinding(String name) {
AttributeKey<String> key = AttributeKey.stringKey(name);
return (setter, arg) -> setter.setAttribute(key, arg.toString());
return (setter, arg) -> setter.put(key, arg.toString());
}
}

View File

@ -5,10 +5,10 @@
package io.opentelemetry.instrumentation.api.annotation.support;
import io.opentelemetry.instrumentation.api.tracer.AttributeSetter;
import io.opentelemetry.api.common.AttributesBuilder;
/** Represents the bindings of method parameters to attributes of a traced method. */
public interface AttributeBindings {
interface AttributeBindings {
/**
* Indicates that the traced method has no parameters bound to attributes.
@ -20,8 +20,8 @@ public interface AttributeBindings {
/**
* Applies the values of the method arguments as attributes on the span for the traced method.
*
* @param setter the {@link AttributeSetter} for setting the attribute on the span
* @param target the {@link AttributesBuilder} on which to set the attribute
* @param args the method arguments
*/
void apply(AttributeSetter setter, Object[] args);
void apply(AttributesBuilder target, Object[] args);
}

View File

@ -8,7 +8,6 @@ package io.opentelemetry.instrumentation.api.annotation.support;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.instrumentation.api.cache.Cache;
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.tracer.AttributeSetter;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import javax.annotation.Nullable;
@ -51,7 +50,7 @@ public final class MethodSpanAttributesExtractor<REQUEST, RESPONSE>
AttributeBindings bindings = cache.computeIfAbsent(method, this::bind);
if (!bindings.isEmpty()) {
Object[] args = methodArgumentsExtractor.extract(request);
bindings.apply(attributes::put, args);
bindings.apply(attributes, args);
}
}
@ -108,7 +107,7 @@ public final class MethodSpanAttributesExtractor<REQUEST, RESPONSE>
}
@Override
public void apply(AttributeSetter setter, Object[] args) {}
public void apply(AttributesBuilder target, Object[] args) {}
}
private static final class CombinedAttributeBindings implements AttributeBindings {
@ -129,12 +128,12 @@ public final class MethodSpanAttributesExtractor<REQUEST, RESPONSE>
}
@Override
public void apply(AttributeSetter setter, Object[] args) {
parent.apply(setter, args);
public void apply(AttributesBuilder target, Object[] args) {
parent.apply(target, args);
if (args != null && args.length > index) {
Object arg = args[index];
if (arg != null) {
binding.apply(setter, arg);
binding.apply(target, arg);
}
}
}

View File

@ -6,19 +6,19 @@
package io.opentelemetry.instrumentation.api.annotation.support
import io.opentelemetry.api.common.AttributeType
import io.opentelemetry.instrumentation.api.tracer.AttributeSetter
import io.opentelemetry.api.common.AttributesBuilder
import spock.lang.Specification
class AttributeBindingFactoryTest extends Specification {
AttributeSetter setter = Mock()
AttributesBuilder setter = Mock()
def "creates attribute binding for String"() {
when:
AttributeBindingFactory.createBinding("key", String).apply(setter, "value")
then:
1 * setter.setAttribute({ it.getType() == AttributeType.STRING && it.getKey() == "key" }, "value")
1 * setter.put({ it.getType() == AttributeType.STRING && it.getKey() == "key" }, "value")
}
def "creates attribute binding for int"() {
@ -26,7 +26,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", int).apply(setter, 1234)
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG && it.getKey() == "key" }, 1234L)
1 * setter.put({ it.getType() == AttributeType.LONG && it.getKey() == "key" }, 1234L)
}
def "creates attribute binding for Integer"() {
@ -34,7 +34,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Integer).apply(setter, 1234)
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG && it.getKey() == "key" }, 1234L)
1 * setter.put({ it.getType() == AttributeType.LONG && it.getKey() == "key" }, 1234L)
}
def "creates attribute binding for long"() {
@ -42,7 +42,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", long).apply(setter, 1234L)
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG && it.getKey() == "key" }, 1234L)
1 * setter.put({ it.getType() == AttributeType.LONG && it.getKey() == "key" }, 1234L)
}
def "creates attribute binding for Long"() {
@ -50,7 +50,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Long).apply(setter, 1234L)
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG && it.getKey() == "key" }, 1234L)
1 * setter.put({ it.getType() == AttributeType.LONG && it.getKey() == "key" }, 1234L)
}
def "creates attribute binding for float"() {
@ -58,7 +58,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", float).apply(setter, 1234.0F)
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE && it.getKey() == "key" }, 1234.0)
1 * setter.put({ it.getType() == AttributeType.DOUBLE && it.getKey() == "key" }, 1234.0)
}
def "creates attribute binding for Float"() {
@ -66,7 +66,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Float).apply(setter, 1234.0F)
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE && it.getKey() == "key" }, 1234.0)
1 * setter.put({ it.getType() == AttributeType.DOUBLE && it.getKey() == "key" }, 1234.0)
}
def "creates attribute binding for double"() {
@ -74,7 +74,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", double).apply(setter, Double.valueOf(1234.0))
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE && it.getKey() == "key" }, Double.valueOf(1234.0))
1 * setter.put({ it.getType() == AttributeType.DOUBLE && it.getKey() == "key" }, Double.valueOf(1234.0))
}
def "creates attribute binding for Double"() {
@ -82,7 +82,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Double).apply(setter, Double.valueOf(1234.0))
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE && it.getKey() == "key" }, Double.valueOf(1234.0))
1 * setter.put({ it.getType() == AttributeType.DOUBLE && it.getKey() == "key" }, Double.valueOf(1234.0))
}
def "creates attribute binding for boolean"() {
@ -90,7 +90,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", boolean).apply(setter, true)
then:
1 * setter.setAttribute({ it.getType() == AttributeType.BOOLEAN && it.getKey() == "key" }, true)
1 * setter.put({ it.getType() == AttributeType.BOOLEAN && it.getKey() == "key" }, true)
}
def "creates attribute binding for Boolean"() {
@ -98,7 +98,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Boolean).apply(setter, true)
then:
1 * setter.setAttribute({ it.getType() == AttributeType.BOOLEAN && it.getKey() == "key" }, true)
1 * setter.put({ it.getType() == AttributeType.BOOLEAN && it.getKey() == "key" }, true)
}
def "creates attribute binding for String[]"() {
@ -106,7 +106,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", String[]).apply(setter, ["x", "y", "z", null] as String[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.STRING_ARRAY && it.getKey() == "key" }, ["x", "y", "z", null])
1 * setter.put({ it.getType() == AttributeType.STRING_ARRAY && it.getKey() == "key" }, ["x", "y", "z", null])
}
def "creates attribute binding for int[]"() {
@ -114,7 +114,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", int[]).apply(setter, [1, 2, 3] as int[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
1 * setter.put({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
}
def "creates attribute binding for Integer[]"() {
@ -122,7 +122,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Integer[]).apply(setter, [1, 2, 3, null] as Integer[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L, null])
1 * setter.put({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L, null])
}
def "creates attribute binding for long[]"() {
@ -130,7 +130,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", long[]).apply(setter, [1L, 2L, 3L] as long[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
1 * setter.put({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
}
def "creates attribute binding for Long[]"() {
@ -138,7 +138,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Long[]).apply(setter, [1L, 2L, 3L, null] as Long[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L, null])
1 * setter.put({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L, null])
}
def "creates attribute binding for float[]"() {
@ -146,7 +146,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", float[]).apply(setter, [1.0F, 2.0F, 3.0F] as float[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0] as List<Double>)
1 * setter.put({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0] as List<Double>)
}
def "creates attribute binding for Float[]"() {
@ -154,7 +154,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Float[]).apply(setter, [1.0F, 2.0F, 3.0F, null] as Float[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0, null] as List<Double>)
1 * setter.put({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0, null] as List<Double>)
}
def "creates attribute binding for double[]"() {
@ -162,7 +162,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", double[]).apply(setter, [1.0, 2.0, 3.0] as double[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0] as List<Double>)
1 * setter.put({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0] as List<Double>)
}
def "creates attribute binding for Double[]"() {
@ -170,7 +170,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Double[]).apply(setter, [1.0, 2.0, 3.0, null] as Double[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0, null] as List<Double>)
1 * setter.put({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0, null] as List<Double>)
}
def "creates attribute binding for boolean[]"() {
@ -178,7 +178,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", boolean[]).apply(setter, [true, false] as boolean[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.BOOLEAN_ARRAY && it.getKey() == "key" }, [true, false] as List<Boolean>)
1 * setter.put({ it.getType() == AttributeType.BOOLEAN_ARRAY && it.getKey() == "key" }, [true, false] as List<Boolean>)
}
def "creates attribute binding for Boolean[]"() {
@ -186,7 +186,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", Boolean[]).apply(setter, [true, false, null] as Boolean[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.BOOLEAN_ARRAY && it.getKey() == "key" }, [true, false, null] as List<Boolean>)
1 * setter.put({ it.getType() == AttributeType.BOOLEAN_ARRAY && it.getKey() == "key" }, [true, false, null] as List<Boolean>)
}
def "creates default attribute binding"() {
@ -194,7 +194,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", TestClass).apply(setter, new TestClass("foo"))
then:
1 * setter.setAttribute({ it.getType() == AttributeType.STRING && it.getKey() == "key" }, "TestClass{value = foo}")
1 * setter.put({ it.getType() == AttributeType.STRING && it.getKey() == "key" }, "TestClass{value = foo}")
}
def "creates default attribute binding for array"() {
@ -202,7 +202,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", TestClass[]).apply(setter, [new TestClass("foo"), new TestClass("bar"), null] as TestClass[])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.STRING_ARRAY && it.getKey() == "key" }, ["TestClass{value = foo}", "TestClass{value = bar}", null])
1 * setter.put({ it.getType() == AttributeType.STRING_ARRAY && it.getKey() == "key" }, ["TestClass{value = foo}", "TestClass{value = bar}", null])
}
def "creates attribute binding for List<String>"() {
@ -211,7 +211,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", type).apply(setter, ["x", "y", "z"])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.STRING_ARRAY && it.getKey() == "key" }, ["x", "y", "z"])
1 * setter.put({ it.getType() == AttributeType.STRING_ARRAY && it.getKey() == "key" }, ["x", "y", "z"])
}
def "creates attribute binding for List<Integer>"() {
@ -220,7 +220,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", type).apply(setter, [1, 2, 3])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
1 * setter.put({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
}
def "creates attribute binding for List<Long>"() {
@ -229,7 +229,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", type).apply(setter, [1L, 2L, 3L])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
1 * setter.put({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
}
def "creates attribute binding for List<Float>"() {
@ -238,7 +238,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", type).apply(setter, [1.0F, 2.0F, 3.0F])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0])
1 * setter.put({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0])
}
def "creates attribute binding for List<Double>"() {
@ -247,7 +247,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", type).apply(setter, [1.0, 2.0, 3.0])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0])
1 * setter.put({ it.getType() == AttributeType.DOUBLE_ARRAY && it.getKey() == "key" }, [1.0, 2.0, 3.0])
}
def "creates attribute binding for List<Boolean>"() {
@ -256,7 +256,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", type).apply(setter, [true, false, null])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.BOOLEAN_ARRAY && it.getKey() == "key" }, [true, false, null])
1 * setter.put({ it.getType() == AttributeType.BOOLEAN_ARRAY && it.getKey() == "key" }, [true, false, null])
}
def "creates attribute binding for List<?>"() {
@ -265,7 +265,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", type).apply(setter, [new TestClass("foo"), new TestClass("bar")])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.STRING_ARRAY && it.getKey() == "key" }, ["TestClass{value = foo}", "TestClass{value = bar}"])
1 * setter.put({ it.getType() == AttributeType.STRING_ARRAY && it.getKey() == "key" }, ["TestClass{value = foo}", "TestClass{value = bar}"])
}
def "creates attribute binding for ArrayList<Long>"() {
@ -274,7 +274,7 @@ class AttributeBindingFactoryTest extends Specification {
AttributeBindingFactory.createBinding("key", type).apply(setter, [1L, 2L, 3L])
then:
1 * setter.setAttribute({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
1 * setter.put({ it.getType() == AttributeType.LONG_ARRAY && it.getKey() == "key" }, [1L, 2L, 3L])
}
class TestClass {