danger-spotbugs 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8813e879ca3e2f0574b73b106872369a3b341d46e1b08ec7ac0ee9c89b8ff73d
4
- data.tar.gz: b4b6566b2234e34cca5950cae9a8dada5398a7f4ef3627abe9871ac611f6f3bd
3
+ metadata.gz: 703a32ef1e4e92cc32381f904f7956aa557f26f7b698d364680bf8e27f20c2e7
4
+ data.tar.gz: 4c920a3822f89c99a1694886657e18acdd88d742dcab98e83e906f66d52f5d48
5
5
  SHA512:
6
- metadata.gz: 195edf7c7eaaed5c3efefe7327b8c453ccbc7a3e78dce6b52986d52a8f83c40a259ce38cc71d68af358b4e139e992abd85d29724231105d2b4b7fc35ea5d7e17
7
- data.tar.gz: f849b2ae5af1fb6bb44395a0b9cd773df30f47d74bea2288c00fa2eadf0d01487e1a7fe6eefcd8b9bbfbef78dceb5c42feda8ee914497a051234d82085c3cd56
6
+ metadata.gz: 3c1063d298ebbf8d3a49466a6aeb16f9fa2c1fc272edb30b87662f8df5a8d633596413e8a7e2a97243d5e612d379d31b0be7fa51b4c67c74c7d45370a58e3639
7
+ data.tar.gz: 1cafc111f92c6c613a92fe2af927687188b56267f569f885049762484c253c5e6f0fd2c50674b7cc0415a60cccb7055b3a9406b37ea00c3c9a5da550d8a4a169
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-spotbugs (0.0.3)
4
+ danger-spotbugs (0.0.4)
5
5
  danger-plugin-api (~> 1.0)
6
6
  oga (~> 2.15)
7
7
 
@@ -26,7 +26,7 @@ class BugInstance
26
26
  end
27
27
 
28
28
  def line
29
- @line ||= bug_instance.xpath('SourceLine').attribute('start').compact.first.value.to_i
29
+ @line ||= get_value_safely(bug_instance.xpath('SourceLine').attribute('start'), 0).to_i
30
30
  end
31
31
 
32
32
  def description
@@ -36,7 +36,7 @@ class BugInstance
36
36
  private
37
37
 
38
38
  def get_source_path(bug_instance)
39
- bug_instance.xpath('SourceLine').attribute('sourcepath').compact.first.value.to_s
39
+ get_value_safely(bug_instance.xpath('SourceLine').attribute('sourcepath'), '').to_s
40
40
  end
41
41
 
42
42
  def get_absolute_path(source_path)
@@ -56,4 +56,8 @@ class BugInstance
56
56
  def file_separator
57
57
  File::ALT_SEPARATOR || File::SEPARATOR
58
58
  end
59
+
60
+ def get_value_safely(array, default_value)
61
+ array.compact.empty? ? default_value : array.compact.first.value
62
+ end
59
63
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spotbugs
4
- VERSION = '0.0.3'
4
+ VERSION = '0.0.4'
5
5
  end
@@ -62,6 +62,54 @@ module Spotbugs
62
62
  xml.xpath('//BugInstance')[1]
63
63
  )
64
64
 
65
+ expect(bug_instance.rank).to eq(6)
66
+ expect(bug_instance.line).to eq(45)
67
+ expect(bug_instance.type).to eq(:warn)
68
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
69
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
70
+ expect(bug_instance.description).to eq('com.github.sample.model.Message.getProperties() may return null, but is declared @Nonnull')
71
+ end
72
+
73
+ it 'should initialize with third bug instance' do
74
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
75
+ bug_instance = BugInstance.new(
76
+ '/Users/developer/project/sample/',
77
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
78
+ xml.xpath('//BugInstance')[2]
79
+ )
80
+
81
+ expect(bug_instance.rank).to eq(14)
82
+ expect(bug_instance.line).to eq(0)
83
+ expect(bug_instance.type).to eq(:warn)
84
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
85
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
86
+ expect(bug_instance.description).to eq('Class com.github.sample.model.Message defines non-transient non-serializable instance field conversation')
87
+ end
88
+
89
+ it 'should initialize with fourth bug instance' do
90
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
91
+ bug_instance = BugInstance.new(
92
+ '/Users/developer/project/sample/',
93
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
94
+ xml.xpath('//BugInstance')[3]
95
+ )
96
+
97
+ expect(bug_instance.rank).to eq(14)
98
+ expect(bug_instance.line).to eq(0)
99
+ expect(bug_instance.type).to eq(:warn)
100
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
101
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
102
+ expect(bug_instance.description).to eq('Class com.github.sample.model.Message defines non-transient non-serializable instance field sender')
103
+ end
104
+
105
+ it 'should initialize with fifth bug instance' do
106
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
107
+ bug_instance = BugInstance.new(
108
+ '/Users/developer/project/sample/',
109
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
110
+ xml.xpath('//BugInstance')[4]
111
+ )
112
+
65
113
  expect(bug_instance.rank).to eq(6)
66
114
  expect(bug_instance.line).to eq(31)
67
115
  expect(bug_instance.type).to eq(:warn)
@@ -70,12 +118,12 @@ module Spotbugs
70
118
  expect(bug_instance.description).to eq('Possible null pointer dereference of Tools$Helper.string in com.github.sample.tools.Tools$Helper.setText(TextView)')
71
119
  end
72
120
 
73
- it 'should initialize with third bug instance' do
121
+ it 'should initialize with sixth bug instance' do
74
122
  xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
75
123
  bug_instance = BugInstance.new(
76
124
  '/Users/developer/project/sample/',
77
125
  xml.xpath('//BugCollection//SrcDir').map(&:text),
78
- xml.xpath('//BugInstance')[2]
126
+ xml.xpath('//BugInstance')[5]
79
127
  )
80
128
 
81
129
  expect(bug_instance.rank).to eq(8)
@@ -86,12 +134,12 @@ module Spotbugs
86
134
  expect(bug_instance.description).to eq('Read of unwritten field title in com.github.sample.tools.Tools$Helper.setText(TextView)')
87
135
  end
88
136
 
89
- it 'should initialize with fourth bug instance' do
137
+ it 'should initialize with seventh bug instance' do
90
138
  xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
91
139
  bug_instance = BugInstance.new(
92
140
  '/Users/developer/project/sample/',
93
141
  xml.xpath('//BugCollection//SrcDir').map(&:text),
94
- xml.xpath('//BugInstance')[3]
142
+ xml.xpath('//BugInstance')[6]
95
143
  )
96
144
 
97
145
  expect(bug_instance.rank).to eq(18)
@@ -102,12 +150,12 @@ module Spotbugs
102
150
  expect(bug_instance.description).to eq('Should com.github.sample.tools.Tools$Helper be a _static_ inner class?')
103
151
  end
104
152
 
105
- it 'should initialize with fifth bug instance' do
153
+ it 'should initialize with eight bug instance' do
106
154
  xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
107
155
  bug_instance = BugInstance.new(
108
156
  '/Users/developer/project/sample/',
109
157
  xml.xpath('//BugCollection//SrcDir').map(&:text),
110
- xml.xpath('//BugInstance')[4]
158
+ xml.xpath('//BugInstance')[7]
111
159
  )
112
160
 
113
161
  expect(bug_instance.rank).to eq(12)
@@ -118,12 +166,12 @@ module Spotbugs
118
166
  expect(bug_instance.description).to eq('Unwritten field: com.github.sample.tools.Tools$Helper.title')
119
167
  end
120
168
 
121
- it 'should initialize with sixth bug instance' do
169
+ it 'should initialize with nine bug instance' do
122
170
  xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
123
171
  bug_instance = BugInstance.new(
124
172
  '/Users/developer/project/sample/',
125
173
  xml.xpath('//BugCollection//SrcDir').map(&:text),
126
- xml.xpath('//BugInstance')[5]
174
+ xml.xpath('//BugInstance')[8]
127
175
  )
128
176
 
129
177
  expect(bug_instance.rank).to eq(18)
@@ -134,12 +182,12 @@ module Spotbugs
134
182
  expect(bug_instance.description).to eq('Should com.github.sample.tools.Tools$Other be a _static_ inner class?')
135
183
  end
136
184
 
137
- it 'should initialize with seventh bug instance' do
185
+ it 'should initialize with ten bug instance' do
138
186
  xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
139
187
  bug_instance = BugInstance.new(
140
188
  '/Users/developer/project/sample/',
141
189
  xml.xpath('//BugCollection//SrcDir').map(&:text),
142
- xml.xpath('//BugInstance')[6]
190
+ xml.xpath('//BugInstance')[9]
143
191
  )
144
192
 
145
193
  expect(bug_instance.rank).to eq(5)
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
 
3
- <BugCollection version="4.1.1" sequence="0" timestamp="1616453271149" analysisTimestamp="1616453271213" release="unspecified">
3
+ <BugCollection version="4.1.1" sequence="0" timestamp="1620641501525" analysisTimestamp="1620641501684" release="unspecified">
4
4
  <Project projectName="app (spotbugsRelease)">
5
5
  <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/MainActivity.class</Jar>
6
6
  <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/tools/Tools$Helper.class</Jar>
@@ -93,6 +93,82 @@
93
93
  <Message>Known null at MainActivity.java:[line 29]</Message>
94
94
  </SourceLine>
95
95
  </BugInstance>
96
+ <BugInstance type="NP_NONNULL_RETURN_VIOLATION" priority="1" rank="6" abbrev="NP" category="CORRECTNESS" instanceHash="3fed666a46df9026e83022b1d37620b0" instanceOccurrenceNum="0" instanceOccurrenceMax="0" cweid="476">
97
+ <ShortMessage>Method may return null, but is declared @Nonnull</ShortMessage>
98
+ <LongMessage>com.github.sample.model.Message.getProperties() may return null, but is declared @Nonnull</LongMessage>
99
+ <Class classname="com.github.sample.model.Message" primary="true">
100
+ <SourceLine classname="com.github.sample.model.Message" start="20" end="50" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java">
101
+ <Message>At Message.java:[lines 20-50]</Message>
102
+ </SourceLine>
103
+ <Message>In class com.github.sample.model.Message</Message>
104
+ </Class>
105
+ <Method classname="com.github.sample.model.Message" name="getProperties" signature="()Ljava/lang/String;" isStatic="false" primary="true">
106
+ <SourceLine classname="com.github.sample.model.Message" start="45" end="45" startBytecode="0" endBytecode="46" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java"/>
107
+ <Message>In method com.github.sample.model.Message.getProperties()</Message>
108
+ </Method>
109
+ <Field classname="com.github.sample.model.Message" name="properties" signature="Ljava/lang/String;" isStatic="false" primary="true" role="FIELD_CONTAINS_VALUE">
110
+ <SourceLine classname="com.github.sample.model.Message" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java">
111
+ <Message>In Message.java</Message>
112
+ </SourceLine>
113
+ <Message>Value contained in com.github.sample.model.Message.properties</Message>
114
+ </Field>
115
+ <SourceLine classname="com.github.sample.model.Message" primary="true" start="45" end="45" startBytecode="4" endBytecode="4" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java" role="SOURCE_LINE_RETURNED">
116
+ <Message>Returned at Message.java:[line 45]</Message>
117
+ </SourceLine>
118
+ <SourceLine classname="com.github.sample.model.Message" start="45" end="45" startBytecode="4" endBytecode="4" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java" role="SOURCE_LINE_KNOWN_NULL">
119
+ <Message>Known null at Message.java:[line 45]</Message>
120
+ </SourceLine>
121
+ </BugInstance>
122
+ <BugInstance type="SE_BAD_FIELD" priority="1" rank="14" abbrev="Se" category="BAD_PRACTICE" instanceHash="44742cc905f428a65c6dd14ac2daae78" instanceOccurrenceNum="0" instanceOccurrenceMax="0">
123
+ <ShortMessage>Non-transient non-serializable instance field in serializable class</ShortMessage>
124
+ <LongMessage>Class com.github.sample.model.Message defines non-transient non-serializable instance field conversation</LongMessage>
125
+ <Class classname="com.github.sample.model.Message" primary="true">
126
+ <SourceLine classname="com.github.sample.model.Message" start="20" end="50" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java">
127
+ <Message>At Message.java:[lines 20-50]</Message>
128
+ </SourceLine>
129
+ <Message>In class com.github.sample.model.Message</Message>
130
+ </Class>
131
+ <Field classname="com.github.sample.model.Message" name="conversation" signature="Lcom/github/sample/model/Conversation;" isStatic="false" primary="true">
132
+ <SourceLine classname="com.github.sample.model.Message" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java">
133
+ <Message>In Message.java</Message>
134
+ </SourceLine>
135
+ <Message>Field com.github.sample.model.Message.conversation</Message>
136
+ </Field>
137
+ <Type descriptor="Lcom/github/sample/model/Conversation;" role="TYPE_FOUND">
138
+ <SourceLine classname="com.github.sample.model.Conversation" start="11" end="26" sourcefile="Conversation.java" sourcepath="com/github/sample/model/Conversation.java">
139
+ <Message>At Conversation.java:[lines 11-26]</Message>
140
+ </SourceLine>
141
+ <Message>Actual type com.github.sample.model.Conversation</Message>
142
+ </Type>
143
+ <SourceLine classname="com.github.sample.model.Message" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java" synthetic="true">
144
+ <Message>In Message.java</Message>
145
+ </SourceLine>
146
+ </BugInstance>
147
+ <BugInstance type="SE_BAD_FIELD" priority="1" rank="14" abbrev="Se" category="BAD_PRACTICE" instanceHash="5c07870442e74a0a719c0059c999090e" instanceOccurrenceNum="0" instanceOccurrenceMax="0">
148
+ <ShortMessage>Non-transient non-serializable instance field in serializable class</ShortMessage>
149
+ <LongMessage>Class com.github.sample.model.Message defines non-transient non-serializable instance field sender</LongMessage>
150
+ <Class classname="com.github.sample.model.Message" primary="true">
151
+ <SourceLine classname="com.github.sample.model.Message" start="20" end="50" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java">
152
+ <Message>At Message.java:[lines 20-50]</Message>
153
+ </SourceLine>
154
+ <Message>In class com.github.sample.model.Message</Message>
155
+ </Class>
156
+ <Field classname="com.github.sample.model.Message" name="sender" signature="Lcom/github/sample/model/User;" isStatic="false" primary="true">
157
+ <SourceLine classname="com.github.sample.model.Message" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java">
158
+ <Message>In Message.java</Message>
159
+ </SourceLine>
160
+ <Message>Field com.github.sample.model.Message.sender</Message>
161
+ </Field>
162
+ <Type descriptor="Lcom/github/sample/model/User;" role="TYPE_FOUND">
163
+ <SourceLine classname="com.github.sample.model.User" start="11" end="26" sourcefile="User.java" sourcepath="com/github/sample/model/User.java">
164
+ <Message>At User.java:[lines 11-26]</Message>
165
+ </SourceLine>
166
+ <Message>Actual type com.github.sample.model.User</Message>
167
+ </Type>
168
+ <SourceLine classname="com.github.sample.model.Message" sourcefile="Message.java" sourcepath="com/github/sample/model/Message.java" synthetic="true">
169
+ <Message>In Message.java</Message>
170
+ </SourceLine>
171
+ </BugInstance>
96
172
  <BugInstance type="NP_NULL_ON_SOME_PATH" priority="1" rank="6" abbrev="NP" category="CORRECTNESS" instanceHash="36d97a1af3badcca6f42173c474917a6" instanceOccurrenceNum="0" instanceOccurrenceMax="0" cweid="476">
97
173
  <ShortMessage>Possible null pointer dereference</ShortMessage>
98
174
  <LongMessage>Possible null pointer dereference of Tools$Helper.string in com.github.sample.tools.Tools$Helper.setText(TextView)</LongMessage>
@@ -204,13 +280,16 @@
204
280
  <Message>Value -1</Message>
205
281
  </Int>
206
282
  <Method classname="java.util.ArrayList" name="size" signature="()I" isStatic="false" role="METHOD_RETURN_VALUE_OF">
207
- <SourceLine classname="java.util.ArrayList" start="282" end="282" startBytecode="0" endBytecode="28" sourcefile="ArrayList.java" sourcepath="java/util/ArrayList.java"/>
283
+ <SourceLine classname="java.util.ArrayList" start="285" end="285" startBytecode="0" endBytecode="64" sourcefile="ArrayList.java" sourcepath="java/util/ArrayList.java"/>
208
284
  <Message>Return value of java.util.ArrayList.size() of type int</Message>
209
285
  </Method>
210
286
  <SourceLine classname="com.github.sample.view.ConversationAdapter" primary="true" start="32" end="32" startBytecode="5" endBytecode="5" sourcefile="ConversationAdapter.java" sourcepath="com/github/sample/view/ConversationAdapter.java">
211
287
  <Message>At ConversationAdapter.java:[line 32]</Message>
212
288
  </SourceLine>
213
289
  </BugInstance>
290
+ <BugCategory category="BAD_PRACTICE">
291
+ <Description>Bad practice</Description>
292
+ </BugCategory>
214
293
  <BugCategory category="CORRECTNESS">
215
294
  <Description>Correctness</Description>
216
295
  </BugCategory>
@@ -230,6 +309,17 @@ the null pointer exception can't ever be executed; deciding that is beyond the a
230
309
 
231
310
  ]]></Details>
232
311
  </BugPattern>
312
+ <BugPattern type="NP_NONNULL_RETURN_VIOLATION" abbrev="NP" category="CORRECTNESS">
313
+ <ShortDescription>Method may return null, but is declared @Nonnull</ShortDescription>
314
+ <Details><![CDATA[
315
+
316
+ <p>
317
+ This method may return a null value, but the method (or a superclass method
318
+ which it overrides) is declared to return @Nonnull.
319
+ </p>
320
+
321
+ ]]></Details>
322
+ </BugPattern>
233
323
  <BugPattern type="UWF_UNWRITTEN_FIELD" abbrev="UwF" category="CORRECTNESS">
234
324
  <ShortDescription>Unwritten field</ShortDescription>
235
325
  <Details><![CDATA[
@@ -263,6 +353,19 @@ dereferencing this value will generate a null pointer exception.
263
353
 
264
354
  ]]></Details>
265
355
  </BugPattern>
356
+ <BugPattern type="SE_BAD_FIELD" abbrev="Se" category="BAD_PRACTICE">
357
+ <ShortDescription>Non-transient non-serializable instance field in serializable class</ShortDescription>
358
+ <Details><![CDATA[
359
+
360
+ <p> This Serializable class defines a non-primitive instance field which is neither transient,
361
+ Serializable, or <code>java.lang.Object</code>, and does not appear to implement
362
+ the <code>Externalizable</code> interface or the
363
+ <code>readObject()</code> and <code>writeObject()</code> methods.&nbsp;
364
+ Objects of this class will not be deserialized correctly if a non-Serializable
365
+ object is stored in this field.</p>
366
+
367
+ ]]></Details>
368
+ </BugPattern>
266
369
  <BugPattern type="INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE" abbrev="INT" category="CORRECTNESS">
267
370
  <ShortDescription>Bad comparison of nonnegative value with negative constant or zero</ShortDescription>
268
371
  <Details><![CDATA[
@@ -275,6 +378,9 @@ dereferencing this value will generate a null pointer exception.
275
378
  <BugCode abbrev="NP" cweid="476">
276
379
  <Description>Null pointer dereference</Description>
277
380
  </BugCode>
381
+ <BugCode abbrev="Se">
382
+ <Description>Incorrect definition of Serializable class</Description>
383
+ </BugCode>
278
384
  <BugCode abbrev="UwF">
279
385
  <Description>Unwritten field</Description>
280
386
  </BugCode>
@@ -290,11 +396,11 @@ dereferencing this value will generate a null pointer exception.
290
396
  <MissingClass>android.view.View</MissingClass>
291
397
  <MissingClass>android.widget.TextView</MissingClass>
292
398
  </Errors>
293
- <FindBugsSummary timestamp="Mon, 22 Mar 2021 23:47:51 +0100" total_classes="14" referenced_classes="231" total_bugs="7" total_size="172" num_packages="4" java_version="1.8.0_242-release" vm_version="25.242-b3-6915495" cpu_seconds="22.84" clock_seconds="2.65" peak_mbytes="224.15" alloc_mbytes="455.50" gc_seconds="0.14" priority_2="4" priority_1="3">
294
- <FileStats path="com/github/sample/BuildConfig.java" bugCount="0" size="10"/>
399
+ <FindBugsSummary timestamp="Mon, 10 May 2021 12:11:41 +0200" total_classes="14" referenced_classes="232" total_bugs="10" total_size="176" num_packages="4" java_version="11.0.10" vm_version="11.0.10+9" cpu_seconds="7.96" clock_seconds="3.13" peak_mbytes="245.68" alloc_mbytes="512.00" gc_seconds="0.03" priority_2="4" priority_1="6">
400
+ <FileStats path="com/github/sample/BuildConfig.java" bugCount="0" size="8"/>
295
401
  <FileStats path="com/github/sample/MainActivity.java" bugCount="1" size="23" bugHash="3d4de8c5d2e5bc77cb5db28779c6c525"/>
296
402
  <FileStats path="com/github/sample/model/Conversation.java" bugCount="0" size="16"/>
297
- <FileStats path="com/github/sample/model/Message.java" bugCount="0" size="20"/>
403
+ <FileStats path="com/github/sample/model/Message.java" bugCount="3" size="26" bugHash="d95b4d13e0ff01bd6f699166cd212709"/>
298
404
  <FileStats path="com/github/sample/model/Type.java" bugCount="0" size="11"/>
299
405
  <FileStats path="com/github/sample/model/User.java" bugCount="0" size="16"/>
300
406
  <FileStats path="com/github/sample/tools/Tools.java" bugCount="5" size="25" bugHash="f4054acc9c26c5455b8a4dbd032c7b07"/>
@@ -302,14 +408,14 @@ dereferencing this value will generate a null pointer exception.
302
408
  <FileStats path="com/github/sample/view/ConversationClickListener.java" bugCount="0" size="2"/>
303
409
  <FileStats path="com/github/sample/view/ConversationViewHolder.java" bugCount="0" size="15"/>
304
410
  <FileStats path="com/github/sample/view/MainViewModel.java" bugCount="0" size="15"/>
305
- <PackageStats package="com.github.sample" total_bugs="1" total_types="3" total_size="33" priority_1="1">
306
- <ClassStats class="com.github.sample.BuildConfig" sourceFile="BuildConfig.java" interface="false" size="10" bugs="0"/>
411
+ <PackageStats package="com.github.sample" total_bugs="1" total_types="3" total_size="31" priority_1="1">
412
+ <ClassStats class="com.github.sample.BuildConfig" sourceFile="BuildConfig.java" interface="false" size="8" bugs="0"/>
307
413
  <ClassStats class="com.github.sample.MainActivity" sourceFile="MainActivity.java" interface="false" size="16" bugs="1" priority_1="1"/>
308
414
  <ClassStats class="com.github.sample.MainActivity$1" sourceFile="MainActivity.java" interface="false" size="7" bugs="0"/>
309
415
  </PackageStats>
310
- <PackageStats package="com.github.sample.model" total_bugs="0" total_types="4" total_size="63">
416
+ <PackageStats package="com.github.sample.model" total_bugs="3" total_types="4" total_size="69" priority_1="3">
311
417
  <ClassStats class="com.github.sample.model.Conversation" sourceFile="Conversation.java" interface="false" size="16" bugs="0"/>
312
- <ClassStats class="com.github.sample.model.Message" sourceFile="Message.java" interface="false" size="20" bugs="0"/>
418
+ <ClassStats class="com.github.sample.model.Message" sourceFile="Message.java" interface="false" size="26" bugs="3" priority_1="3"/>
313
419
  <ClassStats class="com.github.sample.model.Type" sourceFile="Type.java" interface="false" size="11" bugs="0"/>
314
420
  <ClassStats class="com.github.sample.model.User" sourceFile="User.java" interface="false" size="16" bugs="0"/>
315
421
  </PackageStats>
@@ -325,20 +431,17 @@ dereferencing this value will generate a null pointer exception.
325
431
  <ClassStats class="com.github.sample.view.MainViewModel" sourceFile="MainViewModel.java" interface="false" size="15" bugs="0"/>
326
432
  </PackageStats>
327
433
  <FindBugsProfile>
328
- <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine" totalMilliseconds="315" invocations="1076" avgMicrosecondsPerInvocation="293" maxMicrosecondsPerInvocation="20284" standardDeviationMicrosecondsPerInvocation="1002"/>
329
- <ClassProfile name="edu.umd.cs.findbugs.detect.FindNoSideEffectMethods" totalMilliseconds="228" invocations="231" avgMicrosecondsPerInvocation="990" maxMicrosecondsPerInvocation="17010" standardDeviationMicrosecondsPerInvocation="2209"/>
330
- <ClassProfile name="edu.umd.cs.findbugs.detect.FieldItemSummary" totalMilliseconds="208" invocations="231" avgMicrosecondsPerInvocation="902" maxMicrosecondsPerInvocation="14783" standardDeviationMicrosecondsPerInvocation="1877"/>
331
- <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.MethodGenFactory" totalMilliseconds="164" invocations="43" avgMicrosecondsPerInvocation="3828" maxMicrosecondsPerInvocation="158335" standardDeviationMicrosecondsPerInvocation="23841"/>
332
- <ClassProfile name="edu.umd.cs.findbugs.detect.EqualsOperandShouldHaveClassCompatibleWithThis" totalMilliseconds="131" invocations="231" avgMicrosecondsPerInvocation="570" maxMicrosecondsPerInvocation="109141" standardDeviationMicrosecondsPerInvocation="7163"/>
333
- <ClassProfile name="edu.umd.cs.findbugs.OpcodeStack$JumpInfoFactory" totalMilliseconds="107" invocations="362" avgMicrosecondsPerInvocation="296" maxMicrosecondsPerInvocation="4988" standardDeviationMicrosecondsPerInvocation="423"/>
334
- <ClassProfile name="edu.umd.cs.findbugs.detect.NoteDirectlyRelevantTypeQualifiers" totalMilliseconds="78" invocations="231" avgMicrosecondsPerInvocation="340" maxMicrosecondsPerInvocation="6802" standardDeviationMicrosecondsPerInvocation="765"/>
335
- <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.ClassDataAnalysisEngine" totalMilliseconds="70" invocations="1080" avgMicrosecondsPerInvocation="65" maxMicrosecondsPerInvocation="1086" standardDeviationMicrosecondsPerInvocation="60"/>
336
- <ClassProfile name="edu.umd.cs.findbugs.detect.CalledMethods" totalMilliseconds="66" invocations="231" avgMicrosecondsPerInvocation="289" maxMicrosecondsPerInvocation="7028" standardDeviationMicrosecondsPerInvocation="763"/>
337
- <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.JavaClassAnalysisEngine" totalMilliseconds="66" invocations="293" avgMicrosecondsPerInvocation="225" maxMicrosecondsPerInvocation="16463" standardDeviationMicrosecondsPerInvocation="1003"/>
338
- <ClassProfile name="edu.umd.cs.findbugs.detect.BuildObligationPolicyDatabase" totalMilliseconds="54" invocations="231" avgMicrosecondsPerInvocation="236" maxMicrosecondsPerInvocation="4381" standardDeviationMicrosecondsPerInvocation="456"/>
339
- <ClassProfile name="edu.umd.cs.findbugs.util.TopologicalSort" totalMilliseconds="46" invocations="903" avgMicrosecondsPerInvocation="51" maxMicrosecondsPerInvocation="1384" standardDeviationMicrosecondsPerInvocation="108"/>
340
- <ClassProfile name="edu.umd.cs.findbugs.detect.FunctionsThatMightBeMistakenForProcedures" totalMilliseconds="39" invocations="231" avgMicrosecondsPerInvocation="172" maxMicrosecondsPerInvocation="3428" standardDeviationMicrosecondsPerInvocation="398"/>
341
- <ClassProfile name="edu.umd.cs.findbugs.detect.OverridingEqualsNotSymmetrical" totalMilliseconds="38" invocations="231" avgMicrosecondsPerInvocation="167" maxMicrosecondsPerInvocation="9114" standardDeviationMicrosecondsPerInvocation="640"/>
434
+ <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine" totalMilliseconds="626" invocations="1115" avgMicrosecondsPerInvocation="562" maxMicrosecondsPerInvocation="20203" standardDeviationMicrosecondsPerInvocation="1376"/>
435
+ <ClassProfile name="edu.umd.cs.findbugs.detect.FieldItemSummary" totalMilliseconds="257" invocations="232" avgMicrosecondsPerInvocation="1110" maxMicrosecondsPerInvocation="14526" standardDeviationMicrosecondsPerInvocation="2404"/>
436
+ <ClassProfile name="edu.umd.cs.findbugs.detect.FindNoSideEffectMethods" totalMilliseconds="248" invocations="232" avgMicrosecondsPerInvocation="1072" maxMicrosecondsPerInvocation="17254" standardDeviationMicrosecondsPerInvocation="2383"/>
437
+ <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.ClassDataAnalysisEngine" totalMilliseconds="160" invocations="1120" avgMicrosecondsPerInvocation="143" maxMicrosecondsPerInvocation="6404" standardDeviationMicrosecondsPerInvocation="278"/>
438
+ <ClassProfile name="edu.umd.cs.findbugs.OpcodeStack$JumpInfoFactory" totalMilliseconds="123" invocations="365" avgMicrosecondsPerInvocation="339" maxMicrosecondsPerInvocation="5431" standardDeviationMicrosecondsPerInvocation="526"/>
439
+ <ClassProfile name="edu.umd.cs.findbugs.detect.NoteDirectlyRelevantTypeQualifiers" totalMilliseconds="108" invocations="232" avgMicrosecondsPerInvocation="469" maxMicrosecondsPerInvocation="8119" standardDeviationMicrosecondsPerInvocation="1064"/>
440
+ <ClassProfile name="edu.umd.cs.findbugs.detect.CalledMethods" totalMilliseconds="96" invocations="232" avgMicrosecondsPerInvocation="417" maxMicrosecondsPerInvocation="9079" standardDeviationMicrosecondsPerInvocation="1138"/>
441
+ <ClassProfile name="edu.umd.cs.findbugs.classfile.engine.bcel.JavaClassAnalysisEngine" totalMilliseconds="81" invocations="294" avgMicrosecondsPerInvocation="278" maxMicrosecondsPerInvocation="19521" standardDeviationMicrosecondsPerInvocation="1327"/>
442
+ <ClassProfile name="edu.umd.cs.findbugs.detect.FunctionsThatMightBeMistakenForProcedures" totalMilliseconds="70" invocations="232" avgMicrosecondsPerInvocation="305" maxMicrosecondsPerInvocation="16789" standardDeviationMicrosecondsPerInvocation="1224"/>
443
+ <ClassProfile name="edu.umd.cs.findbugs.util.TopologicalSort" totalMilliseconds="70" invocations="940" avgMicrosecondsPerInvocation="75" maxMicrosecondsPerInvocation="2091" standardDeviationMicrosecondsPerInvocation="156"/>
444
+ <ClassProfile name="edu.umd.cs.findbugs.detect.BuildObligationPolicyDatabase" totalMilliseconds="56" invocations="232" avgMicrosecondsPerInvocation="244" maxMicrosecondsPerInvocation="4025" standardDeviationMicrosecondsPerInvocation="446"/>
342
445
  </FindBugsProfile>
343
446
  </FindBugsSummary>
344
447
  <ClassFeatures></ClassFeatures>
@@ -58,7 +58,7 @@ module Danger
58
58
 
59
59
  spotbugs_issues = @spotbugs.report
60
60
  expect(spotbugs_issues).not_to be_nil
61
- expect(spotbugs_issues.length).to be(7)
61
+ expect(spotbugs_issues.length).to be(10)
62
62
 
63
63
  spotbugs_issue1 = spotbugs_issues[0]
64
64
  expect(spotbugs_issue1.rank).to eq(6)
@@ -70,51 +70,75 @@ module Danger
70
70
 
71
71
  spotbugs_issue2 = spotbugs_issues[1]
72
72
  expect(spotbugs_issue2.rank).to eq(6)
73
- expect(spotbugs_issue2.line).to eq(31)
73
+ expect(spotbugs_issue2.line).to eq(45)
74
74
  expect(spotbugs_issue2.type).to eq(:warn)
75
- expect(spotbugs_issue2.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
76
- expect(spotbugs_issue2.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
77
- expect(spotbugs_issue2.description).to eq('Possible null pointer dereference of Tools$Helper.string in com.github.sample.tools.Tools$Helper.setText(TextView)')
75
+ expect(spotbugs_issue2.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
76
+ expect(spotbugs_issue2.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
77
+ expect(spotbugs_issue2.description).to eq('com.github.sample.model.Message.getProperties() may return null, but is declared @Nonnull')
78
78
 
79
79
  spotbugs_issue3 = spotbugs_issues[2]
80
- expect(spotbugs_issue3.rank).to eq(8)
81
- expect(spotbugs_issue3.line).to eq(32)
80
+ expect(spotbugs_issue3.rank).to eq(14)
81
+ expect(spotbugs_issue3.line).to eq(0)
82
82
  expect(spotbugs_issue3.type).to eq(:warn)
83
- expect(spotbugs_issue3.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
84
- expect(spotbugs_issue3.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
85
- expect(spotbugs_issue3.description).to eq('Read of unwritten field title in com.github.sample.tools.Tools$Helper.setText(TextView)')
83
+ expect(spotbugs_issue3.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
84
+ expect(spotbugs_issue3.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
85
+ expect(spotbugs_issue3.description).to eq('Class com.github.sample.model.Message defines non-transient non-serializable instance field conversation')
86
86
 
87
87
  spotbugs_issue4 = spotbugs_issues[3]
88
- expect(spotbugs_issue4.rank).to eq(18)
89
- expect(spotbugs_issue4.line).to eq(23)
88
+ expect(spotbugs_issue4.rank).to eq(14)
89
+ expect(spotbugs_issue4.line).to eq(0)
90
90
  expect(spotbugs_issue4.type).to eq(:warn)
91
- expect(spotbugs_issue4.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
92
- expect(spotbugs_issue4.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
93
- expect(spotbugs_issue4.description).to eq('Should com.github.sample.tools.Tools$Helper be a _static_ inner class?')
91
+ expect(spotbugs_issue4.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
92
+ expect(spotbugs_issue4.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
93
+ expect(spotbugs_issue4.description).to eq('Class com.github.sample.model.Message defines non-transient non-serializable instance field sender')
94
94
 
95
95
  spotbugs_issue5 = spotbugs_issues[4]
96
- expect(spotbugs_issue5.rank).to eq(12)
97
- expect(spotbugs_issue5.line).to eq(32)
96
+ expect(spotbugs_issue5.rank).to eq(6)
97
+ expect(spotbugs_issue5.line).to eq(31)
98
98
  expect(spotbugs_issue5.type).to eq(:warn)
99
99
  expect(spotbugs_issue5.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
100
100
  expect(spotbugs_issue5.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
101
- expect(spotbugs_issue5.description).to eq('Unwritten field: com.github.sample.tools.Tools$Helper.title')
101
+ expect(spotbugs_issue5.description).to eq('Possible null pointer dereference of Tools$Helper.string in com.github.sample.tools.Tools$Helper.setText(TextView)')
102
102
 
103
103
  spotbugs_issue6 = spotbugs_issues[5]
104
- expect(spotbugs_issue6.rank).to eq(18)
105
- expect(spotbugs_issue6.line).to eq(15)
104
+ expect(spotbugs_issue6.rank).to eq(8)
105
+ expect(spotbugs_issue6.line).to eq(32)
106
106
  expect(spotbugs_issue6.type).to eq(:warn)
107
107
  expect(spotbugs_issue6.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
108
108
  expect(spotbugs_issue6.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
109
- expect(spotbugs_issue6.description).to eq('Should com.github.sample.tools.Tools$Other be a _static_ inner class?')
109
+ expect(spotbugs_issue6.description).to eq('Read of unwritten field title in com.github.sample.tools.Tools$Helper.setText(TextView)')
110
110
 
111
111
  spotbugs_issue7 = spotbugs_issues[6]
112
- expect(spotbugs_issue7.rank).to eq(5)
113
- expect(spotbugs_issue7.line).to eq(32)
112
+ expect(spotbugs_issue7.rank).to eq(18)
113
+ expect(spotbugs_issue7.line).to eq(23)
114
114
  expect(spotbugs_issue7.type).to eq(:warn)
115
- expect(spotbugs_issue7.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/view/ConversationAdapter.java')
116
- expect(spotbugs_issue7.relative_path).to eq('app/src/main/java/com/github/sample/view/ConversationAdapter.java')
117
- expect(spotbugs_issue7.description).to eq('Bad comparison of nonnegative value with -1 in com.github.sample.view.ConversationAdapter.setConversations(ArrayList)')
115
+ expect(spotbugs_issue7.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
116
+ expect(spotbugs_issue7.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
117
+ expect(spotbugs_issue7.description).to eq('Should com.github.sample.tools.Tools$Helper be a _static_ inner class?')
118
+
119
+ spotbugs_issue8 = spotbugs_issues[7]
120
+ expect(spotbugs_issue8.rank).to eq(12)
121
+ expect(spotbugs_issue8.line).to eq(32)
122
+ expect(spotbugs_issue8.type).to eq(:warn)
123
+ expect(spotbugs_issue8.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
124
+ expect(spotbugs_issue8.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
125
+ expect(spotbugs_issue8.description).to eq('Unwritten field: com.github.sample.tools.Tools$Helper.title')
126
+
127
+ spotbugs_issue9 = spotbugs_issues[8]
128
+ expect(spotbugs_issue9.rank).to eq(18)
129
+ expect(spotbugs_issue9.line).to eq(15)
130
+ expect(spotbugs_issue9.type).to eq(:warn)
131
+ expect(spotbugs_issue9.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
132
+ expect(spotbugs_issue9.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
133
+ expect(spotbugs_issue9.description).to eq('Should com.github.sample.tools.Tools$Other be a _static_ inner class?')
134
+
135
+ spotbugs_issue10 = spotbugs_issues[9]
136
+ expect(spotbugs_issue10.rank).to eq(5)
137
+ expect(spotbugs_issue10.line).to eq(32)
138
+ expect(spotbugs_issue10.type).to eq(:warn)
139
+ expect(spotbugs_issue10.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/view/ConversationAdapter.java')
140
+ expect(spotbugs_issue10.relative_path).to eq('app/src/main/java/com/github/sample/view/ConversationAdapter.java')
141
+ expect(spotbugs_issue10.description).to eq('Bad comparison of nonnegative value with -1 in com.github.sample.view.ConversationAdapter.setConversations(ArrayList)')
118
142
  end
119
143
 
120
144
  it 'Report with report file not in target files' do
@@ -133,7 +157,7 @@ module Danger
133
157
 
134
158
  spotbugs_issues = @spotbugs.report
135
159
  expect(spotbugs_issues).not_to be_nil
136
- expect(spotbugs_issues.length).to be(2)
160
+ expect(spotbugs_issues.length).to be(5)
137
161
 
138
162
  spotbugs_issue1 = spotbugs_issues[0]
139
163
  expect(spotbugs_issue1.rank).to eq(6)
@@ -144,12 +168,36 @@ module Danger
144
168
  expect(spotbugs_issue1.description).to eq('Possible null pointer dereference of MainActivity.conversationAdapter in com.github.sample.MainActivity.onCreate(Bundle)')
145
169
 
146
170
  spotbugs_issue2 = spotbugs_issues[1]
147
- expect(spotbugs_issue2.rank).to eq(5)
148
- expect(spotbugs_issue2.line).to eq(32)
171
+ expect(spotbugs_issue2.rank).to eq(6)
172
+ expect(spotbugs_issue2.line).to eq(45)
149
173
  expect(spotbugs_issue2.type).to eq(:warn)
150
- expect(spotbugs_issue2.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/view/ConversationAdapter.java')
151
- expect(spotbugs_issue2.relative_path).to eq('app/src/main/java/com/github/sample/view/ConversationAdapter.java')
152
- expect(spotbugs_issue2.description).to eq('Bad comparison of nonnegative value with -1 in com.github.sample.view.ConversationAdapter.setConversations(ArrayList)')
174
+ expect(spotbugs_issue2.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
175
+ expect(spotbugs_issue2.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
176
+ expect(spotbugs_issue2.description).to eq('com.github.sample.model.Message.getProperties() may return null, but is declared @Nonnull')
177
+
178
+ spotbugs_issue3 = spotbugs_issues[2]
179
+ expect(spotbugs_issue3.rank).to eq(14)
180
+ expect(spotbugs_issue3.line).to eq(0)
181
+ expect(spotbugs_issue3.type).to eq(:warn)
182
+ expect(spotbugs_issue3.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
183
+ expect(spotbugs_issue3.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
184
+ expect(spotbugs_issue3.description).to eq('Class com.github.sample.model.Message defines non-transient non-serializable instance field conversation')
185
+
186
+ spotbugs_issue4 = spotbugs_issues[3]
187
+ expect(spotbugs_issue4.rank).to eq(14)
188
+ expect(spotbugs_issue4.line).to eq(0)
189
+ expect(spotbugs_issue4.type).to eq(:warn)
190
+ expect(spotbugs_issue4.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java')
191
+ expect(spotbugs_issue4.relative_path).to eq('app/src/main/java/com/github/sample/model/Message.java')
192
+ expect(spotbugs_issue4.description).to eq('Class com.github.sample.model.Message defines non-transient non-serializable instance field sender')
193
+
194
+ spotbugs_issue5 = spotbugs_issues[4]
195
+ expect(spotbugs_issue5.rank).to eq(5)
196
+ expect(spotbugs_issue5.line).to eq(32)
197
+ expect(spotbugs_issue5.type).to eq(:warn)
198
+ expect(spotbugs_issue5.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/view/ConversationAdapter.java')
199
+ expect(spotbugs_issue5.relative_path).to eq('app/src/main/java/com/github/sample/view/ConversationAdapter.java')
200
+ expect(spotbugs_issue5.description).to eq('Bad comparison of nonnegative value with -1 in com.github.sample.view.ConversationAdapter.setConversations(ArrayList)')
153
201
  end
154
202
 
155
203
  it 'Report without Gradle' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-spotbugs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mathieu Rul
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-06 00:00:00.000000000 Z
11
+ date: 2021-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danger-plugin-api