Compare commits
65 commits
Author | SHA1 | Date | |
---|---|---|---|
ea10fd012f | |||
69a9eac414 | |||
5a2824507f | |||
3e350e617a | |||
432e5ffed1 | |||
e6d5c6c38f | |||
7d5b50641c | |||
30f92d1262 | |||
8d4643d99a | |||
0efd5ab2fe | |||
3df50c2e79 | |||
012cd14067 | |||
e39302bf8b | |||
41d6667dca | |||
7386332361 | |||
95971222f9 | |||
ae53af2ba6 | |||
7ad511a40c | |||
1115acaad4 | |||
d6f424972a | |||
99691fb2e9 | |||
48952f505f | |||
93d963398b | |||
1bef03ec79 | |||
d1f4a614fe | |||
33774b8a93 | |||
cbe95f7cc2 | |||
c993a3ab14 | |||
5b6181825d | |||
e04f46287b | |||
a1eb4cea1d | |||
21bd30166d | |||
e9f3079911 | |||
158167bebd | |||
324fc48c40 | |||
c6307577aa | |||
0a989544ae | |||
cf385a58cb | |||
05ac3a44e8 | |||
e4ccacab60 | |||
8b02e1e45a | |||
b26240df76 | |||
b2574279eb | |||
a6be88bf54 | |||
29255aae21 | |||
093a32cfdd | |||
4b101bb183 | |||
be15297cc5 | |||
7413565d87 | |||
1e62bc3fba | |||
32e95b2efa | |||
6fa52100ec | |||
61c200ee54 | |||
833eddf28c | |||
0a716260ac | |||
154359e0cd | |||
6946a3c26d | |||
251425c625 | |||
1523e0a2b7 | |||
6d518a8b64 | |||
4db7553ca1 | |||
a4d443d26b | |||
5f33e4263c | |||
40dd2ce116 | |||
e6104f1fed |
34 changed files with 1017 additions and 307 deletions
31
.github/workflows/bld.yml
vendored
31
.github/workflows/bld.yml
vendored
|
@ -4,35 +4,36 @@ on: [push, pull_request, workflow_dispatch]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-bld-project:
|
build-bld-project:
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
java-version: [17, 21, 22]
|
java-version: [ 17, 21, 24 ]
|
||||||
|
kotlin-version: [ 1.9.25, 2.0.21, 2.1.20 ]
|
||||||
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source repository
|
- name: Checkout source repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up JDK ${{ matrix.java-version }}
|
- name: Set up JDK ${{ matrix.java-version }}
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: "zulu"
|
distribution: "zulu"
|
||||||
java-version: ${{ matrix.java-version }}
|
java-version: ${{ matrix.java-version }}
|
||||||
|
|
||||||
- name: Grant execute permission for bld
|
- name: Download dependencies [examples]
|
||||||
run: chmod +x bld
|
working-directory: examples
|
||||||
|
|
||||||
- name: Download the dependencies
|
|
||||||
run: ./bld download
|
run: ./bld download
|
||||||
|
|
||||||
- name: Download the examples dependencies
|
- name: Run Detekt [examples]
|
||||||
run: |
|
working-directory: examples
|
||||||
cd examples
|
run: ./bld compile test-ci
|
||||||
chmod +x bld
|
|
||||||
./bld download
|
|
||||||
|
|
||||||
- name: Run tests with bld
|
- name: Download dependencies
|
||||||
|
run: ./bld download
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
run: ./bld compile test
|
run: ./bld compile test
|
12
.github/workflows/pages.yml
vendored
12
.github/workflows/pages.yml
vendored
|
@ -30,14 +30,14 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source repository
|
- name: Checkout source repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: 'zulu'
|
distribution: "zulu"
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
|
||||||
- name: Build Javadocs
|
- name: Build Javadocs
|
||||||
|
@ -47,11 +47,11 @@ jobs:
|
||||||
uses: actions/configure-pages@v3
|
uses: actions/configure-pages@v3
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-pages-artifact@v1
|
uses: actions/upload-pages-artifact@v3
|
||||||
with:
|
with:
|
||||||
# Upload generated Javadocs repository
|
# Upload generated Javadocs repository
|
||||||
path: 'build/javadoc/'
|
path: "build/javadoc/"
|
||||||
|
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
uses: actions/deploy-pages@v1
|
uses: actions/deploy-pages@v4
|
||||||
|
|
6
.idea/bld.xml
generated
Normal file
6
.idea/bld.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="BldConfiguration">
|
||||||
|
<events />
|
||||||
|
</component>
|
||||||
|
</project>
|
2
.idea/copyright/Apache_License.xml
generated
2
.idea/copyright/Apache_License.xml
generated
|
@ -1,6 +1,6 @@
|
||||||
<component name="CopyrightManager">
|
<component name="CopyrightManager">
|
||||||
<copyright>
|
<copyright>
|
||||||
<option name="notice" value="Copyright 2023-Copyright &#36;today.yearamp;#36;today.year 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. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
|
<option name="notice" value="Copyright 2023-&#36;today.year 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. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
|
||||||
<option name="myName" value="Apache License" />
|
<option name="myName" value="Apache License" />
|
||||||
</copyright>
|
</copyright>
|
||||||
</component>
|
</component>
|
13
.idea/icon.svg
generated
Normal file
13
.idea/icon.svg
generated
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 179 108" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
|
<g transform="matrix(1,0,0,1,-210.511,-96.3382)">
|
||||||
|
<g transform="matrix(1,0,0,1,-23.3386,-649.816)">
|
||||||
|
<g transform="matrix(0.221288,0,0,0.24,73.9536,390.254)">
|
||||||
|
<path d="M722.568,1482.92L722.568,1921.1L808.968,1921.1L808.968,1888.7C822.168,1907.9 846.168,1930.1 893.568,1930.1C933.168,1930.1 961.968,1917.5 985.368,1893.5C1012.97,1865.9 1027.37,1827.5 1027.37,1786.1C1027.37,1741.7 1011.17,1705.1 985.368,1680.5C961.968,1658.3 928.968,1644.5 892.368,1644.5C862.968,1644.5 830.568,1654.1 808.968,1683.5L808.968,1482.92L722.568,1482.92ZM871.368,1718.9C888.768,1718.9 903.768,1723.7 917.568,1736.9C930.168,1748.9 938.568,1766.3 938.568,1787.9C938.568,1807.7 930.168,1825.1 917.568,1837.1C904.368,1849.7 887.568,1855.7 872.568,1855.7C856.368,1855.7 837.168,1849.1 823.368,1835.9C813.168,1826.3 803.568,1810.1 803.568,1787.9C803.568,1765.1 812.568,1749.5 822.768,1738.7C836.568,1724.3 852.768,1718.9 871.368,1718.9Z" style="fill:rgb(35,146,255);fill-rule:nonzero;"/>
|
||||||
|
<rect x="1083.77" y="1482.92" width="86.4" height="438.182" style="fill:rgb(250,144,82);fill-rule:nonzero;"/>
|
||||||
|
<path d="M1531.37,1482.92L1444.97,1482.92L1444.97,1683.5C1423.37,1654.1 1390.97,1644.5 1361.57,1644.5C1324.97,1644.5 1291.97,1658.3 1268.57,1680.5C1242.77,1705.1 1226.57,1741.7 1226.57,1786.1C1226.57,1827.5 1240.97,1865.9 1268.57,1893.5C1291.97,1917.5 1320.77,1930.1 1360.37,1930.1C1407.77,1930.1 1431.77,1907.9 1444.97,1888.7L1444.97,1921.1L1531.37,1921.1L1531.37,1482.92ZM1382.57,1718.9C1401.17,1718.9 1417.37,1724.3 1431.17,1738.7C1441.37,1749.5 1450.37,1765.1 1450.37,1787.9C1450.37,1810.1 1440.77,1826.3 1430.57,1835.9C1416.77,1849.1 1397.57,1855.7 1381.37,1855.7C1366.37,1855.7 1349.57,1849.7 1336.37,1837.1C1323.77,1825.1 1315.37,1807.7 1315.37,1787.9C1315.37,1766.3 1323.77,1748.9 1336.37,1736.9C1350.17,1723.7 1365.17,1718.9 1382.57,1718.9Z" style="fill:rgb(35,146,255);fill-rule:nonzero;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
4
.idea/libraries/bld.xml
generated
4
.idea/libraries/bld.xml
generated
|
@ -2,12 +2,12 @@
|
||||||
<library name="bld">
|
<library name="bld">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0-sources.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<excluded>
|
<excluded>
|
||||||
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
||||||
|
|
4
.idea/libraries/compile.xml
generated
4
.idea/libraries/compile.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/compile" />
|
<root url="file://$PROJECT_DIR$/lib/compile" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
.idea/libraries/runtime.xml
generated
4
.idea/libraries/runtime.xml
generated
|
@ -8,7 +8,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
.idea/libraries/test.xml
generated
4
.idea/libraries/test.xml
generated
|
@ -8,7 +8,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/test" />
|
<root url="file://$PROJECT_DIR$/lib/test" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
14
.idea/misc.xml
generated
14
.idea/misc.xml
generated
|
@ -3,20 +3,6 @@
|
||||||
<component name="EntryPointsManager">
|
<component name="EntryPointsManager">
|
||||||
<pattern value="rife.bld.extension.DetektOperationBuild" method="pmd" />
|
<pattern value="rife.bld.extension.DetektOperationBuild" method="pmd" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PDMPlugin">
|
|
||||||
<option name="customRuleSets">
|
|
||||||
<list>
|
|
||||||
<option value="K:\java\semver\config\pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-generated-version/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-pitest/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-jacoco-report/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-checkstyle/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-exec/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-testng/config/pmd.xml" />
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
<option name="skipTestSources" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="17" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build" />
|
<output url="file://$PROJECT_DIR$/build" />
|
||||||
</component>
|
</component>
|
||||||
|
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
@ -9,7 +9,7 @@
|
||||||
],
|
],
|
||||||
"java.configuration.updateBuildConfiguration": "automatic",
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
"java.project.referencedLibraries": [
|
"java.project.referencedLibraries": [
|
||||||
"${HOME}/.bld/dist/bld-1.9.0.jar",
|
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||||
"lib/**/*.jar"
|
"lib/**/*.jar"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
16
README.md
16
README.md
|
@ -3,12 +3,20 @@
|
||||||
|
|
||||||
[](https://opensource.org/licenses/Apache-2.0)
|
[](https://opensource.org/licenses/Apache-2.0)
|
||||||
[](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
|
[](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
|
||||||
[](https://rife2.com/bld)
|
[](https://rife2.com/bld)
|
||||||
[](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-detekt)
|
[](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-detekt)
|
||||||
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-detekt)
|
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-detekt)
|
||||||
[](https://github.com/rife2/bld-detekt/actions/workflows/bld.yml)
|
[](https://github.com/rife2/bld-detekt/actions/workflows/bld.yml)
|
||||||
|
|
||||||
To install, please refer to the [extensions documentation](https://github.com/rife2/bld/wiki/Extensions).
|
To install the latest version, add the following to the `lib/bld/bld-wrapper.properties` file:
|
||||||
|
|
||||||
|
```properties
|
||||||
|
bld.extension-detekt=com.uwyn.rife2:bld-detekt
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation.
|
||||||
|
|
||||||
|
## Check Source Code with Detekt
|
||||||
|
|
||||||
To check all Kotlin source code located in the project, add the following to your build file:
|
To check all Kotlin source code located in the project, add the following to your build file:
|
||||||
```java
|
```java
|
||||||
|
@ -45,3 +53,7 @@ public void detektBaseline() throws ExitStatusException, IOException, Interrupte
|
||||||
- [View Examples Project](https://github.com/rife2/bld-detekt/tree/main/examples)
|
- [View Examples Project](https://github.com/rife2/bld-detekt/tree/main/examples)
|
||||||
|
|
||||||
Please check the [DetektOperation documentation](https://rife2.github.io/bld-detekt/rife/bld/extension/DetektOperation.html#method-summary) for all available configuration options.
|
Please check the [DetektOperation documentation](https://rife2.github.io/bld-detekt/rife/bld/extension/DetektOperation.html#method-summary) for all available configuration options.
|
||||||
|
|
||||||
|
## Template Project
|
||||||
|
|
||||||
|
There is also a [Kotlin Template Project](https://github.com/rife2/kotlin-bld-example) with support for [Dokka](https://github.com/rife2/bld-dokka) and the Detekt extensions.
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
MAIN="io.gitlab.arturbosch.detekt.cli.Main"
|
|
||||||
TMPNEW=/tmp/checkcliargs-new
|
|
||||||
TMPOLD=/tmp/checkcliargs-old
|
|
||||||
|
|
||||||
java -cp "lib/compile/*:examples/lib/bld/*" $MAIN --help >$TMPNEW
|
|
||||||
java -cp "examples/lib/bld/*" $MAIN --help >$TMPOLD
|
|
||||||
|
|
||||||
diff $TMPOLD $TMPNEW
|
|
||||||
|
|
||||||
rm -rf $TMPNEW $TMPOLD
|
|
|
@ -7,9 +7,9 @@
|
||||||
<!-- BEST PRACTICES -->
|
<!-- BEST PRACTICES -->
|
||||||
<rule ref="category/java/bestpractices.xml">
|
<rule ref="category/java/bestpractices.xml">
|
||||||
<exclude name="AvoidPrintStackTrace"/>
|
<exclude name="AvoidPrintStackTrace"/>
|
||||||
<exclude name="JUnit4TestShouldUseTestAnnotation"/>
|
|
||||||
<exclude name="JUnitTestContainsTooManyAsserts"/>
|
|
||||||
<exclude name="GuardLogStatement"/>
|
<exclude name="GuardLogStatement"/>
|
||||||
|
<exclude name="UnitTestContainsTooManyAsserts"/>
|
||||||
|
<exclude name="UnitTestShouldUseTestAnnotation"/>
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
<rule ref="category/java/bestpractices.xml/MissingOverride">
|
<rule ref="category/java/bestpractices.xml/MissingOverride">
|
||||||
|
@ -19,15 +19,15 @@
|
||||||
</properties>
|
</properties>
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
|
|
||||||
<!-- CODE STYLE -->
|
<!-- CODE STYLE -->
|
||||||
<rule ref="category/java/codestyle.xml">
|
<rule ref="category/java/codestyle.xml">
|
||||||
<exclude name="AtLeastOneConstructor"/>
|
<exclude name="AtLeastOneConstructor"/>
|
||||||
<exclude name="ClassNamingConventions"/>
|
<exclude name="ClassNamingConventions"/>
|
||||||
<exclude name="ConfusingTernary"/>
|
|
||||||
<exclude name="CommentDefaultAccessModifier"/>
|
<exclude name="CommentDefaultAccessModifier"/>
|
||||||
|
<exclude name="ConfusingTernary"/>
|
||||||
<exclude name="FieldNamingConventions"/>
|
<exclude name="FieldNamingConventions"/>
|
||||||
<exclude name="LocalVariableCouldBeFinal"/>
|
<exclude name="LocalVariableCouldBeFinal"/>
|
||||||
<exclude name="LocalVariableNamingConventions"/>
|
|
||||||
<exclude name="LongVariable"/>
|
<exclude name="LongVariable"/>
|
||||||
<exclude name="MethodArgumentCouldBeFinal"/>
|
<exclude name="MethodArgumentCouldBeFinal"/>
|
||||||
<exclude name="OnlyOneReturn"/>
|
<exclude name="OnlyOneReturn"/>
|
||||||
|
@ -35,8 +35,9 @@
|
||||||
<exclude name="ShortClassName"/>
|
<exclude name="ShortClassName"/>
|
||||||
<exclude name="ShortMethodName"/>
|
<exclude name="ShortMethodName"/>
|
||||||
<exclude name="ShortVariable"/>
|
<exclude name="ShortVariable"/>
|
||||||
<exclude name="UselessParentheses"/>
|
<exclude name="UseExplicitTypes"/>
|
||||||
<exclude name="UseUnderscoresInNumericLiterals"/>
|
<exclude name="UseUnderscoresInNumericLiterals"/>
|
||||||
|
<exclude name="UselessParentheses"/>
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
<rule ref="category/java/codestyle.xml/UnnecessaryImport">
|
<rule ref="category/java/codestyle.xml/UnnecessaryImport">
|
||||||
|
@ -52,8 +53,6 @@
|
||||||
<exclude name="AvoidUncheckedExceptionsInSignatures"/>
|
<exclude name="AvoidUncheckedExceptionsInSignatures"/>
|
||||||
<exclude name="CognitiveComplexity"/>
|
<exclude name="CognitiveComplexity"/>
|
||||||
<exclude name="CyclomaticComplexity"/>
|
<exclude name="CyclomaticComplexity"/>
|
||||||
<exclude name="ExcessiveClassLength"/>
|
|
||||||
<exclude name="ExcessiveMethodLength"/>
|
|
||||||
<exclude name="ExcessiveParameterList"/>
|
<exclude name="ExcessiveParameterList"/>
|
||||||
<exclude name="ExcessivePublicCount"/>
|
<exclude name="ExcessivePublicCount"/>
|
||||||
<exclude name="GodClass"/>
|
<exclude name="GodClass"/>
|
||||||
|
|
6
examples/.idea/bld.xml
generated
Normal file
6
examples/.idea/bld.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="BldConfiguration">
|
||||||
|
<events />
|
||||||
|
</component>
|
||||||
|
</project>
|
4
examples/.idea/libraries/bld.xml
generated
4
examples/.idea/libraries/bld.xml
generated
|
@ -2,12 +2,12 @@
|
||||||
<library name="bld">
|
<library name="bld">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0-sources.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<excluded>
|
<excluded>
|
||||||
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
||||||
|
|
4
examples/.idea/libraries/compile.xml
generated
4
examples/.idea/libraries/compile.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/compile" />
|
<root url="file://$PROJECT_DIR$/lib/compile" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
examples/.idea/libraries/runtime.xml
generated
4
examples/.idea/libraries/runtime.xml
generated
|
@ -8,7 +8,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
examples/.idea/libraries/test.xml
generated
4
examples/.idea/libraries/test.xml
generated
|
@ -8,7 +8,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/test" />
|
<root url="file://$PROJECT_DIR$/lib/test" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
2
examples/.vscode/settings.json
vendored
2
examples/.vscode/settings.json
vendored
|
@ -9,7 +9,7 @@
|
||||||
],
|
],
|
||||||
"java.configuration.updateBuildConfiguration": "automatic",
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
"java.project.referencedLibraries": [
|
"java.project.referencedLibraries": [
|
||||||
"${HOME}/.bld/dist/bld-1.9.0.jar",
|
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||||
"lib/**/*.jar"
|
"lib/**/*.jar"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
|
@ -1,8 +1,8 @@
|
||||||
bld.downloadExtensionJavadoc=false
|
bld.downloadExtensionJavadoc=false
|
||||||
bld.downloadExtensionSources=true
|
bld.downloadExtensionSources=true
|
||||||
bld.extensions=com.uwyn.rife2:bld-kotlin:0.9.3
|
|
||||||
bld.extension-detekt=com.uwyn.rife2:bld-detekt:0.9.3
|
|
||||||
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
|
||||||
bld.downloadLocation=
|
bld.downloadLocation=
|
||||||
|
bld.extension-detekt=com.uwyn.rife2:bld-detekt:0.9.10-SNAPSHOT
|
||||||
|
bld.extension-kotlin=com.uwyn.rife2:bld-kotlin:1.1.0-SNAPSHOT
|
||||||
|
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||||
bld.sourceDirectories=
|
bld.sourceDirectories=
|
||||||
bld.version=1.9.0
|
bld.version=2.2.1
|
||||||
|
|
|
@ -31,13 +31,14 @@ public class ExampleBuild extends Project {
|
||||||
|
|
||||||
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES);
|
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES);
|
||||||
|
|
||||||
final var kotlin = version(1, 9, 23);
|
final var kotlin = version(2, 1, 20);
|
||||||
scope(compile)
|
scope(compile)
|
||||||
.include(dependency("org.jetbrains.kotlin", "kotlin-stdlib", kotlin));
|
.include(dependency("org.jetbrains.kotlin", "kotlin-stdlib", kotlin));
|
||||||
scope(test)
|
scope(test)
|
||||||
.include(dependency("org.jetbrains.kotlin", "kotlin-test-junit5", kotlin))
|
.include(dependency("org.jetbrains.kotlin", "kotlin-test-junit5", kotlin))
|
||||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2)))
|
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
||||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2)));
|
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)))
|
||||||
|
.include(dependency("org.junit.platform", "junit-platform-launcher", version(1, 12, 1)));
|
||||||
|
|
||||||
// Include the Kotlin source directory when creating or publishing sources Java Archives
|
// Include the Kotlin source directory when creating or publishing sources Java Archives
|
||||||
jarSourcesOperation().sourceDirectories(new File(srcMainDirectory(), "kotlin"));
|
jarSourcesOperation().sourceDirectories(new File(srcMainDirectory(), "kotlin"));
|
||||||
|
@ -45,21 +46,21 @@ public class ExampleBuild extends Project {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
// Enable detailed logging
|
// Enable detailed logging
|
||||||
// var level = Level.ALL;
|
var level = Level.ALL;
|
||||||
// var logger = Logger.getLogger("rife.bld.extension");
|
var logger = Logger.getLogger("rife.bld.extension");
|
||||||
// var consoleHandler = new ConsoleHandler();
|
var consoleHandler = new ConsoleHandler();
|
||||||
|
|
||||||
// consoleHandler.setLevel(level);
|
consoleHandler.setLevel(level);
|
||||||
// logger.addHandler(consoleHandler);
|
logger.addHandler(consoleHandler);
|
||||||
// logger.setLevel(level);
|
logger.setLevel(level);
|
||||||
// logger.setUseParentHandlers(false);
|
logger.setUseParentHandlers(false);
|
||||||
|
|
||||||
new ExampleBuild().start(args);
|
new ExampleBuild().start(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(summary = "Compiles the Kotlin project")
|
@BuildCommand(summary = "Compiles the Kotlin project")
|
||||||
@Override
|
@Override
|
||||||
public void compile() throws IOException {
|
public void compile() throws Exception {
|
||||||
new CompileKotlinOperation()
|
new CompileKotlinOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
.execute();
|
.execute();
|
||||||
|
@ -100,4 +101,13 @@ public class ExampleBuild extends Project {
|
||||||
.input("src/test/kotlin")
|
.input("src/test/kotlin")
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BuildCommand(value = "test-ci", summary = "Run detek with a test baseline")
|
||||||
|
public void testCi() throws ExitStatusException, IOException, InterruptedException {
|
||||||
|
// Run detek with the test basline (for CI testing)
|
||||||
|
new DetektOperation()
|
||||||
|
.fromProject(this)
|
||||||
|
.baseline("src/test/resources/detekt-baseline.xml")
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
12
examples/src/test/resources/detekt-baseline.xml
Normal file
12
examples/src/test/resources/detekt-baseline.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
<SmellBaseline>
|
||||||
|
<ManuallySuppressedIssues/>
|
||||||
|
<CurrentIssues>
|
||||||
|
<ID>EmptyIfBlock:Example.kt$Example.Companion${ }</ID>
|
||||||
|
<ID>MagicNumber:Example.kt$Example$5</ID>
|
||||||
|
<ID>NewLineAtEndOfFile:ExampleTest.kt$com.example.ExampleTest.kt</ID>
|
||||||
|
<ID>ThrowingExceptionsWithoutMessageOrCause:Example.kt$Example.Companion$IllegalStateException()</ID>
|
||||||
|
<ID>UseCheckOrError:Example.kt$Example.Companion$throw IllegalStateException()</ID>
|
||||||
|
<ID>VariableNaming:Example.kt$Example$// https://detekt.dev/docs/rules/naming#variablenaming val Message: String get() = "Hello World!"</ID>
|
||||||
|
</CurrentIssues>
|
||||||
|
</SmellBaseline>
|
Binary file not shown.
|
@ -1,7 +1,8 @@
|
||||||
bld.downloadExtensionJavadoc=false
|
bld.downloadExtensionJavadoc=false
|
||||||
bld.downloadExtensionSources=true
|
bld.downloadExtensionSources=true
|
||||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.8
|
|
||||||
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
|
||||||
bld.downloadLocation=
|
bld.downloadLocation=
|
||||||
|
bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.4
|
||||||
|
bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.1
|
||||||
|
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||||
bld.sourceDirectories=
|
bld.sourceDirectories=
|
||||||
bld.version=1.9.0
|
bld.version=2.2.1
|
||||||
|
|
12
scripts/checkcliargs.sh
Executable file
12
scripts/checkcliargs.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
main=io.gitlab.arturbosch.detekt.cli.Main
|
||||||
|
new=/tmp/checkcliargs-new
|
||||||
|
old=/tmp/checkcliargs-old
|
||||||
|
|
||||||
|
java -cp "lib/compile/*:examples/lib/bld/*" $main --help >$new
|
||||||
|
java -cp "examples/lib/bld/*" $main --help >$old
|
||||||
|
|
||||||
|
diff $old $new
|
||||||
|
|
||||||
|
rm -rf $new $old
|
8
scripts/cliargs.sh
Executable file
8
scripts/cliargs.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
java -cp "lib/compile/*:examples/lib/bld/*" io.gitlab.arturbosch.detekt.cli.Main --help |\
|
||||||
|
grep "^ --.*" |\
|
||||||
|
sed -e "s/ //" -e "s/, .*//" -e '/version/d' -e '/help/d' |\
|
||||||
|
sort |\
|
||||||
|
sed -e '$s/,//' > "src/test/resources/detekt-args.txt"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2024 the original author or authors.
|
* Copyright 2023-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.
|
||||||
|
@ -23,9 +23,9 @@ import rife.bld.publish.PublishLicense;
|
||||||
import rife.bld.publish.PublishScm;
|
import rife.bld.publish.PublishScm;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import static rife.bld.dependencies.Repository.MAVEN_CENTRAL;
|
import static rife.bld.dependencies.Repository.*;
|
||||||
import static rife.bld.dependencies.Repository.RIFE2_RELEASES;
|
|
||||||
import static rife.bld.dependencies.Scope.compile;
|
import static rife.bld.dependencies.Scope.compile;
|
||||||
import static rife.bld.dependencies.Scope.test;
|
import static rife.bld.dependencies.Scope.test;
|
||||||
import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING;
|
import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING;
|
||||||
|
@ -34,20 +34,22 @@ public class DetektOperationBuild extends Project {
|
||||||
public DetektOperationBuild() {
|
public DetektOperationBuild() {
|
||||||
pkg = "rife.bld.extension";
|
pkg = "rife.bld.extension";
|
||||||
name = "DetektOperation";
|
name = "DetektOperation";
|
||||||
version = version(0, 9, 3);
|
version = version(0, 9, 10, "SNAPSHOT");
|
||||||
|
|
||||||
javaRelease = 17;
|
javaRelease = 17;
|
||||||
|
|
||||||
downloadSources = true;
|
downloadSources = true;
|
||||||
autoDownloadPurge = true;
|
autoDownloadPurge = true;
|
||||||
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
|
|
||||||
|
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
|
||||||
|
|
||||||
scope(compile)
|
scope(compile)
|
||||||
.include(dependency("com.uwyn.rife2", "bld", version(1, 9, 0)))
|
.include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1)))
|
||||||
.include(dependency("io.gitlab.arturbosch.detekt", "detekt-cli", version(1, 23, 6)));
|
.include(dependency("io.gitlab.arturbosch.detekt", "detekt-cli", version(1, 23, 8)));
|
||||||
scope(test)
|
scope(test)
|
||||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2)))
|
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
||||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2)))
|
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)))
|
||||||
.include(dependency("org.assertj", "assertj-core", version(3, 25, 3)));
|
.include(dependency("org.assertj", "assertj-core", version(3, 27, 3)));
|
||||||
javadocOperation()
|
javadocOperation()
|
||||||
.javadocOptions()
|
.javadocOptions()
|
||||||
.author()
|
.author()
|
||||||
|
@ -57,25 +59,23 @@ public class DetektOperationBuild extends Project {
|
||||||
|
|
||||||
publishOperation()
|
publishOperation()
|
||||||
.repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2"))
|
.repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2"))
|
||||||
|
.repository(repository("github"))
|
||||||
.info()
|
.info()
|
||||||
.groupId("com.uwyn.rife2")
|
.groupId("com.uwyn.rife2")
|
||||||
.artifactId("bld-detekt")
|
.artifactId("bld-detekt")
|
||||||
.description("bld Detekt Extension")
|
.description("bld Detekt Extension")
|
||||||
.url("https://github.com/rife2/bld-detekt")
|
.url("https://github.com/rife2/bld-detekt")
|
||||||
.developer(
|
.developer(new PublishDeveloper()
|
||||||
new PublishDeveloper()
|
|
||||||
.id("ethauvin")
|
.id("ethauvin")
|
||||||
.name("Erik C. Thauvin")
|
.name("Erik C. Thauvin")
|
||||||
.email("erik@thauvin.net")
|
.email("erik@thauvin.net")
|
||||||
.url("https://erik.thauvin.net/")
|
.url("https://erik.thauvin.net/")
|
||||||
)
|
)
|
||||||
.license(
|
.license(new PublishLicense()
|
||||||
new PublishLicense()
|
|
||||||
.name("The Apache License, Version 2.0")
|
.name("The Apache License, Version 2.0")
|
||||||
.url("http://www.apache.org/licenses/LICENSE-2.0.txt")
|
.url("https://www.apache.org/licenses/LICENSE-2.0.txt")
|
||||||
)
|
)
|
||||||
.scm(
|
.scm(new PublishScm()
|
||||||
new PublishScm()
|
|
||||||
.connection("scm:git:https://github.com/rife2/bld-detekt.git")
|
.connection("scm:git:https://github.com/rife2/bld-detekt.git")
|
||||||
.developerConnection("scm:git:git@github.com:rife2/bld-detekt.git")
|
.developerConnection("scm:git:git@github.com:rife2/bld-detekt.git")
|
||||||
.url("https://github.com/rife2/bld-detekt")
|
.url("https://github.com/rife2/bld-detekt")
|
||||||
|
@ -88,12 +88,25 @@ public class DetektOperationBuild extends Project {
|
||||||
new DetektOperationBuild().start(args);
|
new DetektOperationBuild().start(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(summary = "Check source code with PMD")
|
@BuildCommand(summary = "Checks source code with PMD")
|
||||||
public void pmd() {
|
public void pmd() throws Exception {
|
||||||
new PmdOperation()
|
new PmdOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
.ruleSets("config/pmd.xml")
|
.ruleSets("config/pmd.xml")
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void test() throws Exception {
|
||||||
|
var os = System.getProperty("os.name");
|
||||||
|
if (os != null && os.toLowerCase(Locale.US).contains("linux")) {
|
||||||
|
new ExecOperation()
|
||||||
|
.fromProject(this)
|
||||||
|
.command("scripts/cliargs.sh")
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
super.test();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2024 the original author or authors.
|
* Copyright 2023-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.
|
||||||
|
@ -17,9 +17,14 @@
|
||||||
package rife.bld.extension;
|
package rife.bld.extension;
|
||||||
|
|
||||||
import rife.bld.BaseProject;
|
import rife.bld.BaseProject;
|
||||||
|
import rife.bld.extension.detekt.Report;
|
||||||
|
import rife.bld.extension.detekt.ReportId;
|
||||||
import rife.bld.operations.AbstractProcessOperation;
|
import rife.bld.operations.AbstractProcessOperation;
|
||||||
|
import rife.bld.operations.exceptions.ExitStatusException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -43,19 +48,21 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
"kotlin-reflect-",
|
"kotlin-reflect-",
|
||||||
"kotlin-script-runtime-",
|
"kotlin-script-runtime-",
|
||||||
"kotlin-stdlib-",
|
"kotlin-stdlib-",
|
||||||
"kotlin-stdlib-jdk7-",
|
"kotlinx-coroutines-",
|
||||||
"kotlin-stdlib-jdk8-",
|
|
||||||
"kotlinx-html-jvm-",
|
"kotlinx-html-jvm-",
|
||||||
"kotlinx-serialization-",
|
"kotlinx-serialization-",
|
||||||
|
"poko-annotations-jvm-",
|
||||||
"sarif4k-jvm-",
|
"sarif4k-jvm-",
|
||||||
"snakeyaml-engine-",
|
"snakeyaml-engine-",
|
||||||
"trove4j-");
|
"trove4j-");
|
||||||
private static final Logger LOGGER = Logger.getLogger(DetektReport.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(DetektOperation.class.getName());
|
||||||
private final Collection<String> classpath_ = new ArrayList<>();
|
private final Collection<File> classpath_ = new ArrayList<>();
|
||||||
private final Collection<String> config_ = new ArrayList<>();
|
private final Collection<File> config_ = new ArrayList<>();
|
||||||
private final Collection<String> input_ = new ArrayList<>();
|
private final Collection<String> excludes_ = new ArrayList<>();
|
||||||
private final Collection<String> plugins_ = new ArrayList<>();
|
private final Collection<String> includes_ = new ArrayList<>();
|
||||||
private final Collection<DetektReport> report_ = new ArrayList<>();
|
private final Collection<File> input_ = new ArrayList<>();
|
||||||
|
private final Collection<File> plugins_ = new ArrayList<>();
|
||||||
|
private final Collection<Report> report_ = new ArrayList<>();
|
||||||
private boolean allRules_;
|
private boolean allRules_;
|
||||||
private boolean autoCorrect_;
|
private boolean autoCorrect_;
|
||||||
private String basePath_;
|
private String basePath_;
|
||||||
|
@ -65,9 +72,7 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
private boolean createBaseline_;
|
private boolean createBaseline_;
|
||||||
private boolean debug_;
|
private boolean debug_;
|
||||||
private boolean disableDefaultRuleSets_;
|
private boolean disableDefaultRuleSets_;
|
||||||
private String excludes_;
|
|
||||||
private boolean generateConfig_;
|
private boolean generateConfig_;
|
||||||
private String includes_;
|
|
||||||
private String jdkHome_;
|
private String jdkHome_;
|
||||||
private String jvmTarget_;
|
private String jvmTarget_;
|
||||||
private String languageVersion_;
|
private String languageVersion_;
|
||||||
|
@ -114,6 +119,39 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies a directory as the base path. Currently, it impacts all file
|
||||||
|
* paths in the formatted reports. File paths in console output and txt
|
||||||
|
* report are not affected and remain as absolute paths.
|
||||||
|
*
|
||||||
|
* @param path the directory path
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public DetektOperation basePath(File path) {
|
||||||
|
return basePath(path.getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the base path.
|
||||||
|
*
|
||||||
|
* @return the directory path
|
||||||
|
*/
|
||||||
|
public String basePath() {
|
||||||
|
return basePath_;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies a directory as the base path. Currently, it impacts all file
|
||||||
|
* paths in the formatted reports. File paths in console output and txt
|
||||||
|
* report are not affected and remain as absolute paths.
|
||||||
|
*
|
||||||
|
* @param path the directory path
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public DetektOperation basePath(Path path) {
|
||||||
|
return basePath(path.toFile().getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If a baseline xml file is passed in, only new code smells not in the
|
* If a baseline xml file is passed in, only new code smells not in the
|
||||||
* baseline are printed in the console.
|
* baseline are printed in the console.
|
||||||
|
@ -126,6 +164,37 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a baseline xml file is passed in, only new code smells not in the
|
||||||
|
* baseline are printed in the console.
|
||||||
|
*
|
||||||
|
* @param baseline the baseline xml file
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public DetektOperation baseline(File baseline) {
|
||||||
|
return baseline(baseline.getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a baseline xml file is passed in, only new code smells not in the
|
||||||
|
* baseline are printed in the console.
|
||||||
|
*
|
||||||
|
* @param baseline the baseline xml file
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public DetektOperation baseline(Path baseline) {
|
||||||
|
return baseline(baseline.toFile().getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the baseline xml file.
|
||||||
|
*
|
||||||
|
* @return the baseline xml file
|
||||||
|
*/
|
||||||
|
public String baseline() {
|
||||||
|
return baseline_;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preconfigures detekt with a bunch of rules and some opinionated defaults
|
* Preconfigures detekt with a bunch of rules and some opinionated defaults
|
||||||
* for you. Allows additional provided configurations to override the
|
* for you. Allows additional provided configurations to override the
|
||||||
|
@ -140,49 +209,151 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPERIMENTAL: Paths where to find user class files and depending jar files.
|
* EXPERIMENTAL: Paths where to find user class files and jar dependencies.
|
||||||
* Used for type resolution.
|
* Used for type resolution.
|
||||||
*
|
*
|
||||||
* @param paths one or more files
|
* @param paths one or more files
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
|
* @see #classPath(Collection)
|
||||||
*/
|
*/
|
||||||
public DetektOperation classPath(String... paths) {
|
public DetektOperation classPath(File... paths) {
|
||||||
classpath_.addAll(List.of(paths));
|
return classPath(List.of(paths));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EXPERIMENTAL: Paths where to find user class files and depending jar files.
|
* EXPERIMENTAL: Paths where to find user class files and jar dependencies.
|
||||||
* Used for type resolution.
|
* Used for type resolution.
|
||||||
*
|
*
|
||||||
* @param paths the list of files
|
* @param paths one or more files
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
|
* @see #classPathPaths(Collection)
|
||||||
*/
|
*/
|
||||||
public DetektOperation classPath(Collection<String> paths) {
|
public DetektOperation classPath(Path... paths) {
|
||||||
|
return classPathPaths(List.of(paths));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EXPERIMENTAL: Paths where to find user class files and jar dependencies.
|
||||||
|
* Used for type resolution.
|
||||||
|
*
|
||||||
|
* @param paths one or more files
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #classPathStrings(Collection)
|
||||||
|
*/
|
||||||
|
public DetektOperation classPath(String... paths) {
|
||||||
|
return classPathStrings(List.of(paths));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EXPERIMENTAL: Paths where to find user class files and jar dependencies.
|
||||||
|
* Used for type resolution.
|
||||||
|
*
|
||||||
|
* @param paths the paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #classPath(File...)
|
||||||
|
*/
|
||||||
|
public DetektOperation classPath(Collection<File> paths) {
|
||||||
classpath_.addAll(paths);
|
classpath_.addAll(paths);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the config file ({@code path/to/config.yml}).
|
* Paths where to find user class files and jar dependencies.
|
||||||
|
*
|
||||||
|
* @return the paths
|
||||||
|
*/
|
||||||
|
public Collection<File> classPath() {
|
||||||
|
return classpath_;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EXPERIMENTAL: Paths where to find user class files and jar dependencies.
|
||||||
|
* Used for type resolution.
|
||||||
|
*
|
||||||
|
* @param paths the paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #classPath(Path...)
|
||||||
|
*/
|
||||||
|
public DetektOperation classPathPaths(Collection<Path> paths) {
|
||||||
|
return classPath(paths.stream().map(Path::toFile).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EXPERIMENTAL: Paths where to find user class files and jar dependencies.
|
||||||
|
* Used for type resolution.
|
||||||
|
*
|
||||||
|
* @param paths the paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #classPath(String...)
|
||||||
|
*/
|
||||||
|
public DetektOperation classPathStrings(Collection<String> paths) {
|
||||||
|
return classPath(paths.stream().map(File::new).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to the config files ({@code path/to/config.yml}).
|
||||||
*
|
*
|
||||||
* @param configs one or more config files
|
* @param configs one or more config files
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
|
* @see #config(Collection)
|
||||||
|
*/
|
||||||
|
public DetektOperation config(File... configs) {
|
||||||
|
return config(List.of(configs));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to the config files ({@code path/to/config.yml}).
|
||||||
|
*
|
||||||
|
* @param configs one or more config files
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #configPaths(Collection)
|
||||||
|
*/
|
||||||
|
public DetektOperation config(Path... configs) {
|
||||||
|
return configPaths(List.of(configs));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to the config files ({@code path/to/config.yml}).
|
||||||
|
*
|
||||||
|
* @param configs one or more config files
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #configStrings(Collection)
|
||||||
*/
|
*/
|
||||||
public DetektOperation config(String... configs) {
|
public DetektOperation config(String... configs) {
|
||||||
config_.addAll(List.of(configs));
|
return configStrings(List.of(configs));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to the config files ({@code path/to/config.yml}).
|
||||||
|
*
|
||||||
|
* @param configs the config files
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #config(File...)
|
||||||
|
*/
|
||||||
|
public DetektOperation config(Collection<File> configs) {
|
||||||
|
config_.addAll(configs);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the config file ({@code path/to/config.yml}).
|
* Paths to config files.
|
||||||
*
|
*
|
||||||
* @param configs the list pf config files
|
* @return the config files paths.
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public DetektOperation config(Collection<String> configs) {
|
public Collection<File> config() {
|
||||||
config_.addAll(configs);
|
return config_;
|
||||||
return this;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to the config files ({@code path/to/config.yml}).
|
||||||
|
*
|
||||||
|
* @param configs the config files
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #config(Path...)
|
||||||
|
*/
|
||||||
|
public DetektOperation configPaths(Collection<Path> configs) {
|
||||||
|
return config(configs.stream().map(Path::toFile).toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -196,6 +367,47 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path to the config resource on detekt's classpath ({@code path/to/config.yml}).
|
||||||
|
*
|
||||||
|
* @param resource the config resource path
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public DetektOperation configResource(File resource) {
|
||||||
|
return configResource(resource.getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path to the config resource on detekt's classpath ({@code path/to/config.yml}).
|
||||||
|
*
|
||||||
|
* @param resource the config resource path
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public DetektOperation configResource(Path resource) {
|
||||||
|
return configResource(resource.toFile().getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the path of the config resource.
|
||||||
|
*
|
||||||
|
* @return the config resource path
|
||||||
|
*/
|
||||||
|
public String configResource() {
|
||||||
|
return configResource_;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to the config files ({@code path/to/config.yml}).
|
||||||
|
*
|
||||||
|
* @param configs the config files
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #config(String...)
|
||||||
|
*/
|
||||||
|
public DetektOperation configStrings(Collection<String> configs) {
|
||||||
|
config_.addAll(configs.stream().map(File::new).toList());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Treats current analysis findings as a smell baseline for future detekt
|
* Treats current analysis findings as a smell baseline for future detekt
|
||||||
* runs.
|
* runs.
|
||||||
|
@ -233,25 +445,68 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
/**
|
/**
|
||||||
* Globbing patterns describing paths to exclude from the analysis.
|
* Globbing patterns describing paths to exclude from the analysis.
|
||||||
*
|
*
|
||||||
* @param patterns the patterns
|
* @param patterns one or more pattern
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
*/
|
*/
|
||||||
public DetektOperation excludes(String patterns) {
|
public DetektOperation excludes(String... patterns) {
|
||||||
excludes_ = patterns;
|
return excludes(List.of(patterns));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Globbing patterns describing paths to exclude from the analysis.
|
||||||
|
*
|
||||||
|
* @param patterns a collection of patterns
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public DetektOperation excludes(Collection<String> patterns) {
|
||||||
|
excludes_.addAll(patterns);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the globbing patterns describing paths to exclude from the analysis.
|
||||||
|
*
|
||||||
|
* @return the globbing patterns
|
||||||
|
*/
|
||||||
|
public Collection<String> excludes() {
|
||||||
|
return excludes_;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the operation.
|
||||||
|
*
|
||||||
|
* @throws InterruptedException when the operation was interrupted
|
||||||
|
* @throws IOException when an exception occurred during the execution of the process
|
||||||
|
* @throws ExitStatusException when the exit status was changed during the operation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void execute() throws IOException, InterruptedException, ExitStatusException {
|
||||||
|
if (project_ == null) {
|
||||||
|
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
||||||
|
LOGGER.severe("A project must be specified.");
|
||||||
|
}
|
||||||
|
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
|
||||||
|
} else {
|
||||||
|
super.execute();
|
||||||
|
if (successful_ && LOGGER.isLoggable(Level.INFO) && !silent()) {
|
||||||
|
if (createBaseline_) {
|
||||||
|
LOGGER.info("Detekt baseline generated successfully: "
|
||||||
|
+ "file://" + new File(baseline_).toURI().getPath());
|
||||||
|
} else {
|
||||||
|
LOGGER.info("Detekt operation finished successfully.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Part of the {@link #execute} operation, constructs the command list
|
* Part of the {@link #execute} operation, constructs the command list
|
||||||
* to use for building the process.
|
* to use for building the process.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected List<String> executeConstructProcessCommandList() {
|
protected List<String> executeConstructProcessCommandList() {
|
||||||
if (project_ == null) {
|
|
||||||
LOGGER.severe("A project must be specified.");
|
|
||||||
}
|
|
||||||
|
|
||||||
final List<String> args = new ArrayList<>();
|
final List<String> args = new ArrayList<>();
|
||||||
|
if (project_ != null) {
|
||||||
args.add(javaTool());
|
args.add(javaTool());
|
||||||
args.add("-cp");
|
args.add("-cp");
|
||||||
args.add(getDetektJarList(project_.libBldDirectory()));
|
args.add(getDetektJarList(project_.libBldDirectory()));
|
||||||
|
@ -287,13 +542,13 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
// classpath
|
// classpath
|
||||||
if (!classpath_.isEmpty()) {
|
if (!classpath_.isEmpty()) {
|
||||||
args.add("--classpath");
|
args.add("--classpath");
|
||||||
args.add(String.join(File.pathSeparator, classpath_.stream().filter(this::isNotBlank).toList()));
|
args.add(String.join(File.pathSeparator, classpath_.stream().map(File::getAbsolutePath).toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// config
|
// config
|
||||||
if (!config_.isEmpty()) {
|
if (!config_.isEmpty()) {
|
||||||
args.add("-config");
|
args.add("-config");
|
||||||
args.add(String.join(";", config_.stream().filter(this::isNotBlank).toList()));
|
args.add(String.join(";", config_.stream().map(File::getAbsolutePath).toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// config-resource
|
// config-resource
|
||||||
|
@ -318,9 +573,9 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// excludes
|
// excludes
|
||||||
if (isNotBlank(excludes_)) {
|
if (!excludes_.isEmpty()) {
|
||||||
args.add("--excludes");
|
args.add("--excludes");
|
||||||
args.add(excludes_);
|
args.add(String.join(",", excludes_));
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate-config
|
// generate-config
|
||||||
|
@ -329,15 +584,15 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// includes
|
// includes
|
||||||
if (isNotBlank(includes_)) {
|
if (!includes_.isEmpty()) {
|
||||||
args.add("--includes");
|
args.add("--includes");
|
||||||
args.add(includes_);
|
args.add(String.join(",", includes_));
|
||||||
}
|
}
|
||||||
|
|
||||||
// input
|
// input
|
||||||
if (!input_.isEmpty()) {
|
if (!input_.isEmpty()) {
|
||||||
args.add("--input");
|
args.add("--input");
|
||||||
args.add(String.join(",", input_.stream().filter(this::isNotBlank).toList()));
|
args.add(String.join(",", input_.stream().map(File::getAbsolutePath).toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// jdk-home
|
// jdk-home
|
||||||
|
@ -372,20 +627,21 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
// plugins
|
// plugins
|
||||||
if (!plugins_.isEmpty()) {
|
if (!plugins_.isEmpty()) {
|
||||||
args.add("--plugins");
|
args.add("--plugins");
|
||||||
args.add(String.join(",", plugins_.stream().filter(this::isNotBlank).toList()));
|
args.add(String.join(",", plugins_.stream().map(File::getAbsolutePath).toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// report
|
// report
|
||||||
if (!report_.isEmpty()) {
|
if (!report_.isEmpty()) {
|
||||||
report_.forEach(it -> {
|
report_.forEach(it -> {
|
||||||
args.add("-r");
|
args.add("--report");
|
||||||
args.add(it.id().name().toLowerCase() + ":" + it.path());
|
args.add(it.id().name().toLowerCase() + ":" + it.path());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LOGGER.isLoggable(Level.FINE)) {
|
if (LOGGER.isLoggable(Level.FINE) && !silent()) {
|
||||||
LOGGER.fine(String.join(" ", args.stream().filter(this::isNotBlank).toList()));
|
LOGGER.fine(String.join(" ", args.stream().filter(this::isNotBlank).toList()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
@ -409,7 +665,7 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
if (baseline.exists()) {
|
if (baseline.exists()) {
|
||||||
baseline_ = baseline.getAbsolutePath();
|
baseline_ = baseline.getAbsolutePath();
|
||||||
}
|
}
|
||||||
excludes(".*/build/.*,.*/resources/.*");
|
excludes(".*/build/.*", ".*/resources/.*");
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,9 +682,7 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Retrieves the matching JARs files from the given directory.
|
||||||
* Retrieves the matching JARs files from the given directory.
|
|
||||||
*/
|
|
||||||
private String getDetektJarList(File directory) {
|
private String getDetektJarList(File directory) {
|
||||||
var jars = new ArrayList<String>();
|
var jars = new ArrayList<String>();
|
||||||
|
|
||||||
|
@ -447,28 +701,49 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return String.join(":", jars);
|
return String.join(File.pathSeparator, jars);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Globbing patterns describing paths to include in the analysis. Useful in
|
* Globbing patterns describing paths to include in the analysis. Useful in
|
||||||
* combination with {@link #excludes(String) excludes} patterns.
|
* combination with {@link #excludes() excludes} patterns.
|
||||||
*
|
*
|
||||||
* @param patterns the patterns
|
* @param patterns one or more patterns
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
*/
|
*/
|
||||||
public DetektOperation includes(String patterns) {
|
public DetektOperation includes(String... patterns) {
|
||||||
includes_ = patterns;
|
return includes(List.of(patterns));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Globbing patterns describing paths to include in the analysis. Useful in
|
||||||
|
* combination with {@link #excludes() excludes} patterns.
|
||||||
|
*
|
||||||
|
* @param patterns a collection of patterns
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public DetektOperation includes(Collection<String> patterns) {
|
||||||
|
includes_.addAll(patterns);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the globbing patterns describing paths to include in the analysis.
|
||||||
|
*
|
||||||
|
* @return the globbing patterns
|
||||||
|
*/
|
||||||
|
public Collection<String> includes() {
|
||||||
|
return includes_;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Input paths to analyze. If not specified the current working directory is used.
|
* Input paths to analyze. If not specified the current working directory is used.
|
||||||
*
|
*
|
||||||
* @param paths the list of paths
|
* @param paths the paths
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
|
* @see #input(Collection)
|
||||||
*/
|
*/
|
||||||
public DetektOperation input(Collection<String> paths) {
|
public DetektOperation input(Collection<File> paths) {
|
||||||
input_.addAll(paths);
|
input_.addAll(paths);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -478,10 +753,32 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
*
|
*
|
||||||
* @param paths one or more paths
|
* @param paths one or more paths
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
|
* @see #inputStrings(Collection)
|
||||||
*/
|
*/
|
||||||
public DetektOperation input(String... paths) {
|
public DetektOperation input(String... paths) {
|
||||||
input_.addAll(List.of(paths));
|
return inputStrings(List.of(paths));
|
||||||
return this;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Input paths to analyze. If not specified the current working directory is used.
|
||||||
|
*
|
||||||
|
* @param paths one or more paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #input(Collection)
|
||||||
|
*/
|
||||||
|
public DetektOperation input(File... paths) {
|
||||||
|
return input(List.of(paths));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Input paths to analyze. If not specified the current working directory is used.
|
||||||
|
*
|
||||||
|
* @param paths one or more paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #inputPaths(Collection)
|
||||||
|
*/
|
||||||
|
public DetektOperation input(Path... paths) {
|
||||||
|
return inputPaths(List.of(paths));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -489,10 +786,32 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
*
|
*
|
||||||
* @return the input paths
|
* @return the input paths
|
||||||
*/
|
*/
|
||||||
public Collection<String> input() {
|
public Collection<File> input() {
|
||||||
return input_;
|
return input_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Input paths to analyze. If not specified the current working directory is used.
|
||||||
|
*
|
||||||
|
* @param paths the paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #input(Path...)
|
||||||
|
*/
|
||||||
|
public DetektOperation inputPaths(Collection<Path> paths) {
|
||||||
|
return input(paths.stream().map(Path::toFile).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Input paths to analyze. If not specified the current working directory is used.
|
||||||
|
*
|
||||||
|
* @param paths the paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #input(String...)
|
||||||
|
*/
|
||||||
|
public DetektOperation inputStrings(Collection<String> paths) {
|
||||||
|
return input(paths.stream().map(File::new).toList());
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determines if a string is not blank.
|
* Determines if a string is not blank.
|
||||||
*/
|
*/
|
||||||
|
@ -570,30 +889,84 @@ public class DetektOperation extends AbstractProcessOperation<DetektOperation> {
|
||||||
*
|
*
|
||||||
* @param jars one or more jars
|
* @param jars one or more jars
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
|
* @see #pluginsStrings(Collection)
|
||||||
*/
|
*/
|
||||||
public DetektOperation plugins(String... jars) {
|
public DetektOperation plugins(String... jars) {
|
||||||
plugins_.addAll(List.of(jars));
|
return pluginsStrings(List.of(jars));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extra paths to plugin jars.
|
* Extra paths to plugin jars.
|
||||||
*
|
*
|
||||||
* @param jars the list of jars
|
* @param jars one or more jars
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
|
* @see #plugins(Collection)
|
||||||
*/
|
*/
|
||||||
public DetektOperation plugins(Collection<String> jars) {
|
public DetektOperation plugins(File... jars) {
|
||||||
|
return plugins(List.of(jars));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra paths to plugin jars.
|
||||||
|
*
|
||||||
|
* @param jars one or more jars
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #pluginsPaths(Collection)
|
||||||
|
*/
|
||||||
|
public DetektOperation plugins(Path... jars) {
|
||||||
|
return pluginsPaths(List.of(jars));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra paths to plugin jars.
|
||||||
|
*
|
||||||
|
* @param jars the jars paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #input(File...)
|
||||||
|
*/
|
||||||
|
public DetektOperation plugins(Collection<File> jars) {
|
||||||
plugins_.addAll(jars);
|
plugins_.addAll(jars);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a report for given {@link DetektReportId report-id} and stores it on given 'path'.
|
* Extra path to plugins jars.
|
||||||
|
*
|
||||||
|
* @return the jars paths
|
||||||
|
*/
|
||||||
|
public Collection<File> plugins() {
|
||||||
|
return plugins_;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra paths to plugin jars.
|
||||||
|
*
|
||||||
|
* @param jars the jars paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #plugins(Path...)
|
||||||
|
*/
|
||||||
|
public DetektOperation pluginsPaths(Collection<Path> jars) {
|
||||||
|
return plugins(jars.stream().map(Path::toFile).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra paths to plugin jars.
|
||||||
|
*
|
||||||
|
* @param jars the jars paths
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #plugins(String...)
|
||||||
|
*/
|
||||||
|
public DetektOperation pluginsStrings(Collection<String> jars) {
|
||||||
|
return plugins(jars.stream().map(File::new).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a report for given {@link ReportId report-id} and stores it on given 'path'.
|
||||||
*
|
*
|
||||||
* @param reports one or more reports
|
* @param reports one or more reports
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
*/
|
*/
|
||||||
public DetektOperation report(DetektReport... reports) {
|
public DetektOperation report(Report... reports) {
|
||||||
report_.addAll(List.of(reports));
|
report_.addAll(List.of(reports));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2024 the original author or authors.
|
* Copyright 2023-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.
|
||||||
|
@ -14,15 +14,15 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package rife.bld.extension;
|
package rife.bld.extension.detekt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines a report for given report-id to be stores in the given path.
|
* Defines a report for the given report-id to be stored on the given path.
|
||||||
*
|
*
|
||||||
* @param id the report-id
|
* @param id the report-id
|
||||||
* @param path the given path
|
* @param path the given path
|
||||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public record DetektReport(DetektReportId id, String path) {
|
public record Report(ReportId id, String path) {
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2024 the original author or authors.
|
* Copyright 2023-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.
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package rife.bld.extension;
|
package rife.bld.extension.detekt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The report-id values.
|
* The report-id values.
|
||||||
|
@ -22,6 +22,6 @@ package rife.bld.extension;
|
||||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public enum DetektReportId {
|
public enum ReportId {
|
||||||
TXT, XML, HTML, MD, SARIF
|
TXT, XML, HTML, MD, SARIF
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2024 the original author or authors.
|
* Copyright 2023-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.
|
||||||
|
@ -16,14 +16,21 @@
|
||||||
|
|
||||||
package rife.bld.extension;
|
package rife.bld.extension;
|
||||||
|
|
||||||
|
import org.assertj.core.api.AutoCloseableSoftAssertions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.condition.EnabledOnOs;
|
||||||
|
import org.junit.jupiter.api.condition.OS;
|
||||||
|
import rife.bld.BaseProject;
|
||||||
import rife.bld.blueprints.BaseProjectBlueprint;
|
import rife.bld.blueprints.BaseProjectBlueprint;
|
||||||
|
import rife.bld.extension.detekt.Report;
|
||||||
|
import rife.bld.extension.detekt.ReportId;
|
||||||
import rife.bld.operations.exceptions.ExitStatusException;
|
import rife.bld.operations.exceptions.ExitStatusException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.logging.ConsoleHandler;
|
import java.util.logging.ConsoleHandler;
|
||||||
|
@ -32,7 +39,6 @@ import java.util.logging.Logger;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.*;
|
import static org.assertj.core.api.Assertions.*;
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("PMD.AvoidDuplicateLiterals")
|
@SuppressWarnings("PMD.AvoidDuplicateLiterals")
|
||||||
class DetektOperationTest {
|
class DetektOperationTest {
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
|
@ -57,16 +63,193 @@ class DetektOperationTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testBasePath() {
|
||||||
|
var foo = new File("foo");
|
||||||
|
var bar = new File("bar");
|
||||||
|
|
||||||
|
var op = new DetektOperation().basePath(foo);
|
||||||
|
assertThat(op.basePath()).as("as file").isEqualTo(foo.getAbsolutePath());
|
||||||
|
|
||||||
|
op = op.basePath(bar.toPath());
|
||||||
|
assertThat(op.basePath()).as("as path").isEqualTo(bar.getAbsolutePath());
|
||||||
|
|
||||||
|
op = op.basePath("foo");
|
||||||
|
assertThat(op.basePath()).as("as string").isEqualTo("foo");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testBaseline() {
|
||||||
|
var foo = new File("foo");
|
||||||
|
var bar = new File("bar");
|
||||||
|
|
||||||
|
var op = new DetektOperation().baseline(foo);
|
||||||
|
assertThat(op.baseline()).as("as file").isEqualTo(foo.getAbsolutePath());
|
||||||
|
|
||||||
|
op = op.baseline(bar.toPath());
|
||||||
|
assertThat(op.baseline()).as("as path").isEqualTo(bar.getAbsolutePath());
|
||||||
|
|
||||||
|
op = op.baseline("foo");
|
||||||
|
assertThat(op.baseline()).as("as string").isEqualTo("foo");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@EnabledOnOs(OS.LINUX)
|
||||||
|
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
|
||||||
|
void testCheckAllParameters() throws IOException {
|
||||||
|
var args = Files.readAllLines(Paths.get("src", "test", "resources", "detekt-args.txt"));
|
||||||
|
|
||||||
|
assertThat(args).isNotEmpty();
|
||||||
|
|
||||||
|
var op = new DetektOperation()
|
||||||
|
.fromProject(new BaseProject())
|
||||||
|
.allRules(true)
|
||||||
|
.autoCorrect(true)
|
||||||
|
.basePath("basePath")
|
||||||
|
.basePath(new File("basePath"))
|
||||||
|
.baseline("baseline")
|
||||||
|
.buildUponDefaultConfig(true)
|
||||||
|
.classPath(new File("path1"))
|
||||||
|
.classPath("path2", "path3")
|
||||||
|
.classPath(List.of(new File("path4"), new File("path5")))
|
||||||
|
.config(new File("config1"))
|
||||||
|
.config("config2", "config3")
|
||||||
|
.config(List.of(new File("config4"), new File("config5")))
|
||||||
|
.configResource("configResource")
|
||||||
|
.configResource(new File("configResource"))
|
||||||
|
.createBaseline(true)
|
||||||
|
.debug(true)
|
||||||
|
.disableDefaultRuleSets(true)
|
||||||
|
.excludes(List.of("excludes1", "excludes2"))
|
||||||
|
.excludes("excludes3", "excludes4")
|
||||||
|
.generateConfig(true)
|
||||||
|
.includes(List.of("includes1", "includes2"))
|
||||||
|
.includes("includes3", "includes4", "includes5")
|
||||||
|
.input(new File("input1"))
|
||||||
|
.input("input2", "input3")
|
||||||
|
.input(List.of(new File("input4"), new File("input5")))
|
||||||
|
.jdkHome("jdkHome")
|
||||||
|
.jvmTarget("jvmTarget")
|
||||||
|
.languageVersion("languageVersion")
|
||||||
|
.maxIssues(10)
|
||||||
|
.parallel(true)
|
||||||
|
.plugins(new File("jar1"))
|
||||||
|
.plugins("jar2", "jar3")
|
||||||
|
.plugins(List.of(new File("jar4"), new File("jar5")))
|
||||||
|
.report(new Report(ReportId.HTML, "reports"));
|
||||||
|
|
||||||
|
assertThat(op.excludes()).as("excludes[]").containsExactly(".*/build/.*", ".*/resources/.*",
|
||||||
|
"excludes1", "excludes2", "excludes3", "excludes4");
|
||||||
|
|
||||||
|
for (var i = 1; i < 6; i++) {
|
||||||
|
assertThat(op.classPath()).as("classPath[" + i + ']').hasSize(5).contains(new File("path" + i));
|
||||||
|
assertThat(op.config()).as("config[" + i + ']').hasSize(5).contains(new File("config" + i));
|
||||||
|
assertThat(op.includes()).as("includes[" + i + ']').hasSize(5).contains("includes" + i);
|
||||||
|
assertThat(op.input()).as("input[" + i + ']').hasSize(5).contains(new File("input" + i));
|
||||||
|
assertThat(op.plugins()).as("plugins[" + i + ']').hasSize(5).contains(new File("jar" + i));
|
||||||
|
}
|
||||||
|
|
||||||
|
var params = op.executeConstructProcessCommandList();
|
||||||
|
|
||||||
|
try (var softly = new AutoCloseableSoftAssertions()) {
|
||||||
|
for (var p : args) {
|
||||||
|
var found = false;
|
||||||
|
for (var a : params) {
|
||||||
|
if (a.startsWith(p)) {
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
softly.assertThat(found).as(p + " not found.").isTrue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testClassPath() {
|
||||||
|
var foo = new File("foo");
|
||||||
|
var bar = new File("bar");
|
||||||
|
|
||||||
|
var op = new DetektOperation().classPath("foo", "bar");
|
||||||
|
assertThat(op.classPath()).as("String...").contains(foo, bar);
|
||||||
|
op.classPath().clear();
|
||||||
|
|
||||||
|
op = op.classPath(foo, bar);
|
||||||
|
assertThat(op.classPath()).as("File...").contains(foo, bar);
|
||||||
|
op.classPath().clear();
|
||||||
|
|
||||||
|
op = op.classPath(foo.toPath(), bar.toPath());
|
||||||
|
assertThat(op.classPath()).as("Path...").contains(foo, bar);
|
||||||
|
op.classPath().clear();
|
||||||
|
|
||||||
|
op = op.classPathStrings(List.of("foo", "bar"));
|
||||||
|
assertThat(op.classPath()).as("List(String...)").contains(foo, bar);
|
||||||
|
op.classPath().clear();
|
||||||
|
|
||||||
|
op = op.classPath(List.of(foo, bar));
|
||||||
|
assertThat(op.classPath()).as("File...").contains(foo, bar);
|
||||||
|
op.classPath().clear();
|
||||||
|
|
||||||
|
op = op.classPathPaths(List.of(foo.toPath(), bar.toPath()));
|
||||||
|
assertThat(op.classPath()).as("Path...").contains(foo, bar);
|
||||||
|
op.classPath().clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testConfig() {
|
||||||
|
var foo = new File("foo");
|
||||||
|
var bar = new File("bar");
|
||||||
|
|
||||||
|
var op = new DetektOperation().config("foo", "bar");
|
||||||
|
assertThat(op.config()).as("String...").contains(foo, bar);
|
||||||
|
op.config().clear();
|
||||||
|
|
||||||
|
op = op.config(foo, bar);
|
||||||
|
assertThat(op.config()).as("File...").contains(foo, bar);
|
||||||
|
op.config().clear();
|
||||||
|
|
||||||
|
op = op.config(foo.toPath(), bar.toPath());
|
||||||
|
assertThat(op.config()).as("Path...").contains(foo, bar);
|
||||||
|
op.config().clear();
|
||||||
|
|
||||||
|
op = op.configStrings(List.of("foo", "bar"));
|
||||||
|
assertThat(op.config()).as("List(String...)").contains(foo, bar);
|
||||||
|
op.config().clear();
|
||||||
|
|
||||||
|
op = op.config(List.of(foo, bar));
|
||||||
|
assertThat(op.config()).as("File...").contains(foo, bar);
|
||||||
|
op.config().clear();
|
||||||
|
|
||||||
|
op = op.configPaths(List.of(foo.toPath(), bar.toPath()));
|
||||||
|
assertThat(op.config()).as("Path...").contains(foo, bar);
|
||||||
|
op.config().clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testConfigResource() {
|
||||||
|
var foo = new File("foo");
|
||||||
|
var bar = new File("bar");
|
||||||
|
|
||||||
|
var op = new DetektOperation().configResource(foo);
|
||||||
|
assertThat(op.configResource()).as("as file").isEqualTo(foo.getAbsolutePath());
|
||||||
|
|
||||||
|
op = op.configResource(bar.toPath());
|
||||||
|
assertThat(op.configResource()).as("as path").isEqualTo(bar.getAbsolutePath());
|
||||||
|
|
||||||
|
op = new DetektOperation().configResource("foo");
|
||||||
|
assertThat(op.configResource()).as("as string").isEqualTo("foo");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testExampleBaseline() throws IOException, ExitStatusException, InterruptedException {
|
void testExampleBaseline() throws IOException, ExitStatusException, InterruptedException {
|
||||||
var tmpDir = Files.createTempDirectory("bld-detekt-").toFile();
|
var tmpDir = Files.createTempDirectory("bld-detekt-").toFile();
|
||||||
|
|
||||||
var baseline = new File(tmpDir, "detekt-baseline.xml");
|
var baseline = new File(tmpDir, "examples/src/test/resources/detekt-baseline.xml");
|
||||||
|
|
||||||
var op = new DetektOperation()
|
var op = new DetektOperation()
|
||||||
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example",
|
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example",
|
||||||
"Example"))
|
"example", "Example"))
|
||||||
.baseline(baseline.getAbsolutePath())
|
.baseline(baseline)
|
||||||
.createBaseline(true);
|
.createBaseline(true);
|
||||||
op.execute();
|
op.execute();
|
||||||
|
|
||||||
|
@ -80,7 +263,7 @@ class DetektOperationTest {
|
||||||
void testExampleMaxIssues() {
|
void testExampleMaxIssues() {
|
||||||
var op = new DetektOperation()
|
var op = new DetektOperation()
|
||||||
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example",
|
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example",
|
||||||
"Example"))
|
"example", "Example"))
|
||||||
.maxIssues(8);
|
.maxIssues(8);
|
||||||
assertThatNoException().isThrownBy(op::execute);
|
assertThatNoException().isThrownBy(op::execute);
|
||||||
}
|
}
|
||||||
|
@ -97,12 +280,12 @@ class DetektOperationTest {
|
||||||
|
|
||||||
var op = new DetektOperation()
|
var op = new DetektOperation()
|
||||||
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example",
|
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example",
|
||||||
"Example"))
|
"example", "Example"))
|
||||||
.report(new DetektReport(DetektReportId.HTML, html.getAbsolutePath()))
|
.report(new Report(ReportId.HTML, html.getAbsolutePath()))
|
||||||
.report(new DetektReport(DetektReportId.XML, xml.getAbsolutePath()))
|
.report(new Report(ReportId.XML, xml.getAbsolutePath()))
|
||||||
.report(new DetektReport(DetektReportId.TXT, txt.getAbsolutePath()))
|
.report(new Report(ReportId.TXT, txt.getAbsolutePath()))
|
||||||
.report(new DetektReport(DetektReportId.MD, md.getAbsolutePath()))
|
.report(new Report(ReportId.MD, md.getAbsolutePath()))
|
||||||
.report(new DetektReport(DetektReportId.SARIF, sarif.getAbsolutePath()));
|
.report(new Report(ReportId.SARIF, sarif.getAbsolutePath()));
|
||||||
|
|
||||||
assertThatThrownBy(op::execute).isInstanceOf(ExitStatusException.class);
|
assertThatThrownBy(op::execute).isInstanceOf(ExitStatusException.class);
|
||||||
|
|
||||||
|
@ -115,8 +298,74 @@ class DetektOperationTest {
|
||||||
void testExamplesExecute() {
|
void testExamplesExecute() {
|
||||||
var op = new DetektOperation()
|
var op = new DetektOperation()
|
||||||
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example",
|
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example",
|
||||||
"Example"))
|
"example", "Example"))
|
||||||
.debug(true);
|
.debug(true);
|
||||||
assertThatThrownBy(op::execute).isInstanceOf(ExitStatusException.class);
|
assertThatThrownBy(op::execute).isInstanceOf(ExitStatusException.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testExecuteNoProject() {
|
||||||
|
var op = new DetektOperation();
|
||||||
|
assertThatCode(op::execute).isInstanceOf(ExitStatusException.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testInput() {
|
||||||
|
var foo = new File("foo");
|
||||||
|
var bar = new File("bar");
|
||||||
|
|
||||||
|
var op = new DetektOperation().input("foo", "bar");
|
||||||
|
assertThat(op.input()).as("String...").contains(foo, bar);
|
||||||
|
op.input().clear();
|
||||||
|
|
||||||
|
op = op.input(foo, bar);
|
||||||
|
assertThat(op.input()).as("File...").contains(foo, bar);
|
||||||
|
op.input().clear();
|
||||||
|
|
||||||
|
op = op.input(foo.toPath(), bar.toPath());
|
||||||
|
assertThat(op.input()).as("Path...").contains(foo, bar);
|
||||||
|
op.input().clear();
|
||||||
|
|
||||||
|
op = op.inputStrings(List.of("foo", "bar"));
|
||||||
|
assertThat(op.input()).as("List(String...)").contains(foo, bar);
|
||||||
|
op.input().clear();
|
||||||
|
|
||||||
|
op = op.input(List.of(foo, bar));
|
||||||
|
assertThat(op.input()).as("File...").contains(foo, bar);
|
||||||
|
op.input().clear();
|
||||||
|
|
||||||
|
op = op.inputPaths(List.of(foo.toPath(), bar.toPath()));
|
||||||
|
assertThat(op.input()).as("Path...").contains(foo, bar);
|
||||||
|
op.input().clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPlugins() {
|
||||||
|
var foo = new File("foo");
|
||||||
|
var bar = new File("bar");
|
||||||
|
|
||||||
|
var op = new DetektOperation().plugins("foo", "bar");
|
||||||
|
assertThat(op.plugins()).as("String...").contains(foo, bar);
|
||||||
|
op.plugins().clear();
|
||||||
|
|
||||||
|
op = op.plugins(foo, bar);
|
||||||
|
assertThat(op.plugins()).as("File...").contains(foo, bar);
|
||||||
|
op.plugins().clear();
|
||||||
|
|
||||||
|
op = op.plugins(foo.toPath(), bar.toPath());
|
||||||
|
assertThat(op.plugins()).as("Path...").contains(foo, bar);
|
||||||
|
op.plugins().clear();
|
||||||
|
|
||||||
|
op = op.pluginsStrings(List.of("foo", "bar"));
|
||||||
|
assertThat(op.plugins()).as("List(String...)").contains(foo, bar);
|
||||||
|
op.plugins().clear();
|
||||||
|
|
||||||
|
op = op.plugins(List.of(foo, bar));
|
||||||
|
assertThat(op.plugins()).as("File...").contains(foo, bar);
|
||||||
|
op.plugins().clear();
|
||||||
|
|
||||||
|
op = op.pluginsPaths(List.of(foo.toPath(), bar.toPath()));
|
||||||
|
assertThat(op.plugins()).as("Path...").contains(foo, bar);
|
||||||
|
op.plugins().clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
21
src/test/resources/detekt-args.txt
Normal file
21
src/test/resources/detekt-args.txt
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
--all-rules
|
||||||
|
--auto-correct
|
||||||
|
--baseline
|
||||||
|
--base-path
|
||||||
|
--build-upon-default-config
|
||||||
|
--classpath
|
||||||
|
--config
|
||||||
|
--config-resource
|
||||||
|
--create-baseline
|
||||||
|
--debug
|
||||||
|
--disable-default-rulesets
|
||||||
|
--excludes
|
||||||
|
--generate-config
|
||||||
|
--includes
|
||||||
|
--input
|
||||||
|
--jdk-home
|
||||||
|
--jvm-target
|
||||||
|
--max-issues
|
||||||
|
--parallel
|
||||||
|
--plugins
|
||||||
|
--report
|
Loading…
Add table
Add a link
Reference in a new issue