Skip to content

feat(#1100): add broad-scope lint - #1238

Open
VasilevNStas wants to merge 1 commit into
objectionary:masterfrom
VasilevNStas:fix/issue-1100-broad-scope
Open

feat(#1100): add broad-scope lint#1238
VasilevNStas wants to merge 1 commit into
objectionary:masterfrom
VasilevNStas:fix/issue-1100-broad-scope

Conversation

@VasilevNStas

Copy link
Copy Markdown
Contributor

Fixes #1100.

Problem

A private attribute (local) may have an excessively broad scope: it is used only inside a single nested object, while it is declared at a much higher level. This should lead to a lint warning.

Solution / What

New XSLT lint broad-scope modeled after redundant-object: it finds private attributes referenced (via ^ξ(?:\.ρ)*\. base prefixes) exclusively within a single object different from the declaration site, and warns that the scope is too broad.

Changes

  • src/main/resources/org/eolang/lints/design/broad-scope.xsl — the new lint.
  • src/main/resources/org/eolang/motives/design/broad-scope.md — motivation.
  • src/test/resources/org/eolang/lints/packs/single/broad-scope/ — 3 test packs.

Tests

  • catches-broad-scope
  • allows-used-on-top-level
  • allows-used-in-multiple-objects

@VasilevNStas

Copy link
Copy Markdown
Contributor Author

@yegor256 @volodya-lombrozo plz review

@volodya-lombrozo

Copy link
Copy Markdown
Member

/benchmark

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark comparison for #1238

Comparing this branch against the master baseline in benchmark/lint-timings.csv. Positive deltas are slower, negative are faster.

Biggest changes

lint (size) before after delta
unlint-non-existing-defect (M) 1256 ms 975 ms -281 ms
not-empty-atom (S) 41 ms 300 ms +259 ms
duplicate-as-attribute (S) 282 ms 49 ms -233 ms
bytes-without-data (XXL) 376 ms 187 ms -189 ms
application-without-as-attributes (S) 117 ms 302 ms +185 ms
application-without-as-attributes (XXL) 3157 ms 3045 ms -112 ms
application-without-as-attributes (M) 507 ms 413 ms -94 ms
compound-name (S) 133 ms 43 ms -90 ms
unlint-non-existing-defect (S) 226 ms 315 ms +89 ms
object-has-data (M) 189 ms 278 ms +89 ms
Full results (430 entries)
lint (size) before after delta
alias-too-long (L) 1 ms 0 ms -1 ms
alias-too-long (M) 1 ms 1 ms +0 ms
alias-too-long (S) 39 ms 35 ms -4 ms
alias-too-long (XL) 1 ms 1 ms +0 ms
alias-too-long (XXL) 1 ms 1 ms +0 ms
anemic-getter (L) 13 ms 11 ms -2 ms
anemic-getter (M) 6 ms 6 ms +0 ms
anemic-getter (S) 41 ms 42 ms +1 ms
anemic-getter (XL) 21 ms 21 ms +0 ms
anemic-getter (XXL) 120 ms 94 ms -26 ms
anonymous-formation (L) 25 ms 26 ms +1 ms
anonymous-formation (M) 15 ms 33 ms +18 ms
anonymous-formation (S) 78 ms 56 ms -22 ms
anonymous-formation (XL) 42 ms 68 ms +26 ms
anonymous-formation (XXL) 221 ms 233 ms +12 ms
anonymous-objects-inside-formation (L) 15 ms 14 ms -1 ms
anonymous-objects-inside-formation (M) 12 ms 13 ms +1 ms
anonymous-objects-inside-formation (S) 49 ms 50 ms +1 ms
anonymous-objects-inside-formation (XL) 26 ms 24 ms -2 ms
anonymous-objects-inside-formation (XXL) 118 ms 119 ms +1 ms
application-without-as-attributes (L) 346 ms 364 ms +18 ms
application-without-as-attributes (M) 507 ms 413 ms -94 ms
application-without-as-attributes (S) 117 ms 302 ms +185 ms
application-without-as-attributes (XL) 597 ms 603 ms +6 ms
application-without-as-attributes (XXL) 3157 ms 3045 ms -112 ms
ascii-only (L) 1 ms 1 ms +0 ms
ascii-only (M) 0 ms 1 ms +1 ms
ascii-only (S) 2 ms 1 ms -1 ms
ascii-only (XL) 1 ms 1 ms +0 ms
ascii-only (XXL) 2 ms 1 ms -1 ms
atom-and-base (L) 25 ms 22 ms -3 ms
atom-and-base (M) 11 ms 19 ms +8 ms
atom-and-base (S) 67 ms 44 ms -23 ms
atom-and-base (XL) 56 ms 40 ms -16 ms
atom-and-base (XXL) 202 ms 198 ms -4 ms
atom-in-atom (L) 24 ms 25 ms +1 ms
atom-in-atom (M) 20 ms 11 ms -9 ms
atom-in-atom (S) 44 ms 38 ms -6 ms
atom-in-atom (XL) 42 ms 40 ms -2 ms
atom-in-atom (XXL) 246 ms 245 ms -1 ms
atom-with-data (L) 38 ms 23 ms -15 ms
atom-with-data (M) 18 ms 18 ms +0 ms
atom-with-data (S) 55 ms 35 ms -20 ms
atom-with-data (XL) 42 ms 40 ms -2 ms
atom-with-data (XXL) 201 ms 199 ms -2 ms
atom-without-rt (L) 25 ms 22 ms -3 ms
atom-without-rt (M) 11 ms 20 ms +9 ms
atom-without-rt (S) 47 ms 52 ms +5 ms
atom-without-rt (XL) 42 ms 40 ms -2 ms
atom-without-rt (XXL) 270 ms 198 ms -72 ms
bad-test-name (L) 16 ms 14 ms -2 ms
bad-test-name (M) 12 ms 9 ms -3 ms
bad-test-name (S) 39 ms 47 ms +8 ms
bad-test-name (XL) 26 ms 28 ms +2 ms
bad-test-name (XXL) 124 ms 135 ms +11 ms
broad-scope (L) - 13 ms new
broad-scope (M) - 9 ms new
broad-scope (S) - 40 ms new
broad-scope (XL) - 19 ms new
broad-scope (XXL) - 143 ms new
broken-alias-first (L) 1 ms 1 ms +0 ms
broken-alias-first (M) 2 ms 1 ms -1 ms
broken-alias-first (S) 44 ms 29 ms -15 ms
broken-alias-first (XL) 1 ms 1 ms +0 ms
broken-alias-first (XXL) 1 ms 1 ms +0 ms
broken-alias-second (L) 2 ms 1 ms -1 ms
broken-alias-second (M) 1 ms 1 ms +0 ms
broken-alias-second (S) 33 ms 34 ms +1 ms
broken-alias-second (XL) 1 ms 1 ms +0 ms
broken-alias-second (XXL) 1 ms 1 ms +0 ms
bytes-without-data (L) 52 ms 21 ms -31 ms
bytes-without-data (M) 27 ms 24 ms -3 ms
bytes-without-data (S) 50 ms 45 ms -5 ms
bytes-without-data (XL) 79 ms 56 ms -23 ms
bytes-without-data (XXL) 376 ms 187 ms -189 ms
comment-is-too-wide (L) 0 ms 0 ms +0 ms
comment-is-too-wide (M) 2 ms 1 ms -1 ms
comment-is-too-wide (S) 51 ms 37 ms -14 ms
comment-is-too-wide (XL) 1 ms 1 ms +0 ms
comment-is-too-wide (XXL) 2 ms 1 ms -1 ms
comment-not-capitalized (L) 1 ms 1 ms +0 ms
comment-not-capitalized (M) 1 ms 1 ms +0 ms
comment-not-capitalized (S) 53 ms 37 ms -16 ms
comment-not-capitalized (XL) 1 ms 1 ms +0 ms
comment-not-capitalized (XXL) 1 ms 1 ms +0 ms
comment-starts-with-article (L) 1 ms 1 ms +0 ms
comment-starts-with-article (M) 1 ms 1 ms +0 ms
comment-starts-with-article (S) 27 ms 30 ms +3 ms
comment-starts-with-article (XL) 1 ms 1 ms +0 ms
comment-starts-with-article (XXL) 1 ms 1 ms +0 ms
comment-too-short (L) 1 ms 1 ms +0 ms
comment-too-short (M) 1 ms 1 ms +0 ms
comment-too-short (S) 31 ms 29 ms -2 ms
comment-too-short (XL) 1 ms 1 ms +0 ms
comment-too-short (XXL) 1 ms 1 ms +0 ms
comment-without-dot (L) 1 ms 1 ms +0 ms
comment-without-dot (M) 1 ms 1 ms +0 ms
comment-without-dot (S) 40 ms 39 ms -1 ms
comment-without-dot (XL) 1 ms 1 ms +0 ms
comment-without-dot (XXL) 1 ms 1 ms +0 ms
compound-name (L) 78 ms 53 ms -25 ms
compound-name (M) 25 ms 70 ms +45 ms
compound-name (S) 133 ms 43 ms -90 ms
compound-name (XL) 96 ms 93 ms -3 ms
compound-name (XXL) 469 ms 497 ms +28 ms
decorated-formation (L) 14 ms 18 ms +4 ms
decorated-formation (M) 9 ms 23 ms +14 ms
decorated-formation (S) 50 ms 48 ms -2 ms
decorated-formation (XL) 25 ms 24 ms -1 ms
decorated-formation (XXL) 113 ms 114 ms +1 ms
direct-phi (L) 27 ms 20 ms -7 ms
direct-phi (M) 16 ms 17 ms +1 ms
direct-phi (S) 66 ms 63 ms -3 ms
direct-phi (XL) 33 ms 33 ms +0 ms
direct-phi (XXL) 161 ms 157 ms -4 ms
duplicate-aliases (L) 1 ms 1 ms +0 ms
duplicate-aliases (M) 1 ms 1 ms +0 ms
duplicate-aliases (S) 38 ms 43 ms +5 ms
duplicate-aliases (XL) 1 ms 1 ms +0 ms
duplicate-aliases (XXL) 1 ms 1 ms +0 ms
duplicate-as-attribute (L) 67 ms 49 ms -18 ms
duplicate-as-attribute (M) 75 ms 70 ms -5 ms
duplicate-as-attribute (S) 282 ms 49 ms -233 ms
duplicate-as-attribute (XL) 169 ms 140 ms -29 ms
duplicate-as-attribute (XXL) 797 ms 740 ms -57 ms
duplicate-metas (L) 1 ms 1 ms +0 ms
duplicate-metas (M) 1 ms 2 ms +1 ms
duplicate-metas (S) 29 ms 41 ms +12 ms
duplicate-metas (XL) 1 ms 1 ms +0 ms
duplicate-metas (XXL) 1 ms 1 ms +0 ms
duplicate-names (L) 55 ms 38 ms -17 ms
duplicate-names (M) 28 ms 39 ms +11 ms
duplicate-names (S) 57 ms 44 ms -13 ms
duplicate-names (XL) 51 ms 50 ms -1 ms
duplicate-names (XXL) 281 ms 249 ms -32 ms
empty-alias (L) 1 ms 1 ms +0 ms
empty-alias (M) 1 ms 1 ms +0 ms
empty-alias (S) 29 ms 28 ms -1 ms
empty-alias (XL) 1 ms 1 ms +0 ms
empty-alias (XXL) 1 ms 1 ms +0 ms
empty-object (L) 119 ms 119 ms +0 ms
empty-object (M) 166 ms 144 ms -22 ms
empty-object (S) 165 ms 78 ms -87 ms
empty-object (XL) 185 ms 202 ms +17 ms
empty-object (XXL) 1065 ms 1036 ms -29 ms
empty-spdx-tail (L) 1 ms 1 ms +0 ms
empty-spdx-tail (M) 2 ms 1 ms -1 ms
empty-spdx-tail (S) 46 ms 31 ms -15 ms
empty-spdx-tail (XL) 1 ms 1 ms +0 ms
empty-spdx-tail (XXL) 1 ms 0 ms -1 ms
error-line-out-of-listing (L) 0 ms 1 ms +1 ms
error-line-out-of-listing (M) 3 ms 1 ms -2 ms
error-line-out-of-listing (S) 34 ms 56 ms +22 ms
error-line-out-of-listing (XL) 1 ms 1 ms +0 ms
error-line-out-of-listing (XXL) 1 ms 1 ms +0 ms
formation-with-as-attributes (L) 30 ms 11 ms -19 ms
formation-with-as-attributes (M) 8 ms 10 ms +2 ms
formation-with-as-attributes (S) 30 ms 31 ms +1 ms
formation-with-as-attributes (XL) 21 ms 20 ms -1 ms
formation-with-as-attributes (XXL) 91 ms 93 ms +2 ms
incorrect-architect (L) 1 ms 0 ms -1 ms
incorrect-architect (M) 1 ms 1 ms +0 ms
incorrect-architect (S) 30 ms 40 ms +10 ms
incorrect-architect (XL) 0 ms 1 ms +1 ms
incorrect-architect (XXL) 1 ms 1 ms +0 ms
incorrect-bytes-format (L) 66 ms 59 ms -7 ms
incorrect-bytes-format (M) 66 ms 51 ms -15 ms
incorrect-bytes-format (S) 81 ms 66 ms -15 ms
incorrect-bytes-format (XL) 87 ms 97 ms +10 ms
incorrect-bytes-format (XXL) 548 ms 540 ms -8 ms
incorrect-home (L) 1 ms 1 ms +0 ms
incorrect-home (M) 2 ms 1 ms -1 ms
incorrect-home (S) 36 ms 28 ms -8 ms
incorrect-home (XL) 1 ms 2 ms +1 ms
incorrect-home (XXL) 1 ms 1 ms +0 ms
incorrect-jvm-rt-location (L) 2 ms 1 ms -1 ms
incorrect-jvm-rt-location (M) 1 ms 2 ms +1 ms
incorrect-jvm-rt-location (S) 32 ms 32 ms +0 ms
incorrect-jvm-rt-location (XL) 1 ms 2 ms +1 ms
incorrect-jvm-rt-location (XXL) 0 ms 1 ms +1 ms
incorrect-node-rt-location (L) 1 ms 1 ms +0 ms
incorrect-node-rt-location (M) 1 ms 1 ms +0 ms
incorrect-node-rt-location (S) 28 ms 34 ms +6 ms
incorrect-node-rt-location (XL) 1 ms 1 ms +0 ms
incorrect-node-rt-location (XXL) 1 ms 1 ms +0 ms
incorrect-package (L) 1 ms 1 ms +0 ms
incorrect-package (M) 2 ms 1 ms -1 ms
incorrect-package (S) 31 ms 40 ms +9 ms
incorrect-package (XL) 1 ms 1 ms +0 ms
incorrect-package (XXL) 2 ms 1 ms -1 ms
incorrect-rt-parts (L) 2 ms 1 ms -1 ms
incorrect-rt-parts (M) 1 ms 1 ms +0 ms
incorrect-rt-parts (S) 39 ms 40 ms +1 ms
incorrect-rt-parts (XL) 1 ms 1 ms +0 ms
incorrect-rt-parts (XXL) 1 ms 1 ms +0 ms
incorrect-spdx (L) 1 ms 1 ms +0 ms
incorrect-spdx (M) 2 ms 1 ms -1 ms
incorrect-spdx (S) 68 ms 40 ms -28 ms
incorrect-spdx (XL) 1 ms 1 ms +0 ms
incorrect-spdx (XXL) 1 ms 1 ms +0 ms
incorrect-test-object-name (L) 57 ms 17 ms -40 ms
incorrect-test-object-name (M) 14 ms 14 ms +0 ms
incorrect-test-object-name (S) 29 ms 42 ms +13 ms
incorrect-test-object-name (XL) 33 ms 33 ms +0 ms
incorrect-test-object-name (XXL) 146 ms 146 ms +0 ms
incorrect-unlint (L) 0 ms 1 ms +1 ms
incorrect-unlint (M) 1 ms 0 ms -1 ms
incorrect-unlint (S) 2 ms 1 ms -1 ms
incorrect-unlint (XL) 1 ms 1 ms +0 ms
incorrect-unlint (XXL) 1 ms 1 ms +0 ms
incorrect-version (L) 1 ms 1 ms +0 ms
incorrect-version (M) 1 ms 1 ms +0 ms
incorrect-version (S) 39 ms 30 ms -9 ms
incorrect-version (XL) 1 ms 1 ms +0 ms
incorrect-version (XXL) 2 ms 1 ms -1 ms
lambda-with-inners (L) 24 ms 24 ms +0 ms
lambda-with-inners (M) 22 ms 18 ms -4 ms
lambda-with-inners (S) 44 ms 37 ms -7 ms
lambda-with-inners (XL) 42 ms 40 ms -2 ms
lambda-with-inners (XXL) 201 ms 197 ms -4 ms
line-is-absent (L) 76 ms 69 ms -7 ms
line-is-absent (M) 74 ms 105 ms +31 ms
line-is-absent (S) 66 ms 59 ms -7 ms
line-is-absent (XL) 106 ms 122 ms +16 ms
line-is-absent (XXL) 569 ms 592 ms +23 ms
mandatory-architect (L) - 1 ms new
mandatory-architect (M) - 1 ms new
mandatory-architect (S) - 27 ms new
mandatory-architect (XL) - 1 ms new
mandatory-architect (XXL) - 1 ms new
mandatory-home (L) 1 ms 1 ms +0 ms
mandatory-home (M) 1 ms 1 ms +0 ms
mandatory-home (S) 27 ms 29 ms +2 ms
mandatory-home (XL) 1 ms 1 ms +0 ms
mandatory-home (XXL) 0 ms 1 ms +1 ms
mandatory-package (L) 0 ms 0 ms +0 ms
mandatory-package (M) 1 ms 1 ms +0 ms
mandatory-package (S) 33 ms 40 ms +7 ms
mandatory-package (XL) 1 ms 1 ms +0 ms
mandatory-package (XXL) 1 ms 1 ms +0 ms
mandatory-spdx (L) 1 ms 1 ms +0 ms
mandatory-spdx (M) 2 ms 1 ms -1 ms
mandatory-spdx (S) 49 ms 98 ms +49 ms
mandatory-spdx (XL) 1 ms 1 ms +0 ms
mandatory-spdx (XXL) 1 ms 1 ms +0 ms
mandatory-version (L) 0 ms 1 ms +1 ms
mandatory-version (M) 2 ms 1 ms -1 ms
mandatory-version (S) 42 ms 30 ms -12 ms
mandatory-version (XL) 1 ms 0 ms -1 ms
mandatory-version (XXL) 1 ms 1 ms +0 ms
many-void-attributes (L) 29 ms 11 ms -18 ms
many-void-attributes (M) 10 ms 9 ms -1 ms
many-void-attributes (S) 48 ms 48 ms +0 ms
many-void-attributes (XL) 21 ms 19 ms -2 ms
many-void-attributes (XXL) 90 ms 94 ms +4 ms
meta-line-out-of-listing (L) 1 ms 1 ms +0 ms
meta-line-out-of-listing (M) 1 ms 1 ms +0 ms
meta-line-out-of-listing (S) 46 ms 31 ms -15 ms
meta-line-out-of-listing (XL) 1 ms 1 ms +0 ms
meta-line-out-of-listing (XXL) 1 ms 1 ms +0 ms
missed-obfuscation (L) 14 ms 15 ms +1 ms
missed-obfuscation (M) 11 ms 12 ms +1 ms
missed-obfuscation (S) 40 ms 41 ms +1 ms
missed-obfuscation (XL) 28 ms 27 ms -1 ms
missed-obfuscation (XXL) 114 ms 114 ms +0 ms
name-outside-of-abstract-object (L) 18 ms 11 ms -7 ms
name-outside-of-abstract-object (M) 10 ms 9 ms -1 ms
name-outside-of-abstract-object (S) 33 ms 32 ms -1 ms
name-outside-of-abstract-object (XL) 23 ms 45 ms +22 ms
name-outside-of-abstract-object (XXL) 90 ms 91 ms +1 ms
named-object-abstract-nested (L) 18 ms 10 ms -8 ms
named-object-abstract-nested (M) 10 ms 9 ms -1 ms
named-object-abstract-nested (S) 40 ms 37 ms -3 ms
named-object-abstract-nested (XL) 20 ms 20 ms +0 ms
named-object-abstract-nested (XXL) 91 ms 92 ms +1 ms
no-attribute-formation (L) 15 ms 13 ms -2 ms
no-attribute-formation (M) 9 ms 11 ms +2 ms
no-attribute-formation (S) 74 ms 62 ms -12 ms
no-attribute-formation (XL) 25 ms 28 ms +3 ms
no-attribute-formation (XXL) 115 ms 114 ms -1 ms
non-kebab-name (L) 13 ms 11 ms -2 ms
non-kebab-name (M) 6 ms 11 ms +5 ms
non-kebab-name (S) 50 ms 44 ms -6 ms
non-kebab-name (XL) 28 ms 21 ms -7 ms
non-kebab-name (XXL) 95 ms 103 ms +8 ms
not-empty-atom (L) 25 ms 22 ms -3 ms
not-empty-atom (M) 11 ms 18 ms +7 ms
not-empty-atom (S) 41 ms 300 ms +259 ms
not-empty-atom (XL) 41 ms 49 ms +8 ms
not-empty-atom (XXL) 203 ms 227 ms +24 ms
object-has-data (L) 172 ms 146 ms -26 ms
object-has-data (M) 189 ms 278 ms +89 ms
object-has-data (S) 133 ms 146 ms +13 ms
object-has-data (XL) 278 ms 265 ms -13 ms
object-has-data (XXL) 1413 ms 1335 ms -78 ms
object-line-out-of-listing (L) 13 ms 11 ms -2 ms
object-line-out-of-listing (M) 9 ms 12 ms +3 ms
object-line-out-of-listing (S) 32 ms 28 ms -4 ms
object-line-out-of-listing (XL) 23 ms 21 ms -2 ms
object-line-out-of-listing (XXL) 106 ms 102 ms -4 ms
package-contains-multiple-parts (L) 1 ms 1 ms +0 ms
package-contains-multiple-parts (M) 2 ms 1 ms -1 ms
package-contains-multiple-parts (S) 39 ms 28 ms -11 ms
package-contains-multiple-parts (XL) 1 ms 1 ms +0 ms
package-contains-multiple-parts (XXL) 2 ms 1 ms -1 ms
package-member-without-void (L) - 1 ms new
package-member-without-void (M) - 2 ms new
package-member-without-void (S) - 43 ms new
package-member-without-void (XL) - 2 ms new
package-member-without-void (XXL) - 1 ms new
package-without-tail (L) 0 ms 1 ms +1 ms
package-without-tail (M) 1 ms 1 ms +0 ms
package-without-tail (S) 41 ms 26 ms -15 ms
package-without-tail (XL) 1 ms 0 ms -1 ms
package-without-tail (XXL) 1 ms 1 ms +0 ms
phi-is-not-first (L) 14 ms 11 ms -3 ms
phi-is-not-first (M) 6 ms 10 ms +4 ms
phi-is-not-first (S) 55 ms 28 ms -27 ms
phi-is-not-first (XL) 23 ms 22 ms -1 ms
phi-is-not-first (XXL) 102 ms 100 ms -2 ms
pos-without-line (L) 12 ms 10 ms -2 ms
pos-without-line (M) 5 ms 11 ms +6 ms
pos-without-line (S) 30 ms 30 ms +0 ms
pos-without-line (XL) 20 ms 19 ms -1 ms
pos-without-line (XXL) 90 ms 92 ms +2 ms
prohibited-package (L) 1 ms 1 ms +0 ms
prohibited-package (M) 1 ms 1 ms +0 ms
prohibited-package (S) 40 ms 44 ms +4 ms
prohibited-package (XL) 1 ms 1 ms +0 ms
prohibited-package (XXL) 1 ms 1 ms +0 ms
redundant-object (L) 57 ms 46 ms -11 ms
redundant-object (M) 38 ms 38 ms +0 ms
redundant-object (S) 55 ms 55 ms +0 ms
redundant-object (XL) 111 ms 84 ms -27 ms
redundant-object (XXL) 686 ms 746 ms +60 ms
reserved-name (L) 82 ms 56 ms -26 ms
reserved-name (M) 89 ms 71 ms -18 ms
reserved-name (S) 30 ms 28 ms -2 ms
reserved-name (XL) 118 ms 110 ms -8 ms
reserved-name (XXL) 611 ms 595 ms -16 ms
rt-without-atoms (L) 27 ms 22 ms -5 ms
rt-without-atoms (M) 16 ms 18 ms +2 ms
rt-without-atoms (S) 41 ms 52 ms +11 ms
rt-without-atoms (XL) 41 ms 58 ms +17 ms
rt-without-atoms (XXL) 234 ms 198 ms -36 ms
schema-is-absent (L) 1 ms 1 ms +0 ms
schema-is-absent (M) 1 ms 1 ms +0 ms
schema-is-absent (S) 45 ms 35 ms -10 ms
schema-is-absent (XL) 1 ms 1 ms +0 ms
schema-is-absent (XXL) 1 ms 1 ms +0 ms
self-referencing (L) 13 ms 11 ms -2 ms
self-referencing (M) 5 ms 11 ms +6 ms
self-referencing (S) 30 ms 29 ms -1 ms
self-referencing (XL) 20 ms 20 ms +0 ms
self-referencing (XXL) 90 ms 92 ms +2 ms
sparse-decoration (L) 17 ms 17 ms +0 ms
sparse-decoration (M) 14 ms 10 ms -4 ms
sparse-decoration (S) 88 ms 97 ms +9 ms
sparse-decoration (XL) 38 ms 30 ms -8 ms
sparse-decoration (XXL) 140 ms 140 ms +0 ms
sparse-seq (L) 16 ms 22 ms +6 ms
sparse-seq (M) 7 ms 11 ms +4 ms
sparse-seq (S) 42 ms 45 ms +3 ms
sparse-seq (XL) 28 ms 27 ms -1 ms
sparse-seq (XXL) 136 ms 160 ms +24 ms
sprintf-without-formatters (L) 18 ms 16 ms -2 ms
sprintf-without-formatters (M) 8 ms 12 ms +4 ms
sprintf-without-formatters (S) 32 ms 44 ms +12 ms
sprintf-without-formatters (XL) 26 ms 27 ms +1 ms
sprintf-without-formatters (XXL) 150 ms 143 ms -7 ms
unique-metas (L) 1 ms 1 ms +0 ms
unique-metas (M) 3 ms 1 ms -2 ms
unique-metas (S) 29 ms 39 ms +10 ms
unique-metas (XL) 1 ms 1 ms +0 ms
unique-metas (XXL) 1 ms 2 ms +1 ms
unit-test-missing (L) 40 ms 17 ms -23 ms
unit-test-missing (M) 8 ms 14 ms +6 ms
unit-test-missing (S) 59 ms 60 ms +1 ms
unit-test-missing (XL) 31 ms 30 ms -1 ms
unit-test-missing (XXL) 145 ms 172 ms +27 ms
unit-test-without-phi (L) 20 ms 18 ms -2 ms
unit-test-without-phi (M) 11 ms 15 ms +4 ms
unit-test-without-phi (S) 69 ms 46 ms -23 ms
unit-test-without-phi (XL) 32 ms 31 ms -1 ms
unit-test-without-phi (XXL) 149 ms 155 ms +6 ms
unknown-metas (L) 2 ms 1 ms -1 ms
unknown-metas (M) 1 ms 1 ms +0 ms
unknown-metas (S) 32 ms 31 ms -1 ms
unknown-metas (XL) 1 ms 1 ms +0 ms
unknown-metas (XXL) 1 ms 1 ms +0 ms
unknown-rt (L) 1 ms 1 ms +0 ms
unknown-rt (M) 2 ms 1 ms -1 ms
unknown-rt (S) 32 ms 36 ms +4 ms
unknown-rt (XL) 1 ms 1 ms +0 ms
unknown-rt (XXL) 1 ms 1 ms +0 ms
unlint-non-existing-defect (L) 1559 ms 1525 ms -34 ms
unlint-non-existing-defect (M) 1256 ms 975 ms -281 ms
unlint-non-existing-defect (S) 226 ms 315 ms +89 ms
unlint-non-existing-defect (XL) 2790 ms 2745 ms -45 ms
unlint-non-existing-defect (XXL) 14513 ms 14469 ms -44 ms
unsorted-metas (L) 1 ms 1 ms +0 ms
unsorted-metas (M) 1 ms 1 ms +0 ms
unsorted-metas (S) 41 ms 29 ms -12 ms
unsorted-metas (XL) 1 ms 1 ms +0 ms
unsorted-metas (XXL) 1 ms 2 ms +1 ms
unsorted-named-attributes (L) 28 ms 23 ms -5 ms
unsorted-named-attributes (M) 21 ms 17 ms -4 ms
unsorted-named-attributes (S) 80 ms 43 ms -37 ms
unsorted-named-attributes (XL) 34 ms 31 ms -3 ms
unsorted-named-attributes (XXL) 177 ms 157 ms -20 ms
unused-alias (L) 1 ms 1 ms +0 ms
unused-alias (M) 2 ms 1 ms -1 ms
unused-alias (S) 32 ms 30 ms -2 ms
unused-alias (XL) 1 ms 1 ms +0 ms
unused-alias (XXL) 1 ms 1 ms +0 ms
void-attributes-not-higher-than-other (L) 17 ms 15 ms -2 ms
void-attributes-not-higher-than-other (M) 9 ms 13 ms +4 ms
void-attributes-not-higher-than-other (S) 38 ms 31 ms -7 ms
void-attributes-not-higher-than-other (XL) 28 ms 26 ms -2 ms
void-attributes-not-higher-than-other (XXL) 137 ms 193 ms +56 ms
wrong-sprintf-arguments (L) 16 ms 16 ms +0 ms
wrong-sprintf-arguments (M) 9 ms 11 ms +2 ms
wrong-sprintf-arguments (S) 41 ms 36 ms -5 ms
wrong-sprintf-arguments (XL) 38 ms 27 ms -11 ms
wrong-sprintf-arguments (XXL) 138 ms 129 ms -9 ms
wrong-test-order (L) 19 ms 17 ms -2 ms
wrong-test-order (M) 15 ms 14 ms -1 ms
wrong-test-order (S) 32 ms 29 ms -3 ms
wrong-test-order (XL) 31 ms 33 ms +2 ms
wrong-test-order (XXL) 145 ms 146 ms +1 ms

@volodya-lombrozo

Copy link
Copy Markdown
Member

@rultor merge

@rultor

rultor commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@rultor merge

@volodya-lombrozo OK, I'll try to merge now. You can check the progress of the merge here.

@rultor

rultor commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

@rultor merge

@VasilevNStas @volodya-lombrozo Oops, I failed. You can see the full log here (spent 4min).

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.github.wvengen:proguard-maven-plugin:2.7.0:proguard (default) on project lints: Obfuscation failed (result=1)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:333)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
    at java.lang.reflect.Method.invoke (Method.java:580)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
Caused by: org.apache.maven.plugin.MojoExecutionException: Obfuscation failed (result=1)
    at com.github.wvengen.maven.proguard.ProGuardMojo.proguardMain (ProGuardMojo.java:1082)
    at com.github.wvengen.maven.proguard.ProGuardMojo.execute (ProGuardMojo.java:785)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
    at java.lang.reflect.Method.invoke (Method.java:580)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
\u001b[0m\u001b[0mcontainer 41478afe9ed75be95eee120ed27b503fd9c56d4cab672f24a6eb8de229ebc9a4 is dead
Thu Aug 20 18:12:51 UTC 2026

@VasilevNStas

VasilevNStas commented Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

@volodya-lombrozo

The merge bot failed on the proguard step, and I traced the reason. Here is the full picture so we can decide how to fix it.

What failed

The rultor merge runs mvn clean install -ntp -P!hone,qulice and fails with proguard-maven-plugin: Obfuscation failed (result=1).

Why this PR is not the cause

This PR is purely declarative: it only adds one XSL sheet (design/broad-scope.xsl), its motive and three yaml packs. There are zero Java classes here, so the obfuscation failure is unrelated to the diff.

The real reason: JDK 21 + proguard profile

The proguard Maven profile is activated on jdk < 22 (pom.xml):

<profile>
  <id>proguard</id>
  <activation>
    <jdk>[,22)</jdk>
  </activation>

The rultor docker image is yegor256/java, which runs JDK 21. So during merge, the proguard profile is active and proguard tries to obfuscate the jar. Locally we run JDK 23, where the profile is inactive, which is why mvn clean install -Pqulice passes on our side and we never saw this failure.

Proguard 2.7.0 on JDK 21 hits the well-known --add-opens issue: it cannot read some JDK classes without opening the modules.

The smoking gun in .rultor.yml

The release script explicitly sets the JVM options proguard needs:

export MAVEN_OPTS="--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED"
mvn clean deploy -ntp -P!hone,!proguard,reserved,...

while the merge script does not set MAVEN_OPTS at all:

merge:
  script: |
    mvn clean install -ntp -P!hone,qulice --errors -Dstyle.color=never

So on merge, proguard runs on JDK 21 without the --add-opens flags and dies.

Why other PRs merged fine

Recent merges (#1283, #1282, #1281, #1272) went through before Listing, LtSyntaxVersion, LtMystery and other new Java classes were added to master — the jar proguard now processes contains more classes it chokes on, so the latent JDK-21 issue surfaced.

Suggested fix (maintainer-side, not in this PR)

Add the same MAVEN_OPTS to the merge script, or drop the proguard profile from the merge run, e.g.:

merge:
  script: |
    export MAVEN_OPTS="--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED"
    mvn clean install -ntp -P!hone,!proguard,qulice --errors -Dstyle.color=never

Once that is in, this PR can be merged as-is — its content is fine (tests green, qulice clean, signed commits).

@0crat

0crat commented Aug 20, 2026

Copy link
Copy Markdown

@volodya-lombrozo Thanks for the review! You've earned +4 points for this: +12 as a basis; -8 for absolutely no comments posted. Your running score is +500; don't forget to check your Zerocracy account too).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

'private' attribute a has excessively broad scope necessitating new lint rule

4 participants