Refine use of isArray() and componentType()
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
Deploy Docs / Dispatch docs deployment (push) Waiting to run Details

This commit is contained in:
Sam Brannen 2025-03-20 17:28:37 +01:00
parent cc9b39b53f
commit 6505c4b839
6 changed files with 18 additions and 22 deletions

View File

@ -288,7 +288,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA
String lastKey = tokens.keys[tokens.keys.length - 1]; String lastKey = tokens.keys[tokens.keys.length - 1];
if (propValue.getClass().isArray()) { if (propValue.getClass().isArray()) {
Class<?> requiredType = propValue.getClass().componentType(); Class<?> componentType = propValue.getClass().componentType();
int arrayIndex = Integer.parseInt(lastKey); int arrayIndex = Integer.parseInt(lastKey);
Object oldValue = null; Object oldValue = null;
try { try {
@ -296,10 +296,9 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA
oldValue = Array.get(propValue, arrayIndex); oldValue = Array.get(propValue, arrayIndex);
} }
Object convertedValue = convertIfNecessary(tokens.canonicalName, oldValue, pv.getValue(), Object convertedValue = convertIfNecessary(tokens.canonicalName, oldValue, pv.getValue(),
requiredType, ph.nested(tokens.keys.length)); componentType, ph.nested(tokens.keys.length));
int length = Array.getLength(propValue); int length = Array.getLength(propValue);
if (arrayIndex >= length && arrayIndex < this.autoGrowCollectionLimit) { if (arrayIndex >= length && arrayIndex < this.autoGrowCollectionLimit) {
Class<?> componentType = propValue.getClass().componentType();
Object newArray = Array.newInstance(componentType, arrayIndex + 1); Object newArray = Array.newInstance(componentType, arrayIndex + 1);
System.arraycopy(propValue, 0, newArray, 0, length); System.arraycopy(propValue, 0, newArray, 0, length);
int lastKeyIndex = tokens.canonicalName.lastIndexOf('['); int lastKeyIndex = tokens.canonicalName.lastIndexOf('[');

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2023 the original author or authors. * Copyright 2002-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -211,7 +211,7 @@ public abstract class RepeatableContainers {
throw new NoSuchMethodException("No value method found"); throw new NoSuchMethodException("No value method found");
} }
Class<?> returnType = valueMethod.getReturnType(); Class<?> returnType = valueMethod.getReturnType();
if (!returnType.isArray() || returnType.componentType() != repeatable) { if (returnType.componentType() != repeatable) {
throw new AnnotationConfigurationException( throw new AnnotationConfigurationException(
"Container type [%s] must declare a 'value' attribute for an array of type [%s]" "Container type [%s] must declare a 'value' attribute for an array of type [%s]"
.formatted(container.getName(), repeatable.getName())); .formatted(container.getName(), repeatable.getName()));

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2024 the original author or authors. * Copyright 2002-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -516,11 +516,9 @@ public class CodeFlow implements Opcodes {
*/ */
public static String toJvmDescriptor(Class<?> clazz) { public static String toJvmDescriptor(Class<?> clazz) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (clazz.isArray()) { while (clazz.isArray()) {
while (clazz.isArray()) { sb.append('[');
sb.append('['); clazz = clazz.componentType();
clazz = clazz.componentType();
}
} }
if (clazz.isPrimitive()) { if (clazz.isPrimitive()) {
if (clazz == boolean.class) { if (clazz == boolean.class) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2023 the original author or authors. * Copyright 2002-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -49,8 +49,8 @@ public class DestinationVariableArgumentResolver implements RSocketServiceArgume
collection.forEach(requestValues::addRouteVariable); collection.forEach(requestValues::addRouteVariable);
return true; return true;
} }
else if (argument.getClass().isArray()) { else if (argument instanceof Object[] arguments) {
for (Object variable : (Object[]) argument) { for (Object variable : arguments) {
requestValues.addRouteVariable(variable); requestValues.addRouteVariable(variable);
} }
return true; return true;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2024 the original author or authors. * Copyright 2002-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -623,7 +623,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi
parameterizedType.getActualTypeArguments().length == 1) { parameterizedType.getActualTypeArguments().length == 1) {
Type typeArgument = parameterizedType.getActualTypeArguments()[0]; Type typeArgument = parameterizedType.getActualTypeArguments()[0];
if (typeArgument instanceof Class<?> classArgument) { if (typeArgument instanceof Class<?> classArgument) {
return ((classArgument.isArray() && byte.class == classArgument.componentType()) || return ((byte.class == classArgument.componentType()) ||
isPrimitiveWrapper(classArgument) || isStandardClass(classArgument) || isPrimitiveWrapper(classArgument) || isStandardClass(classArgument) ||
supportsInternal(classArgument, false)); supportsInternal(classArgument, false));
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2023 the original author or authors. * Copyright 2002-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -208,11 +208,10 @@ public abstract class AbstractMultiCheckedElementTag extends AbstractCheckedElem
throw new IllegalArgumentException("Attribute 'items' is required and must be a Collection, an Array or a Map"); throw new IllegalArgumentException("Attribute 'items' is required and must be a Collection, an Array or a Map");
} }
if (itemsObject.getClass().isArray()) { if (itemsObject instanceof Object[] itemsArray) {
Object[] itemsArray = (Object[]) itemsObject; for (int itemIndex = 0; itemIndex < itemsArray.length; itemIndex++) {
for (int i = 0; i < itemsArray.length; i++) { Object item = itemsArray[itemIndex];
Object item = itemsArray[i]; writeObjectEntry(tagWriter, valueProperty, labelProperty, item, itemIndex);
writeObjectEntry(tagWriter, valueProperty, labelProperty, item, i);
} }
} }
else if (itemsObject instanceof Collection<?> optionCollection) { else if (itemsObject instanceof Collection<?> optionCollection) {