Preparations for JDK 9

Issue: SPR-12549
This commit is contained in:
Juergen Hoeller 2015-03-05 18:56:07 +01:00
parent 7e8ffc7bf5
commit 1e26d17a3d
4 changed files with 36 additions and 29 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2015 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.
@ -16,6 +16,7 @@
package org.springframework.core.convert.support; package org.springframework.core.convert.support;
import java.nio.Buffer;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
@ -26,8 +27,8 @@ import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.converter.ConditionalGenericConverter; import org.springframework.core.convert.converter.ConditionalGenericConverter;
/** /**
* Converts a {@link ByteBuffer} directly to and from {@code byte[]}s and indirectly to * Converts a {@link ByteBuffer} directly to and from {@code byte[]}s and indirectly
* any type that the {@link ConversionService} support via {@code byte[]}. * to any type that the {@link ConversionService} support via {@code byte[]}.
* *
* @author Phillip Webb * @author Phillip Webb
* @since 4.0 * @since 4.0
@ -47,7 +48,7 @@ final class ByteBufferConverter implements ConditionalGenericConverter {
} }
private ConversionService conversionService; private final ConversionService conversionService;
public ByteBufferConverter(ConversionService conversionService) { public ByteBufferConverter(ConversionService conversionService) {
@ -72,18 +73,17 @@ final class ByteBufferConverter implements ConditionalGenericConverter {
} }
private boolean matchesFromByteBuffer(TypeDescriptor targetType) { private boolean matchesFromByteBuffer(TypeDescriptor targetType) {
return (targetType.isAssignableTo(BYTE_ARRAY_TYPE) || this.conversionService.canConvert( return (targetType.isAssignableTo(BYTE_ARRAY_TYPE) ||
BYTE_ARRAY_TYPE, targetType)); this.conversionService.canConvert(BYTE_ARRAY_TYPE, targetType));
} }
private boolean matchesToByteBuffer(TypeDescriptor sourceType) { private boolean matchesToByteBuffer(TypeDescriptor sourceType) {
return (sourceType.isAssignableTo(BYTE_ARRAY_TYPE) || this.conversionService.canConvert( return (sourceType.isAssignableTo(BYTE_ARRAY_TYPE) ||
sourceType, BYTE_ARRAY_TYPE)); this.conversionService.canConvert(sourceType, BYTE_ARRAY_TYPE));
} }
@Override @Override
public Object convert(Object source, TypeDescriptor sourceType, public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
TypeDescriptor targetType) {
if (sourceType.isAssignableTo(BYTE_BUFFER_TYPE)) { if (sourceType.isAssignableTo(BYTE_BUFFER_TYPE)) {
return convertFromByteBuffer((ByteBuffer) source, targetType); return convertFromByteBuffer((ByteBuffer) source, targetType);
} }
@ -104,11 +104,17 @@ final class ByteBufferConverter implements ConditionalGenericConverter {
} }
private Object convertToByteBuffer(Object source, TypeDescriptor sourceType) { private Object convertToByteBuffer(Object source, TypeDescriptor sourceType) {
byte[] bytes = (byte[]) (source instanceof byte[] ? source byte[] bytes = (byte[]) (source instanceof byte[] ? source :
: this.conversionService.convert(source, sourceType, BYTE_ARRAY_TYPE)); this.conversionService.convert(source, sourceType, BYTE_ARRAY_TYPE));
ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length); ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length);
byteBuffer.put(bytes); byteBuffer.put(bytes);
byteBuffer.rewind();
// Extra cast necessary for compiling on JDK 9 plus running on JDK 8, since
// otherwise the overridden ByteBuffer-returning rewind method would be chosen
// which isn't available on JDK 8.
((Buffer) byteBuffer).rewind();
return byteBuffer; return byteBuffer;
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2014 the original author or authors. * Copyright 2002-2015 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.
@ -25,6 +25,7 @@ import java.util.List;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.springframework.core.JdkVersion;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@ -82,7 +83,8 @@ public class PathMatchingResourcePatternResolverTests {
public void testSingleResourceInJar() throws IOException { public void testSingleResourceInJar() throws IOException {
Resource[] resources = resolver.getResources("java/net/URL.class"); Resource[] resources = resolver.getResources("java/net/URL.class");
assertEquals(1, resources.length); assertEquals(1, resources.length);
assertProtocolAndFilename(resources[0], "jar", "URL.class"); String expectedProtocol = (JdkVersion.getMajorJavaVersion() < JdkVersion.JAVA_19 ? "jar" : "jrt");
assertProtocolAndFilename(resources[0], expectedProtocol, "URL.class");
} }
@Ignore // passes under eclipse, fails under ant @Ignore // passes under eclipse, fails under ant

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2015 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.
@ -24,12 +24,6 @@ package org.springframework.tests;
*/ */
public enum JavaVersion { public enum JavaVersion {
/**
* Java 1.5
*/
JAVA_15("1.5", 15),
/** /**
* Java 1.6 * Java 1.6
*/ */
@ -43,7 +37,12 @@ public enum JavaVersion {
/** /**
* Java 1.8 * Java 1.8
*/ */
JAVA_18("1.8", 18); JAVA_18("1.8", 18),
/**
* Java 1.9
*/
JAVA_19("1.9", 19);
private static final JavaVersion runningVersion = findRunningVersion(); private static final JavaVersion runningVersion = findRunningVersion();
@ -55,7 +54,7 @@ public enum JavaVersion {
return candidate; return candidate;
} }
} }
return JavaVersion.JAVA_15; return JavaVersion.JAVA_16;
} }
@ -81,16 +80,16 @@ public enum JavaVersion {
* @return {@code true} if the specified version is at least this version * @return {@code true} if the specified version is at least this version
*/ */
public boolean isAtLeast(JavaVersion version) { public boolean isAtLeast(JavaVersion version) {
return this.value >= version.value; return (this.value >= version.value);
} }
/** /**
* Returns the current running JDK version. If the current version cannot be * Returns the current running JDK version. If the current version cannot be
* determined {@link #JAVA_15} will be returned. * determined {@link #JAVA_16} will be returned.
* @return the JDK version * @return the JDK version
*/ */
public static JavaVersion runningVersion() { public static JavaVersion runningVersion() {
return runningVersion; return runningVersion;
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2015 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.
@ -36,8 +36,8 @@ public class JavaVersionTests {
@Test @Test
public void isAtLeast() throws Exception { public void isAtLeast() throws Exception {
assertTrue(JavaVersion.JAVA_16.isAtLeast(JavaVersion.JAVA_15));
assertTrue(JavaVersion.JAVA_16.isAtLeast(JavaVersion.JAVA_16)); assertTrue(JavaVersion.JAVA_16.isAtLeast(JavaVersion.JAVA_16));
assertFalse(JavaVersion.JAVA_16.isAtLeast(JavaVersion.JAVA_17)); assertFalse(JavaVersion.JAVA_16.isAtLeast(JavaVersion.JAVA_17));
} }
} }