diff --git a/src/functionalTest/groovy/org/cadixdev/gradle/licenser/LicenserPluginFunctionalTest.groovy b/src/functionalTest/groovy/org/cadixdev/gradle/licenser/LicenserPluginFunctionalTest.groovy index afb9943..7ef6fdd 100644 --- a/src/functionalTest/groovy/org/cadixdev/gradle/licenser/LicenserPluginFunctionalTest.groovy +++ b/src/functionalTest/groovy/org/cadixdev/gradle/licenser/LicenserPluginFunctionalTest.groovy @@ -446,4 +446,61 @@ class LicenserPluginFunctionalTest extends Specification { [gradleVersion, _, extraArgs] << testMatrix } + + @Unroll + def "ignore new line (gradle #gradleVersion)"() { + given: + def projectDir = temporaryFolder.newFolder() + def sourceDir = projectDir.toPath().resolve(Paths.get("src", "main", "java", "com", "example")).toFile() + sourceDir.mkdirs() + new File(projectDir, "header.txt") << "Copyright header" + new File(projectDir, "settings.gradle") << "" + new File(projectDir, "build.gradle") << """ + plugins { + id('java') + id('org.cadixdev.licenser') + } + + license { + lineEnding = '\\n' + header = project.file('header.txt') + ignoreNewLine = true + } + """.stripIndent() + new File(sourceDir, "One.java") << String.join("\n", + "/*", + " * Copyright header", + " */", + " ", + "package com.example;", + "", + "class One {}", + "" + ) + new File(sourceDir, "Two.java") << String.join("\n", + "/*", + " * Copyright header", + " */", + "", + "package com.example;", + "", + "class Two {}", + "" + ) + new File(sourceDir, "Three.java") << String.join("\n", + "/*", + " * Copyright header", + " */", + "package com.example;", + "", + "class Three {}", + "" + ) + when: + def result = runner(projectDir, gradleVersion, extraArgs + "checkLicenses").build() + then: + result.task(":checkLicenses").outcome == TaskOutcome.SUCCESS + where: + [gradleVersion, _, extraArgs] << testMatrix + } } diff --git a/src/main/groovy/org/cadixdev/gradle/licenser/LicenseExtension.groovy b/src/main/groovy/org/cadixdev/gradle/licenser/LicenseExtension.groovy index 7974d67..71b897b 100644 --- a/src/main/groovy/org/cadixdev/gradle/licenser/LicenseExtension.groovy +++ b/src/main/groovy/org/cadixdev/gradle/licenser/LicenseExtension.groovy @@ -138,6 +138,7 @@ class LicenseExtension extends LicenseProperties { } this.lineEnding = objects.property(String).convention(defaultLineEnding) this.newLine.convention(true) + this.ignoreNewLine.convention(false) // Files without standard comment format exclude '**/*.txt' diff --git a/src/main/groovy/org/cadixdev/gradle/licenser/LicenseProperties.groovy b/src/main/groovy/org/cadixdev/gradle/licenser/LicenseProperties.groovy index f0024e8..8746411 100644 --- a/src/main/groovy/org/cadixdev/gradle/licenser/LicenseProperties.groovy +++ b/src/main/groovy/org/cadixdev/gradle/licenser/LicenseProperties.groovy @@ -59,6 +59,12 @@ class LicenseProperties implements PatternFilterable { */ final Property newLine + /** + * Pay no attention to the line after the license header. + * By default this is {@code false}. + */ + final Property ignoreNewLine + protected final Property charset private final TextResourceFactory resources @@ -68,6 +74,7 @@ class LicenseProperties implements PatternFilterable { this.charset = objects.property(String) this.header = objects.property(TextResource) this.newLine = objects.property(Boolean) + this.ignoreNewLine = objects.property(Boolean) this.resources = resources } @@ -105,4 +112,8 @@ class LicenseProperties implements PatternFilterable { this.newLine.set(newLine) } + void ignoreNewLine(final Boolean ignoreNewLine) { + this.ignoreNewLine.set(ignoreNewLine) + } + } diff --git a/src/main/groovy/org/cadixdev/gradle/licenser/Licenser.groovy b/src/main/groovy/org/cadixdev/gradle/licenser/Licenser.groovy index f4a4a5c..90664f3 100644 --- a/src/main/groovy/org/cadixdev/gradle/licenser/Licenser.groovy +++ b/src/main/groovy/org/cadixdev/gradle/licenser/Licenser.groovy @@ -167,7 +167,9 @@ class Licenser implements Plugin { } return "" - }, (PatternSet) properties.filter, properties.newLine.orElse(extension.newLine),) + }, (PatternSet) properties.filter, + properties.newLine.orElse(extension.newLine), + properties.ignoreNewLine.orElse(extension.ignoreNewLine)) } private TaskProvider createTask( diff --git a/src/main/groovy/org/cadixdev/gradle/licenser/header/Header.groovy b/src/main/groovy/org/cadixdev/gradle/licenser/header/Header.groovy index 53abfe6..531dc79 100644 --- a/src/main/groovy/org/cadixdev/gradle/licenser/header/Header.groovy +++ b/src/main/groovy/org/cadixdev/gradle/licenser/header/Header.groovy @@ -50,16 +50,20 @@ class Header { @Input final Provider newLine + @Input + final Provider ignoreNewLine + private String text private final Map formatted = new IdentityHashMap<>() - Header(HeaderFormatRegistry registry, ListProperty keywords, Provider loader, PatternSet filter, Provider newLine) { + Header(HeaderFormatRegistry registry, ListProperty keywords, Provider loader, PatternSet filter, Provider newLine, Provider ignoreNewLine) { this.registry = registry this.keywords = keywords.map { it*.toLowerCase() } this.loader = loader this.filter = filter?.asSpec ?: Specs.satisfyAll() this.newLine = newLine + this.ignoreNewLine = ignoreNewLine } @Input diff --git a/src/main/groovy/org/cadixdev/gradle/licenser/header/PreparedCommentHeader.groovy b/src/main/groovy/org/cadixdev/gradle/licenser/header/PreparedCommentHeader.groovy index 2850705..c8da415 100644 --- a/src/main/groovy/org/cadixdev/gradle/licenser/header/PreparedCommentHeader.groovy +++ b/src/main/groovy/org/cadixdev/gradle/licenser/header/PreparedCommentHeader.groovy @@ -46,7 +46,7 @@ class PreparedCommentHeader implements PreparedHeader { boolean result = skipExistingHeaders ? HeaderHelper.contentStartsWithValidHeaderFormat(reader, format) : HeaderHelper.contentStartsWith(reader, this.lines.iterator(), format.skipLine) - if (result) { + if (result && !header.ignoreNewLine.get()) { def line = reader.readLine() if (header.newLine.get()) { result = line != null && line.isEmpty() @@ -212,7 +212,7 @@ class PreparedCommentHeader implements PreparedHeader { } // Look more carefully at the new lines - if (valid) { + if (valid && !header.ignoreNewLine.get()) { if (header.newLine.get()) { // Only valid if next line is empty valid = last != null && last.isEmpty()