diff --git a/build.gradle b/build.gradle
index 9e943e85c2..5111663dc4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -143,7 +143,7 @@ configure(allprojects) { project ->
}
checkstyle {
- toolVersion = "8.16"
+ toolVersion = "8.17"
configDir = rootProject.file("src/checkstyle")
}
@@ -157,7 +157,7 @@ configure(allprojects) { project ->
testCompile("junit:junit:4.12") {
exclude group: "org.hamcrest", module: "hamcrest-core"
}
- testCompile("org.mockito:mockito-core:2.23.4") {
+ testCompile("org.mockito:mockito-core:2.24.0") {
exclude group: "org.hamcrest", module: "hamcrest-core"
}
testCompile("io.mockk:mockk:1.9")
diff --git a/spring-core/src/main/java/org/springframework/util/SocketUtils.java b/spring-core/src/main/java/org/springframework/util/SocketUtils.java
index b57c414108..bed4688f6a 100644
--- a/spring-core/src/main/java/org/springframework/util/SocketUtils.java
+++ b/spring-core/src/main/java/org/springframework/util/SocketUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2017 the original author or authors.
+ * Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -73,7 +73,6 @@ public class SocketUtils {
* <bean id="bean2" ... p:port="#{socketUtils.findAvailableTcpPort(30000)}" />
*/
public SocketUtils() {
- /* no-op */
}
diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java
index 213c033a3e..4e36405710 100644
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java
+++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2017 the original author or authors.
+ * Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -76,7 +76,6 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
* @since 4.0.3
*/
public ResourceDatabasePopulator() {
- /* no-op */
}
/**
@@ -87,7 +86,6 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
* @since 4.0.3
*/
public ResourceDatabasePopulator(Resource... scripts) {
- this();
setScripts(scripts);
}
@@ -97,8 +95,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
* logged but not cause a failure
* @param ignoreFailedDrops flag to indicate that a failed SQL {@code DROP}
* statement can be ignored
- * @param sqlScriptEncoding the encoding for the supplied SQL scripts; may
- * be {@code null} or empty to indicate platform encoding
+ * @param sqlScriptEncoding the encoding for the supplied SQL scripts
+ * (may be {@code null} or empty to indicate platform encoding)
* @param scripts the scripts to execute to initialize or clean up the database
* (never {@code null})
* @since 4.0.3
@@ -106,10 +104,10 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
public ResourceDatabasePopulator(boolean continueOnError, boolean ignoreFailedDrops,
@Nullable String sqlScriptEncoding, Resource... scripts) {
- this(scripts);
this.continueOnError = continueOnError;
this.ignoreFailedDrops = ignoreFailedDrops;
setSqlScriptEncoding(sqlScriptEncoding);
+ setScripts(scripts);
}
@@ -148,10 +146,10 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
}
/**
- * Specify the encoding for the configured SQL scripts, if different from the
- * platform encoding.
- * @param sqlScriptEncoding the encoding used in scripts; may be {@code null}
- * or empty to indicate platform encoding
+ * Specify the encoding for the configured SQL scripts,
+ * if different from the platform encoding.
+ * @param sqlScriptEncoding the encoding used in scripts
+ * (may be {@code null} or empty to indicate platform encoding)
* @see #addScript(Resource)
*/
public void setSqlScriptEncoding(@Nullable String sqlScriptEncoding) {
diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java
index 863280ede0..2c3a41a4cf 100644
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java
+++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -107,7 +107,7 @@ public abstract class ScriptUtils {
* in a block comment will be omitted from the output. In addition, multiple
* adjacent whitespace characters will be collapsed into a single space.
* @param script the SQL script
- * @param separator character separating each statement — typically a ';'
+ * @param separator character separating each statement (typically a ';')
* @param statements the list that will contain the individual statements
* @throws ScriptException if an error occurred while splitting the SQL script
* @see #splitSqlScript(String, String, List)
@@ -130,7 +130,8 @@ public abstract class ScriptUtils {
* in a block comment will be omitted from the output. In addition, multiple
* adjacent whitespace characters will be collapsed into a single space.
* @param script the SQL script
- * @param separator text separating each statement — typically a ';' or newline character
+ * @param separator text separating each statement
+ * (typically a ';' or newline character)
* @param statements the list that will contain the individual statements
* @throws ScriptException if an error occurred while splitting the SQL script
* @see #splitSqlScript(String, char, List)
@@ -153,11 +154,11 @@ public abstract class ScriptUtils {
* omitted from the output. In addition, multiple adjacent whitespace characters
* will be collapsed into a single space.
* @param resource the resource from which the script was read
- * @param script the SQL script; never {@code null} or empty
- * @param separator text separating each statement — typically a ';' or
- * newline character; never {@code null}
- * @param commentPrefix the prefix that identifies SQL line comments —
- * typically "--"; never {@code null} or empty
+ * @param script the SQL script
+ * @param separator text separating each statement
+ * (typically a ';' or newline character)
+ * @param commentPrefix the prefix that identifies SQL line comments
+ * (typically "--")
* @param blockCommentStartDelimiter the start block comment delimiter;
* never {@code null} or empty
* @param blockCommentEndDelimiter the end block comment delimiter;
@@ -259,7 +260,7 @@ public abstract class ScriptUtils {
* @throws IOException in case of I/O errors
*/
static String readScript(EncodedResource resource) throws IOException {
- return readScript(resource, DEFAULT_COMMENT_PREFIX, DEFAULT_STATEMENT_SEPARATOR);
+ return readScript(resource, DEFAULT_COMMENT_PREFIX, DEFAULT_STATEMENT_SEPARATOR, DEFAULT_BLOCK_COMMENT_END_DELIMITER);
}
/**
@@ -270,18 +271,19 @@ public abstract class ScriptUtils {
* a statement — will be included in the results.
* @param resource the {@code EncodedResource} containing the script
* to be processed
- * @param commentPrefix the prefix that identifies comments in the SQL script —
- * typically "--"
- * @param separator the statement separator in the SQL script — typically ";"
+ * @param commentPrefix the prefix that identifies comments in the SQL script
+ * (typically "--")
+ * @param separator the statement separator in the SQL script (typically ";")
+ * @param blockCommentEndDelimiter the end block comment delimiter
* @return a {@code String} containing the script lines
* @throws IOException in case of I/O errors
*/
private static String readScript(EncodedResource resource, @Nullable String commentPrefix,
- @Nullable String separator) throws IOException {
+ @Nullable String separator, @Nullable String blockCommentEndDelimiter) throws IOException {
LineNumberReader lnr = new LineNumberReader(resource.getReader());
try {
- return readScript(lnr, commentPrefix, separator);
+ return readScript(lnr, commentPrefix, separator, blockCommentEndDelimiter);
}
finally {
lnr.close();
@@ -297,19 +299,21 @@ public abstract class ScriptUtils {
* a statement — will be included in the results.
* @param lineNumberReader the {@code LineNumberReader} containing the script
* to be processed
- * @param commentPrefix the prefix that identifies comments in the SQL script —
- * typically "--"
- * @param separator the statement separator in the SQL script — typically ";"
+ * @param lineCommentPrefix the prefix that identifies comments in the SQL script
+ * (typically "--")
+ * @param separator the statement separator in the SQL script (typically ";")
+ * @param blockCommentEndDelimiter the end block comment delimiter
* @return a {@code String} containing the script lines
* @throws IOException in case of I/O errors
*/
- public static String readScript(LineNumberReader lineNumberReader, @Nullable String commentPrefix,
- @Nullable String separator) throws IOException {
+ public static String readScript(LineNumberReader lineNumberReader, @Nullable String lineCommentPrefix,
+ @Nullable String separator, @Nullable String blockCommentEndDelimiter) throws IOException {
String currentStatement = lineNumberReader.readLine();
StringBuilder scriptBuilder = new StringBuilder();
while (currentStatement != null) {
- if (commentPrefix != null && !currentStatement.startsWith(commentPrefix)) {
+ if ((blockCommentEndDelimiter != null && currentStatement.contains(blockCommentEndDelimiter)) ||
+ (lineCommentPrefix != null && !currentStatement.startsWith(lineCommentPrefix))) {
if (scriptBuilder.length() > 0) {
scriptBuilder.append('\n');
}
@@ -431,16 +435,14 @@ public abstract class ScriptUtils {
* @param ignoreFailedDrops whether or not to continue in the event of specifically
* an error on a {@code DROP} statement
* @param commentPrefix the prefix that identifies single-line comments in the
- * SQL script — typically "--"
+ * SQL script (typically "--")
* @param separator the script statement separator; defaults to
* {@value #DEFAULT_STATEMENT_SEPARATOR} if not specified and falls back to
* {@value #FALLBACK_STATEMENT_SEPARATOR} as a last resort; may be set to
* {@value #EOF_STATEMENT_SEPARATOR} to signal that the script contains a
* single statement without a separator
- * @param blockCommentStartDelimiter the start block comment delimiter; never
- * {@code null} or empty
- * @param blockCommentEndDelimiter the end block comment delimiter; never
- * {@code null} or empty
+ * @param blockCommentStartDelimiter the start block comment delimiter
+ * @param blockCommentEndDelimiter the end block comment delimiter
* @throws ScriptException if an error occurred while executing the SQL script
* @see #DEFAULT_STATEMENT_SEPARATOR
* @see #FALLBACK_STATEMENT_SEPARATOR
@@ -460,7 +462,7 @@ public abstract class ScriptUtils {
String script;
try {
- script = readScript(resource, commentPrefix, separator);
+ script = readScript(resource, commentPrefix, separator, blockCommentEndDelimiter);
}
catch (IOException ex) {
throw new CannotReadScriptException(resource, ex);
diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsUnitTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsUnitTests.java
index 80f44ff57f..b55ab14302 100644
--- a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsUnitTests.java
+++ b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsUnitTests.java
@@ -162,6 +162,20 @@ public class ScriptUtilsUnitTests {
assertEquals("statement 2 not split correctly", statement2, statements.get(1));
}
+ @Test
+ public void readAndSplitScriptContainingMultiLineNestedComments() throws Exception {
+ String script = readScript("test-data-with-multi-line-nested-comments.sql");
+ List statements = new ArrayList<>();
+ splitSqlScript(script, ';', statements);
+
+ String statement1 = "INSERT INTO users(first_name, last_name) VALUES('Juergen', 'Hoeller')";
+ String statement2 = "INSERT INTO users(first_name, last_name) VALUES( 'Sam' , 'Brannen' )";
+
+ assertEquals("wrong number of statements", 2, statements.size());
+ assertEquals("statement 1 not split correctly", statement1, statements.get(0));
+ assertEquals("statement 2 not split correctly", statement2, statements.get(1));
+ }
+
@Test
public void containsDelimiters() {
assertFalse(containsSqlScriptDelimiters("select 1\n select ';'", ";"));
diff --git a/spring-jdbc/src/test/resources/org/springframework/jdbc/datasource/init/test-data-with-multi-line-nested-comments.sql b/spring-jdbc/src/test/resources/org/springframework/jdbc/datasource/init/test-data-with-multi-line-nested-comments.sql
new file mode 100644
index 0000000000..8c1e1174b7
--- /dev/null
+++ b/spring-jdbc/src/test/resources/org/springframework/jdbc/datasource/init/test-data-with-multi-line-nested-comments.sql
@@ -0,0 +1,23 @@
+/* This is a multi line comment
+ * The next comment line has no text
+
+ * The next comment line starts with a space.
+ * x, y, z...
+ */
+
+INSERT INTO users(first_name, last_name) VALUES('Juergen', 'Hoeller');
+-- This is also a comment.
+/*-------------------------------------------
+-- A fancy multi-line comments that puts
+-- single line comments inside of a multi-line
+-- comment block.
+Moreover, the block commend end delimiter
+appears on a line that can potentially also
+be a single-line comment if we weren't
+already inside a multi-line comment run.
+-------------------------------------------*/
+ INSERT INTO
+users(first_name, last_name) -- This is a single line comment containing the block-end-comment sequence here */ but it's still a single-line comment
+VALUES( 'Sam' -- first_name
+ , 'Brannen' -- last_name
+);--
\ No newline at end of file
diff --git a/spring-test/src/main/java/org/springframework/test/context/TestExecutionListener.java b/spring-test/src/main/java/org/springframework/test/context/TestExecutionListener.java
index 7c0b64426e..327cacb17e 100644
--- a/spring-test/src/main/java/org/springframework/test/context/TestExecutionListener.java
+++ b/spring-test/src/main/java/org/springframework/test/context/TestExecutionListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2016 the original author or authors.
+ * Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -78,7 +78,6 @@ public interface TestExecutionListener {
* @since 3.0
*/
default void beforeTestClass(TestContext testContext) throws Exception {
- /* no-op */
}
/**
@@ -92,7 +91,6 @@ public interface TestExecutionListener {
* @throws Exception allows any exception to propagate
*/
default void prepareTestInstance(TestContext testContext) throws Exception {
- /* no-op */
}
/**
@@ -116,7 +114,6 @@ public interface TestExecutionListener {
* @see #afterTestExecution
*/
default void beforeTestMethod(TestContext testContext) throws Exception {
- /* no-op */
}
/**
@@ -137,7 +134,6 @@ public interface TestExecutionListener {
* @see #afterTestExecution
*/
default void beforeTestExecution(TestContext testContext) throws Exception {
- /* no-op */
}
/**
@@ -158,7 +154,6 @@ public interface TestExecutionListener {
* @see #beforeTestExecution
*/
default void afterTestExecution(TestContext testContext) throws Exception {
- /* no-op */
}
/**
@@ -182,7 +177,6 @@ public interface TestExecutionListener {
* @see #afterTestExecution
*/
default void afterTestMethod(TestContext testContext) throws Exception {
- /* no-op */
}
/**
@@ -197,7 +191,6 @@ public interface TestExecutionListener {
* @since 3.0
*/
default void afterTestClass(TestContext testContext) throws Exception {
- /* no-op */
}
}
diff --git a/spring-test/src/main/java/org/springframework/test/context/support/AbstractGenericContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/support/AbstractGenericContextLoader.java
index 2d986f0ab8..38de20092e 100644
--- a/spring-test/src/main/java/org/springframework/test/context/support/AbstractGenericContextLoader.java
+++ b/spring-test/src/main/java/org/springframework/test/context/support/AbstractGenericContextLoader.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -141,7 +141,7 @@ public abstract class AbstractGenericContextLoader extends AbstractContextLoader
* @since 4.0.4
*/
protected void validateMergedContextConfiguration(MergedContextConfiguration mergedConfig) {
- /* no-op */
+ // no-op
}
/**
diff --git a/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java
index 319ad5743f..d505ee4e0f 100644
--- a/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java
+++ b/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -142,7 +142,7 @@ public abstract class AbstractGenericWebContextLoader extends AbstractContextLoa
* @since 4.0.4
*/
protected void validateMergedContextConfiguration(WebMergedContextConfiguration mergedConfig) {
- /* no-op */
+ // no-op
}
/**
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/EncodedResourceResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/EncodedResourceResolverTests.java
index cde55ae020..cf23904731 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/EncodedResourceResolverTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/EncodedResourceResolverTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -78,7 +78,7 @@ public class EncodedResourceResolverTests {
@Before
- public void setUp() {
+ public void setup() {
this.cache = new ConcurrentMapCache("resourceCache");
VersionResourceResolver versionResolver = new VersionResourceResolver();
@@ -127,9 +127,7 @@ public class EncodedResourceResolverTests {
@Test
public void resolveFromCacheWithEncodingVariants() {
-
// 1. Resolve, and cache .gz variant
-
String file = "js/foo.js";
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/js/foo.js");
request.addHeader("Accept-Encoding", "gzip");
@@ -140,7 +138,6 @@ public class EncodedResourceResolverTests {
assertTrue(resolved instanceof HttpResource);
// 2. Resolve unencoded resource
-
request = new MockHttpServletRequest("GET", "/js/foo.js");
resolved = this.resolver.resolveResource(request, file, this.locations);
@@ -149,7 +146,7 @@ public class EncodedResourceResolverTests {
assertFalse(resolved instanceof HttpResource);
}
- @Test // SPR-13149
+ @Test // SPR-13149
public void resolveWithNullRequest() {
String file = "js/foo.js";
Resource resolved = this.resolver.resolveResource(null, file, this.locations);