
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
90 lines
2.0 KiB
Plaintext
90 lines
2.0 KiB
Plaintext
== Why is this an issue?
|
|
|
|
In Java 15 Text Blocks are official and can be used just like an ordinary String. However, when they are used to represent a big chunk of text, they should not be used directly in complex expressions, as it decreases the readability. In this case, it is better to extract the text block into a variable or a field.
|
|
|
|
|
|
This rule reports an issue when a text block longer than a number of lines given as a parameter is directly used within a lambda expression.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,java]
|
|
----
|
|
listOfString.stream()
|
|
.map(str -> !"""
|
|
<project>
|
|
<modelVersion>4.0.0</modelVersion>
|
|
<parent>
|
|
<groupId>com.mycompany.app</groupId>
|
|
<artifactId>my-app</artifactId>
|
|
<version>1</version>
|
|
</parent>
|
|
|
|
<groupId>com.mycompany.app</groupId>
|
|
<artifactId>my-module</artifactId>
|
|
<version>1</version>
|
|
</project>
|
|
""".equals(str));
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,java]
|
|
----
|
|
String myTextBlock = """
|
|
<project>
|
|
<modelVersion>4.0.0</modelVersion>
|
|
<parent>
|
|
<groupId>com.mycompany.app</groupId>
|
|
<artifactId>my-app</artifactId>
|
|
<version>1</version>
|
|
</parent>
|
|
|
|
<groupId>com.mycompany.app</groupId>
|
|
<artifactId>my-module</artifactId>
|
|
<version>1</version>
|
|
</project>
|
|
""";
|
|
|
|
listOfString.stream()
|
|
.map(str -> !myTextBlock.equals(str));
|
|
----
|
|
|
|
|
|
== Resources
|
|
|
|
* https://openjdk.java.net/jeps/378[JEP 378: Text Blocks]
|
|
* https://openjdk.org/projects/amber/guides/text-blocks-guide[Programmer's Guide To Text Blocks], by Jim Laskey and Stuart Marks
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Move this text block out of the lambda body and refactor it to a local variable or a static final field.
|
|
|
|
|
|
=== Parameters
|
|
|
|
.MaximumNumberOfLines
|
|
****
|
|
|
|
----
|
|
5
|
|
----
|
|
|
|
The maximum number of lines in a text block that can be nested into a complex expression.
|
|
****
|
|
|
|
|
|
=== Highlighting
|
|
|
|
Text block
|
|
|
|
|
|
endif::env-github,rspecator-view[]
|