danger-pmd 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/publish.yml +1 -1
- data/.github/workflows/test.yml +5 -2
- data/.rubocop.yml +4777 -99
- data/Gemfile.lock +63 -52
- data/danger-pmd.gemspec +23 -21
- data/lib/danger_plugin.rb +1 -1
- data/lib/danger_pmd.rb +1 -1
- data/lib/pmd/entity/pmd_file.rb +10 -13
- data/lib/pmd/entity/pmd_violation.rb +4 -3
- data/lib/pmd/gem_version.rb +1 -1
- data/lib/pmd/plugin.rb +30 -26
- data/spec/entity/pmd_file_spec.rb +16 -16
- data/spec/pmd_spec.rb +58 -64
- data/spec/spec_helper.rb +18 -18
- metadata +52 -24
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
danger-pmd (1.0.
|
4
|
+
danger-pmd (1.0.2)
|
5
5
|
danger-plugin-api (~> 1.0)
|
6
|
-
oga (~> 2.
|
6
|
+
oga (~> 2.15)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
@@ -11,17 +11,17 @@ GEM
|
|
11
11
|
addressable (2.7.0)
|
12
12
|
public_suffix (>= 2.0.2, < 5.0)
|
13
13
|
ansi (1.5.0)
|
14
|
-
ast (2.4.
|
14
|
+
ast (2.4.2)
|
15
15
|
claide (1.0.3)
|
16
16
|
claide-plugins (0.9.2)
|
17
17
|
cork
|
18
18
|
nap
|
19
19
|
open4 (~> 1.3)
|
20
|
-
coderay (1.1.
|
20
|
+
coderay (1.1.3)
|
21
21
|
colored2 (3.1.2)
|
22
22
|
cork (0.3.0)
|
23
23
|
colored2 (~> 3.1)
|
24
|
-
danger (8.2.
|
24
|
+
danger (8.2.3)
|
25
25
|
claide (~> 1.0)
|
26
26
|
claide-plugins (>= 0.9.2)
|
27
27
|
colored2 (~> 3.1)
|
@@ -33,10 +33,10 @@ GEM
|
|
33
33
|
kramdown-parser-gfm (~> 1.0)
|
34
34
|
no_proxy_fix
|
35
35
|
octokit (~> 4.7)
|
36
|
-
terminal-table (
|
36
|
+
terminal-table (>= 1, < 4)
|
37
37
|
danger-plugin-api (1.0.0)
|
38
38
|
danger (> 2.0)
|
39
|
-
diff-lcs (1.
|
39
|
+
diff-lcs (1.4.4)
|
40
40
|
faraday (1.3.0)
|
41
41
|
faraday-net_http (~> 1.0)
|
42
42
|
multipart-post (>= 1.2, < 3)
|
@@ -44,11 +44,11 @@ GEM
|
|
44
44
|
faraday-http-cache (2.2.0)
|
45
45
|
faraday (>= 0.8)
|
46
46
|
faraday-net_http (1.0.1)
|
47
|
-
ffi (1.
|
47
|
+
ffi (1.15.0)
|
48
48
|
formatador (0.2.5)
|
49
49
|
git (1.8.1)
|
50
50
|
rchardet (~> 1.8)
|
51
|
-
guard (2.16.
|
51
|
+
guard (2.16.2)
|
52
52
|
formatador (>= 0.2.4)
|
53
53
|
listen (>= 2.7, < 4.0)
|
54
54
|
lumberjack (>= 1.0.12, < 2.0)
|
@@ -62,16 +62,15 @@ GEM
|
|
62
62
|
guard (~> 2.1)
|
63
63
|
guard-compat (~> 1.1)
|
64
64
|
rspec (>= 2.99.0, < 4.0)
|
65
|
-
|
66
|
-
kramdown (2.3.0)
|
65
|
+
kramdown (2.3.1)
|
67
66
|
rexml
|
68
67
|
kramdown-parser-gfm (1.1.0)
|
69
68
|
kramdown (~> 2.0)
|
70
|
-
listen (3.0.
|
71
|
-
rb-fsevent (>= 0.9.
|
72
|
-
rb-inotify (>= 0.9.7)
|
73
|
-
lumberjack (1.
|
74
|
-
method_source (0.
|
69
|
+
listen (3.0.8)
|
70
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
71
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
72
|
+
lumberjack (1.2.8)
|
73
|
+
method_source (1.0.0)
|
75
74
|
multipart-post (2.1.1)
|
76
75
|
nap (1.1.0)
|
77
76
|
nenv (0.3.0)
|
@@ -86,69 +85,81 @@ GEM
|
|
86
85
|
ast
|
87
86
|
ruby-ll (~> 2.1)
|
88
87
|
open4 (1.3.4)
|
89
|
-
parallel (1.
|
90
|
-
parser (
|
91
|
-
ast (~> 2.4.
|
92
|
-
pry (0.
|
93
|
-
coderay (~> 1.1
|
94
|
-
method_source (~>
|
88
|
+
parallel (1.20.1)
|
89
|
+
parser (3.0.0.0)
|
90
|
+
ast (~> 2.4.1)
|
91
|
+
pry (0.14.0)
|
92
|
+
coderay (~> 1.1)
|
93
|
+
method_source (~> 1.0)
|
95
94
|
public_suffix (4.0.6)
|
96
95
|
rainbow (3.0.0)
|
97
|
-
rake (13.0.
|
98
|
-
rb-fsevent (0.10.
|
96
|
+
rake (13.0.3)
|
97
|
+
rb-fsevent (0.10.4)
|
99
98
|
rb-inotify (0.10.1)
|
100
99
|
ffi (~> 1.0)
|
101
100
|
rchardet (1.8.0)
|
101
|
+
regexp_parser (2.1.1)
|
102
102
|
rexml (3.2.4)
|
103
|
-
rspec (3.
|
104
|
-
rspec-core (~> 3.
|
105
|
-
rspec-expectations (~> 3.
|
106
|
-
rspec-mocks (~> 3.
|
107
|
-
rspec-core (3.
|
108
|
-
rspec-support (~> 3.
|
109
|
-
rspec-expectations (3.
|
103
|
+
rspec (3.10.0)
|
104
|
+
rspec-core (~> 3.10.0)
|
105
|
+
rspec-expectations (~> 3.10.0)
|
106
|
+
rspec-mocks (~> 3.10.0)
|
107
|
+
rspec-core (3.10.1)
|
108
|
+
rspec-support (~> 3.10.0)
|
109
|
+
rspec-expectations (3.10.1)
|
110
110
|
diff-lcs (>= 1.2.0, < 2.0)
|
111
|
-
rspec-support (~> 3.
|
112
|
-
rspec-mocks (3.
|
111
|
+
rspec-support (~> 3.10.0)
|
112
|
+
rspec-mocks (3.10.2)
|
113
113
|
diff-lcs (>= 1.2.0, < 2.0)
|
114
|
-
rspec-support (~> 3.
|
115
|
-
rspec-support (3.
|
116
|
-
rubocop (
|
117
|
-
jaro_winkler (~> 1.5.1)
|
114
|
+
rspec-support (~> 3.10.0)
|
115
|
+
rspec-support (3.10.2)
|
116
|
+
rubocop (1.11.0)
|
118
117
|
parallel (~> 1.10)
|
119
|
-
parser (>=
|
118
|
+
parser (>= 3.0.0.0)
|
120
119
|
rainbow (>= 2.2.2, < 4.0)
|
120
|
+
regexp_parser (>= 1.8, < 3.0)
|
121
|
+
rexml
|
122
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
121
123
|
ruby-progressbar (~> 1.7)
|
122
|
-
unicode-display_width (>= 1.4.0, <
|
124
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
125
|
+
rubocop-ast (1.4.1)
|
126
|
+
parser (>= 2.7.1.5)
|
127
|
+
rubocop-rake (0.5.1)
|
128
|
+
rubocop
|
129
|
+
rubocop-rspec (2.2.0)
|
130
|
+
rubocop (~> 1.0)
|
131
|
+
rubocop-ast (>= 1.1.0)
|
123
132
|
ruby-ll (2.1.2)
|
124
133
|
ansi
|
125
134
|
ast
|
126
|
-
ruby-progressbar (1.
|
135
|
+
ruby-progressbar (1.11.0)
|
127
136
|
ruby2_keywords (0.0.4)
|
128
137
|
sawyer (0.8.2)
|
129
138
|
addressable (>= 2.3.5)
|
130
139
|
faraday (> 0.8, < 2.0)
|
131
140
|
shellany (0.0.1)
|
132
|
-
terminal-table (
|
141
|
+
terminal-table (3.0.0)
|
133
142
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
134
|
-
thor (1.0
|
135
|
-
unicode-display_width (1.
|
136
|
-
yard (0.9.
|
143
|
+
thor (1.1.0)
|
144
|
+
unicode-display_width (1.7.0)
|
145
|
+
yard (0.9.26)
|
137
146
|
|
138
147
|
PLATFORMS
|
139
148
|
ruby
|
140
149
|
|
141
150
|
DEPENDENCIES
|
142
|
-
bundler (~>
|
151
|
+
bundler (~> 2.0)
|
143
152
|
danger-pmd!
|
144
|
-
guard (~> 2.
|
145
|
-
guard-rspec (~> 4.7)
|
146
|
-
listen (
|
147
|
-
pry
|
153
|
+
guard (~> 2.16.2)
|
154
|
+
guard-rspec (~> 4.7.3)
|
155
|
+
listen (~> 3.0.8)
|
156
|
+
pry (~> 0.14.0)
|
148
157
|
rake (~> 13.0)
|
149
|
-
rspec (~> 3.
|
150
|
-
rubocop (~> 0
|
151
|
-
|
158
|
+
rspec (~> 3.10.0)
|
159
|
+
rubocop (~> 1.11.0)
|
160
|
+
rubocop-rake (~> 0.5.1)
|
161
|
+
rubocop-rspec (~> 2.2.0)
|
162
|
+
yard (~> 0.9.26)
|
152
163
|
|
153
164
|
BUNDLED WITH
|
154
165
|
2.2.14
|
data/danger-pmd.gemspec
CHANGED
@@ -4,40 +4,42 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'pmd/gem_version.rb'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name
|
8
|
-
spec.version
|
9
|
-
spec.authors
|
10
|
-
spec.email
|
11
|
-
spec.description
|
12
|
-
spec.summary
|
13
|
-
spec.homepage
|
14
|
-
spec.license
|
15
|
-
|
16
|
-
spec.files
|
17
|
-
spec.executables
|
18
|
-
spec.test_files
|
7
|
+
spec.name = 'danger-pmd'
|
8
|
+
spec.version = Pmd::VERSION
|
9
|
+
spec.authors = ['Mathieu Rul']
|
10
|
+
spec.email = ['mathroule@gmail.com']
|
11
|
+
spec.description = 'A Danger plugin for PMD.'
|
12
|
+
spec.summary = 'A Danger plugin for PMD (Programming Mistake Detector), see https://pmd.github.io.'
|
13
|
+
spec.homepage = 'https://github.com/mathroule/danger-pmd'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'danger-plugin-api', '~> 1.0'
|
22
|
-
spec.add_runtime_dependency 'oga', '~> 2.
|
22
|
+
spec.add_runtime_dependency 'oga', '~> 2.15'
|
23
23
|
|
24
24
|
# General ruby development
|
25
|
-
spec.add_development_dependency 'bundler', '~>
|
25
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
26
26
|
spec.add_development_dependency 'rake', '~> 13.0'
|
27
27
|
|
28
28
|
# Testing support
|
29
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3.10.0'
|
30
30
|
|
31
31
|
# Linting code and docs
|
32
|
-
spec.add_development_dependency 'rubocop', '~> 0
|
33
|
-
spec.add_development_dependency '
|
32
|
+
spec.add_development_dependency 'rubocop', '~> 1.11.0'
|
33
|
+
spec.add_development_dependency 'rubocop-rake', '~> 0.5.1'
|
34
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.2.0'
|
35
|
+
spec.add_development_dependency 'yard', '~> 0.9.26'
|
34
36
|
|
35
37
|
# Makes testing easy via `bundle exec guard`
|
36
|
-
spec.add_development_dependency 'guard', '~> 2.
|
37
|
-
spec.add_development_dependency 'guard-rspec', '~> 4.7'
|
38
|
+
spec.add_development_dependency 'guard', '~> 2.16.2'
|
39
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.7.3'
|
38
40
|
|
39
41
|
# If you want to work on older builds of ruby
|
40
|
-
spec.add_development_dependency 'listen', '3.0.
|
42
|
+
spec.add_development_dependency 'listen', '~> 3.0.8'
|
41
43
|
|
42
44
|
# This gives you the chance to run a REPL inside your tests
|
43
45
|
# via:
|
@@ -46,5 +48,5 @@ Gem::Specification.new do |spec|
|
|
46
48
|
# binding.pry
|
47
49
|
#
|
48
50
|
# This will stop test execution and let you inspect the results
|
49
|
-
spec.add_development_dependency 'pry'
|
51
|
+
spec.add_development_dependency 'pry', '~> 0.14.0'
|
50
52
|
end
|
data/lib/danger_plugin.rb
CHANGED
data/lib/danger_pmd.rb
CHANGED
data/lib/pmd/entity/pmd_file.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Represent a PMD file.
|
3
4
|
class PmdFile
|
4
|
-
require_relative
|
5
|
+
require_relative './pmd_violation'
|
5
6
|
|
6
7
|
attr_accessor :file
|
7
8
|
|
@@ -17,23 +18,19 @@ class PmdFile
|
|
17
18
|
|
18
19
|
def initialize(prefix, file)
|
19
20
|
@file = file
|
20
|
-
@absolute_path = file.attribute(
|
21
|
+
@absolute_path = file.attribute('name').value.to_s
|
21
22
|
|
22
|
-
|
23
|
-
@prefix = prefix
|
24
|
-
else
|
25
|
-
@prefix = prefix + file_separator
|
26
|
-
end
|
23
|
+
@prefix = prefix + (prefix.end_with?(file_separator) ? '' : file_separator)
|
27
24
|
|
28
|
-
if @absolute_path.start_with?(@prefix)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
@relative_path = if @absolute_path.start_with?(@prefix)
|
26
|
+
@absolute_path[@prefix.length, @absolute_path.length - @prefix.length]
|
27
|
+
else
|
28
|
+
@absolute_path
|
29
|
+
end
|
33
30
|
end
|
34
31
|
|
35
32
|
def violations
|
36
|
-
@violations ||= file.xpath(
|
33
|
+
@violations ||= file.xpath('violation').map do |pmd_violation|
|
37
34
|
PmdViolation.new(pmd_violation)
|
38
35
|
end
|
39
36
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Represent a PMD violation.
|
3
4
|
class PmdViolation
|
4
5
|
PRIORITY_ERROR_THRESHOLD = 4
|
5
6
|
attr_accessor :violation
|
@@ -9,7 +10,7 @@ class PmdViolation
|
|
9
10
|
end
|
10
11
|
|
11
12
|
def priority
|
12
|
-
@priority ||= violation.attribute(
|
13
|
+
@priority ||= violation.attribute('priority').value.to_i
|
13
14
|
end
|
14
15
|
|
15
16
|
def type
|
@@ -17,10 +18,10 @@ class PmdViolation
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def line
|
20
|
-
@line ||= violation.attribute(
|
21
|
+
@line ||= violation.attribute('beginline').value.to_i
|
21
22
|
end
|
22
23
|
|
23
24
|
def description
|
24
|
-
@description ||= violation.text.gsub("\n",
|
25
|
+
@description ||= violation.text.gsub("\n", '')
|
25
26
|
end
|
26
27
|
end
|
data/lib/pmd/gem_version.rb
CHANGED
data/lib/pmd/plugin.rb
CHANGED
@@ -33,18 +33,18 @@ module Danger
|
|
33
33
|
# @see mathroule/danger-pmd
|
34
34
|
# @tags java, android, pmd
|
35
35
|
class DangerPmd < Plugin
|
36
|
-
require_relative
|
36
|
+
require_relative './entity/pmd_file'
|
37
37
|
|
38
38
|
# Custom Gradle task to run.
|
39
39
|
# This is useful when your project has different flavors.
|
40
|
-
# Defaults to
|
40
|
+
# Defaults to 'pmd'.
|
41
41
|
# @return [String]
|
42
42
|
attr_writer :gradle_task
|
43
43
|
|
44
|
-
# A getter for `gradle_task`, returning
|
44
|
+
# A getter for `gradle_task`, returning 'pmd' if value is nil.
|
45
45
|
# @return [String]
|
46
46
|
def gradle_task
|
47
|
-
@gradle_task ||=
|
47
|
+
@gradle_task ||= 'pmd'
|
48
48
|
end
|
49
49
|
|
50
50
|
# Skip Gradle task.
|
@@ -61,11 +61,11 @@ module Danger
|
|
61
61
|
|
62
62
|
# An absolute path to a root.
|
63
63
|
# To comment errors to VCS, this needs to know relative path of files from the root.
|
64
|
-
# Defaults to result of
|
64
|
+
# Defaults to result of 'git rev-parse --show-toplevel'.
|
65
65
|
# @return [String] the root path of git repository by default.
|
66
66
|
attr_writer :root_path
|
67
67
|
|
68
|
-
# A getter for `root_path`, returning result of
|
68
|
+
# A getter for `root_path`, returning result of 'git rev-parse --show-toplevel' if value is nil.
|
69
69
|
# @return [String]
|
70
70
|
def root_path
|
71
71
|
@root_path ||= `git rev-parse --show-toplevel`.chomp
|
@@ -73,23 +73,23 @@ module Danger
|
|
73
73
|
|
74
74
|
# Location of report file.
|
75
75
|
# If your pmd task outputs to a different location, you can specify it here.
|
76
|
-
# Defaults to
|
76
|
+
# Defaults to 'app/build/reports/pmd/pmd.xml'.
|
77
77
|
# @return [String]
|
78
78
|
attr_writer :report_file
|
79
79
|
|
80
|
-
# A getter for `report_file`, returning
|
80
|
+
# A getter for `report_file`, returning 'app/build/reports/pmd/pmd.xml' if value is nil.
|
81
81
|
# @return [String]
|
82
82
|
def report_file
|
83
|
-
@report_file ||=
|
83
|
+
@report_file ||= 'app/build/reports/pmd/pmd.xml'
|
84
84
|
end
|
85
85
|
|
86
86
|
# Location of report files.
|
87
87
|
# If your pmd task outputs to a different location, you can specify it here.
|
88
|
-
# Defaults to [
|
88
|
+
# Defaults to ['app/build/reports/pmd/pmd.xml'].
|
89
89
|
# @return [Array[String]]
|
90
90
|
attr_writer :report_files
|
91
91
|
|
92
|
-
# A getter for `report_files`, returning [
|
92
|
+
# A getter for `report_files`, returning ['app/build/reports/pmd/pmd.xml'] if value is nil.
|
93
93
|
# @return [Array[String]]
|
94
94
|
def report_files
|
95
95
|
@report_files ||= [report_file]
|
@@ -100,15 +100,15 @@ module Danger
|
|
100
100
|
# It fails if `report_file` cannot be found inside current directory.
|
101
101
|
# It fails if `report_files` is empty.
|
102
102
|
# @return [Array[PmdFile]]
|
103
|
-
def report(inline_mode
|
103
|
+
def report(inline_mode: true)
|
104
104
|
unless skip_gradle_task
|
105
|
-
|
105
|
+
raise('Could not find `gradlew` inside current directory') unless gradlew_exists?
|
106
106
|
|
107
107
|
exec_gradle_task
|
108
108
|
end
|
109
109
|
|
110
110
|
report_files_expanded = Dir.glob(report_files).sort
|
111
|
-
|
111
|
+
raise("Could not find matching PMD report files for #{report_files} inside current directory") if report_files_expanded.empty?
|
112
112
|
|
113
113
|
do_comment(report_files_expanded, inline_mode)
|
114
114
|
end
|
@@ -136,14 +136,14 @@ module Danger
|
|
136
136
|
# A getter for `pmd_report`, returning PMD report.
|
137
137
|
# @return [Oga::XML::Document]
|
138
138
|
def pmd_report(report_file)
|
139
|
-
require
|
139
|
+
require 'oga'
|
140
140
|
Oga.parse_xml(File.open(report_file))
|
141
141
|
end
|
142
142
|
|
143
143
|
# A getter for PMD issues, returning PMD issues.
|
144
144
|
# @return [Array[PmdFile]]
|
145
145
|
def pmd_issues(report_file)
|
146
|
-
pmd_report(report_file).xpath(
|
146
|
+
pmd_report(report_file).xpath('//file').map do |pmd_file|
|
147
147
|
PmdFile.new(root_path, pmd_file)
|
148
148
|
end
|
149
149
|
end
|
@@ -156,26 +156,30 @@ module Danger
|
|
156
156
|
|
157
157
|
# Generate report and send inline comment with Danger's warn or fail method.
|
158
158
|
# @return [Array[PmdFile]]
|
159
|
-
def do_comment(report_files, inline_mode
|
159
|
+
def do_comment(report_files, inline_mode)
|
160
160
|
pmd_issues = []
|
161
161
|
|
162
162
|
report_files.each do |report_file|
|
163
163
|
pmd_issues(report_file).each do |pmd_file|
|
164
164
|
next unless target_files.include? pmd_file.relative_path
|
165
165
|
|
166
|
-
|
167
|
-
|
168
|
-
pmd_file.violations.each do |pmd_violation|
|
169
|
-
if inline_mode
|
170
|
-
send(pmd_violation.type, pmd_violation.description, file: pmd_file.relative_path, line: pmd_violation.line)
|
171
|
-
else
|
172
|
-
send(pmd_violation.type, "#{pmd_file.relative_path} : #{pmd_violation.description} at #{pmd_violation.line}")
|
173
|
-
end
|
174
|
-
end
|
166
|
+
parse_file(pmd_file, pmd_issues, inline_mode)
|
175
167
|
end
|
176
168
|
end
|
177
169
|
|
178
170
|
pmd_issues
|
179
171
|
end
|
172
|
+
|
173
|
+
def parse_file(pmd_file, pmd_issues, inline_mode)
|
174
|
+
pmd_issues.push(pmd_file)
|
175
|
+
|
176
|
+
pmd_file.violations.each do |pmd_violation|
|
177
|
+
if inline_mode
|
178
|
+
send(pmd_violation.type, pmd_violation.description, file: pmd_file.relative_path, line: pmd_violation.line)
|
179
|
+
else
|
180
|
+
send(pmd_violation.type, "#{pmd_file.relative_path} : #{pmd_violation.description} at #{pmd_violation.line}")
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
180
184
|
end
|
181
185
|
end
|