danger-spotbugs 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,153 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../spec_helper'
4
+
5
+ module Spotbugs
6
+ require 'oga'
7
+
8
+ describe BugInstance do
9
+ it 'should initialize with first bug instance' do
10
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
11
+ bug_instance = BugInstance.new(
12
+ '/Users/developer/project/sample/',
13
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
14
+ xml.xpath('//BugInstance')[0]
15
+ )
16
+
17
+ expect(bug_instance.rank).to eq(6)
18
+ expect(bug_instance.line).to eq(29)
19
+ expect(bug_instance.type).to eq(:warn)
20
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/MainActivity.java')
21
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/MainActivity.java')
22
+ expect(bug_instance.description).to eq('Possible null pointer dereference of MainActivity.conversationAdapter in com.github.sample.MainActivity.onCreate(Bundle)')
23
+ end
24
+
25
+ it 'should initialize with first bug instance and prefix without trailing file separator' do
26
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
27
+ bug_instance = BugInstance.new(
28
+ '/Users/developer/project/sample',
29
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
30
+ xml.xpath('//BugInstance')[0]
31
+ )
32
+
33
+ expect(bug_instance.rank).to eq(6)
34
+ expect(bug_instance.line).to eq(29)
35
+ expect(bug_instance.type).to eq(:warn)
36
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/MainActivity.java')
37
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/MainActivity.java')
38
+ expect(bug_instance.description).to eq('Possible null pointer dereference of MainActivity.conversationAdapter in com.github.sample.MainActivity.onCreate(Bundle)')
39
+ end
40
+
41
+ it 'should initialize with first bug instance and unknown prefix' do
42
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
43
+ bug_instance = BugInstance.new(
44
+ '/Users/unknown',
45
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
46
+ xml.xpath('//BugInstance')[0]
47
+ )
48
+
49
+ expect(bug_instance.rank).to eq(6)
50
+ expect(bug_instance.line).to eq(29)
51
+ expect(bug_instance.type).to eq(:warn)
52
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/MainActivity.java')
53
+ expect(bug_instance.relative_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/MainActivity.java')
54
+ expect(bug_instance.description).to eq('Possible null pointer dereference of MainActivity.conversationAdapter in com.github.sample.MainActivity.onCreate(Bundle)')
55
+ end
56
+
57
+ it 'should initialize with second bug instance' do
58
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
59
+ bug_instance = BugInstance.new(
60
+ '/Users/developer/project/sample/',
61
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
62
+ xml.xpath('//BugInstance')[1]
63
+ )
64
+
65
+ expect(bug_instance.rank).to eq(6)
66
+ expect(bug_instance.line).to eq(31)
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/tools/Tools.java')
69
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
70
+ expect(bug_instance.description).to eq('Possible null pointer dereference of Tools$Helper.string in com.github.sample.tools.Tools$Helper.setText(TextView)')
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(8)
82
+ expect(bug_instance.line).to eq(32)
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/tools/Tools.java')
85
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
86
+ expect(bug_instance.description).to eq('Read of unwritten field title in com.github.sample.tools.Tools$Helper.setText(TextView)')
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(18)
98
+ expect(bug_instance.line).to eq(23)
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/tools/Tools.java')
101
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
102
+ expect(bug_instance.description).to eq('Should com.github.sample.tools.Tools$Helper be a _static_ inner class?')
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
+
113
+ expect(bug_instance.rank).to eq(12)
114
+ expect(bug_instance.line).to eq(32)
115
+ expect(bug_instance.type).to eq(:warn)
116
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
117
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
118
+ expect(bug_instance.description).to eq('Unwritten field: com.github.sample.tools.Tools$Helper.title')
119
+ end
120
+
121
+ it 'should initialize with sixth bug instance' do
122
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
123
+ bug_instance = BugInstance.new(
124
+ '/Users/developer/project/sample/',
125
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
126
+ xml.xpath('//BugInstance')[5]
127
+ )
128
+
129
+ expect(bug_instance.rank).to eq(18)
130
+ expect(bug_instance.line).to eq(15)
131
+ expect(bug_instance.type).to eq(:warn)
132
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java')
133
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/tools/Tools.java')
134
+ expect(bug_instance.description).to eq('Should com.github.sample.tools.Tools$Other be a _static_ inner class?')
135
+ end
136
+
137
+ it 'should initialize with seventh bug instance' do
138
+ xml = Oga.parse_xml(File.open('spec/fixtures/spotbugs_report.xml'))
139
+ bug_instance = BugInstance.new(
140
+ '/Users/developer/project/sample/',
141
+ xml.xpath('//BugCollection//SrcDir').map(&:text),
142
+ xml.xpath('//BugInstance')[6]
143
+ )
144
+
145
+ expect(bug_instance.rank).to eq(5)
146
+ expect(bug_instance.line).to eq(32)
147
+ expect(bug_instance.type).to eq(:warn)
148
+ expect(bug_instance.absolute_path).to eq('/Users/developer/project/sample/app/src/main/java/com/github/sample/view/ConversationAdapter.java')
149
+ expect(bug_instance.relative_path).to eq('app/src/main/java/com/github/sample/view/ConversationAdapter.java')
150
+ expect(bug_instance.description).to eq('Bad comparison of nonnegative value with -1 in com.github.sample.view.ConversationAdapter.setConversations(ArrayList)')
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,346 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <BugCollection version="4.1.1" sequence="0" timestamp="1616453271149" analysisTimestamp="1616453271213" release="unspecified">
4
+ <Project projectName="app (spotbugsRelease)">
5
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/MainActivity.class</Jar>
6
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/tools/Tools$Helper.class</Jar>
7
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/tools/Tools$Other.class</Jar>
8
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/tools/Tools.class</Jar>
9
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/BuildConfig.class</Jar>
10
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/model/Conversation.class</Jar>
11
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/model/Message.class</Jar>
12
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/model/Type.class</Jar>
13
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/model/User.class</Jar>
14
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/view/MainViewModel.class</Jar>
15
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/view/ConversationViewHolder.class</Jar>
16
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/view/ConversationAdapter.class</Jar>
17
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/view/ConversationClickListener.class</Jar>
18
+ <Jar>/Users/developer/project/sample/app/build/intermediates/javac/release/classes/com/github/sample/MainActivity$1.class</Jar>
19
+ <AuxClasspathEntry>/Users/developer/project/sample/app/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/release/R.jar</AuxClasspathEntry>
20
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/7e4b867e2d0f6dea75bcdd697d1f69dd/material-1.3.0-api.jar</AuxClasspathEntry>
21
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/0a4b14c02b458b8b0611f5c4ae8a5d44/constraintlayout-2.0.4-api.jar</AuxClasspathEntry>
22
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/683343af73498b739e2b04bcaeaf63e3/appcompat-1.2.0-api.jar</AuxClasspathEntry>
23
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/b68936747c61896fa532975bf0d39b4d/jetified-viewpager2-1.0.0-api.jar</AuxClasspathEntry>
24
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/199a4d7295696d0246b6ff0076ca629c/recyclerview-1.1.0-api.jar</AuxClasspathEntry>
25
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/30201beec5d4ef8e01196b5ac791b4b5/fragment-1.1.0-api.jar</AuxClasspathEntry>
26
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/bdaa889975ef518124dc67650cd1f7b8/jetified-appcompat-resources-1.2.0-api.jar</AuxClasspathEntry>
27
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/b7e347f4735e1b77fa91c9511430ac1a/drawerlayout-1.0.0-api.jar</AuxClasspathEntry>
28
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/7864b887305f0fe13b89e7ac410b4c2e/coordinatorlayout-1.1.0-api.jar</AuxClasspathEntry>
29
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/d2aa73a80f43aa6f3aec0fa0f0c612e6/viewpager-1.0.0-api.jar</AuxClasspathEntry>
30
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/bce97611a2017f226f4f88307637344a/customview-1.0.0-api.jar</AuxClasspathEntry>
31
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/572ddfdda97d22fe148eb2e08d685fbf/dynamicanimation-1.0.0-api.jar</AuxClasspathEntry>
32
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/8ecbf1470d072d91138ce0211ab550fd/transition-1.2.0-api.jar</AuxClasspathEntry>
33
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/cc24e64fbaa350d257282479bc7c2c56/vectordrawable-animated-1.1.0-api.jar</AuxClasspathEntry>
34
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/9dd0b1ec597ae2718d0ae7bf4aac2744/vectordrawable-1.1.0-api.jar</AuxClasspathEntry>
35
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/c1bfec2c4ec89ddf6f21624150df346a/legacy-support-core-utils-1.0.0-api.jar</AuxClasspathEntry>
36
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/42b19e6e8e328e6b377b3b45a32caa8f/loader-1.0.0-api.jar</AuxClasspathEntry>
37
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/98b2d5ba374afb2043774f9d2d814cc7/jetified-activity-1.0.0-api.jar</AuxClasspathEntry>
38
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/d88d1516fa00724322e40364dd43f4dc/core-1.3.1-api.jar</AuxClasspathEntry>
39
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/90ca9d2afbad29b01dc244f61e22d326/cursoradapter-1.0.0-api.jar</AuxClasspathEntry>
40
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/1d70eb41c7fe34d5e9d3d0259c721615/versionedparcelable-1.1.0-api.jar</AuxClasspathEntry>
41
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/modules-2/files-2.1/androidx.collection/collection/1.1.0/1f27220b47669781457de0d600849a5de0e89909/collection-1.1.0.jar</AuxClasspathEntry>
42
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/cabcd1a0a7b5c54b0ec6d49828ba0ecc/cardview-1.0.0-api.jar</AuxClasspathEntry>
43
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/94486a50fb6342af595f510821233f45/lifecycle-runtime-2.1.0-api.jar</AuxClasspathEntry>
44
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/ebe64895a6d1cc9dd3c7358395ab0491/lifecycle-viewmodel-2.1.0-api.jar</AuxClasspathEntry>
45
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/07e59e7d68a214448e1fde097cea512f/jetified-savedstate-1.0.0-api.jar</AuxClasspathEntry>
46
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/22e18bccaf6281e78aed52ece611a147/lifecycle-livedata-2.0.0-api.jar</AuxClasspathEntry>
47
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/c1f8835cafadf8177e87e2018688fc6c/lifecycle-livedata-core-2.0.0-api.jar</AuxClasspathEntry>
48
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common/2.1.0/c67e7807d9cd6c329b9d0218b2ec4e505dd340b7/lifecycle-common-2.1.0.jar</AuxClasspathEntry>
49
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/1fe8b1e4c7213dafd2365c05c73e3350/core-runtime-2.0.0-api.jar</AuxClasspathEntry>
50
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-common/2.1.0/b3152fc64428c9354344bd89848ecddc09b6f07e/core-common-2.1.0.jar</AuxClasspathEntry>
51
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/439df125e5eda74c5b0f8a313a540c59/interpolator-1.0.0-api.jar</AuxClasspathEntry>
52
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/c68e7aa34aa4c98de5e3ab3926503de4/documentfile-1.0.0-api.jar</AuxClasspathEntry>
53
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/ada8a46d2b7afd778ad3731a9d128b0b/localbroadcastmanager-1.0.0-api.jar</AuxClasspathEntry>
54
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/0b76137a87d9f98bf509cec47c3129f4/print-1.0.0-api.jar</AuxClasspathEntry>
55
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation/1.1.0/e3a6fb2f40e3a3842e6b7472628ba4ce416ea4c8/annotation-1.1.0.jar</AuxClasspathEntry>
56
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/modules-2/files-2.1/androidx.constraintlayout/constraintlayout-solver/2.0.4/1f001d7db280a89a6c26b26a66eb064bb6d5efeb/constraintlayout-solver-2.0.4.jar</AuxClasspathEntry>
57
+ <AuxClasspathEntry>/Users/developer/.gradle/caches/transforms-2/files-2.1/ed4f5e49e34651c5c1122e260888ce62/jetified-annotation-experimental-1.0.0-api.jar</AuxClasspathEntry>
58
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/tools/Tools.java</SrcDir>
59
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/MainActivity.java</SrcDir>
60
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Message.java</SrcDir>
61
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Type.java</SrcDir>
62
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/model/User.java</SrcDir>
63
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/model/Conversation.java</SrcDir>
64
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/view/MainViewModel.java</SrcDir>
65
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/view/ConversationClickListener.java</SrcDir>
66
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/view/ConversationAdapter.java</SrcDir>
67
+ <SrcDir>/Users/developer/project/sample/app/src/main/java/com/github/sample/view/ConversationViewHolder.java</SrcDir>
68
+ <SrcDir>/Users/developer/project/sample/app/build/generated/source/buildConfig/release/com/github/sample/BuildConfig.java</SrcDir>
69
+ </Project>
70
+ <BugInstance type="NP_NULL_ON_SOME_PATH" priority="1" rank="6" abbrev="NP" category="CORRECTNESS" instanceHash="14f2ef91c09cb234637c3b3ebc9cbce9" instanceOccurrenceNum="0" instanceOccurrenceMax="0" cweid="476">
71
+ <ShortMessage>Possible null pointer dereference</ShortMessage>
72
+ <LongMessage>Possible null pointer dereference of MainActivity.conversationAdapter in com.github.sample.MainActivity.onCreate(Bundle)</LongMessage>
73
+ <Class classname="com.github.sample.MainActivity" primary="true">
74
+ <SourceLine classname="com.github.sample.MainActivity" start="13" end="39" sourcefile="MainActivity.java" sourcepath="com/github/sample/MainActivity.java">
75
+ <Message>At MainActivity.java:[lines 13-39]</Message>
76
+ </SourceLine>
77
+ <Message>In class com.github.sample.MainActivity</Message>
78
+ </Class>
79
+ <Method classname="com.github.sample.MainActivity" name="onCreate" signature="(Landroid/os/Bundle;)V" isStatic="false" primary="true">
80
+ <SourceLine classname="com.github.sample.MainActivity" start="22" end="39" startBytecode="0" endBytecode="193" sourcefile="MainActivity.java" sourcepath="com/github/sample/MainActivity.java"/>
81
+ <Message>In method com.github.sample.MainActivity.onCreate(Bundle)</Message>
82
+ </Method>
83
+ <Field classname="com.github.sample.MainActivity" name="conversationAdapter" signature="Lcom/github/sample/view/ConversationAdapter;" isStatic="false" primary="true" role="FIELD_CONTAINS_VALUE">
84
+ <SourceLine classname="com.github.sample.MainActivity" sourcefile="MainActivity.java" sourcepath="com/github/sample/MainActivity.java">
85
+ <Message>In MainActivity.java</Message>
86
+ </SourceLine>
87
+ <Message>Value contained in com.github.sample.MainActivity.conversationAdapter</Message>
88
+ </Field>
89
+ <SourceLine classname="com.github.sample.MainActivity" primary="true" start="29" end="29" startBytecode="42" endBytecode="42" sourcefile="MainActivity.java" sourcepath="com/github/sample/MainActivity.java" role="SOURCE_LINE_DEREF">
90
+ <Message>Dereferenced at MainActivity.java:[line 29]</Message>
91
+ </SourceLine>
92
+ <SourceLine classname="com.github.sample.MainActivity" start="29" end="29" startBytecode="34" endBytecode="34" sourcefile="MainActivity.java" sourcepath="com/github/sample/MainActivity.java" role="SOURCE_LINE_KNOWN_NULL">
93
+ <Message>Known null at MainActivity.java:[line 29]</Message>
94
+ </SourceLine>
95
+ </BugInstance>
96
+ <BugInstance type="NP_NULL_ON_SOME_PATH" priority="1" rank="6" abbrev="NP" category="CORRECTNESS" instanceHash="36d97a1af3badcca6f42173c474917a6" instanceOccurrenceNum="0" instanceOccurrenceMax="0" cweid="476">
97
+ <ShortMessage>Possible null pointer dereference</ShortMessage>
98
+ <LongMessage>Possible null pointer dereference of Tools$Helper.string in com.github.sample.tools.Tools$Helper.setText(TextView)</LongMessage>
99
+ <Class classname="com.github.sample.tools.Tools$Helper" primary="true">
100
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" start="23" end="33" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
101
+ <Message>At Tools.java:[lines 23-33]</Message>
102
+ </SourceLine>
103
+ <Message>In class com.github.sample.tools.Tools$Helper</Message>
104
+ </Class>
105
+ <Method classname="com.github.sample.tools.Tools$Helper" name="setText" signature="(Landroid/widget/TextView;)V" isStatic="false" primary="true">
106
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" start="31" end="33" startBytecode="0" endBytecode="86" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java"/>
107
+ <Message>In method com.github.sample.tools.Tools$Helper.setText(TextView)</Message>
108
+ </Method>
109
+ <Field classname="com.github.sample.tools.Tools$Helper" name="string" signature="Ljava/lang/String;" isStatic="false" primary="true" role="FIELD_CONTAINS_VALUE">
110
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
111
+ <Message>In Tools.java</Message>
112
+ </SourceLine>
113
+ <Message>Value contained in com.github.sample.tools.Tools$Helper.string</Message>
114
+ </Field>
115
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" primary="true" start="31" end="31" startBytecode="7" endBytecode="7" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java" role="SOURCE_LINE_DEREF">
116
+ <Message>Dereferenced at Tools.java:[line 31]</Message>
117
+ </SourceLine>
118
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" start="31" end="31" startBytecode="5" endBytecode="5" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java" role="SOURCE_LINE_KNOWN_NULL">
119
+ <Message>Known null at Tools.java:[line 31]</Message>
120
+ </SourceLine>
121
+ </BugInstance>
122
+ <BugInstance type="NP_UNWRITTEN_FIELD" priority="2" rank="8" abbrev="NP" category="CORRECTNESS" instanceHash="1651fb886d45369f319320730550021a" instanceOccurrenceNum="0" instanceOccurrenceMax="0" cweid="476">
123
+ <ShortMessage>Read of unwritten field</ShortMessage>
124
+ <LongMessage>Read of unwritten field title in com.github.sample.tools.Tools$Helper.setText(TextView)</LongMessage>
125
+ <Class classname="com.github.sample.tools.Tools$Helper" primary="true">
126
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" start="23" end="33" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
127
+ <Message>At Tools.java:[lines 23-33]</Message>
128
+ </SourceLine>
129
+ <Message>In class com.github.sample.tools.Tools$Helper</Message>
130
+ </Class>
131
+ <Method classname="com.github.sample.tools.Tools$Helper" name="setText" signature="(Landroid/widget/TextView;)V" isStatic="false" primary="true">
132
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" start="31" end="33" startBytecode="0" endBytecode="86" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java"/>
133
+ <Message>In method com.github.sample.tools.Tools$Helper.setText(TextView)</Message>
134
+ </Method>
135
+ <Field classname="com.github.sample.tools.Tools$Helper" name="title" signature="Ljava/lang/String;" isStatic="false" primary="true">
136
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
137
+ <Message>In Tools.java</Message>
138
+ </SourceLine>
139
+ <Message>Field com.github.sample.tools.Tools$Helper.title</Message>
140
+ </Field>
141
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" primary="true" start="32" end="32" startBytecode="20" endBytecode="20" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
142
+ <Message>At Tools.java:[line 32]</Message>
143
+ </SourceLine>
144
+ </BugInstance>
145
+ <BugInstance type="SIC_INNER_SHOULD_BE_STATIC" priority="2" rank="18" abbrev="SIC" category="PERFORMANCE" instanceHash="fea23dbc6037efb570062f6497bc3927" instanceOccurrenceNum="0" instanceOccurrenceMax="0">
146
+ <ShortMessage>Should be a static inner class</ShortMessage>
147
+ <LongMessage>Should com.github.sample.tools.Tools$Helper be a _static_ inner class?</LongMessage>
148
+ <Class classname="com.github.sample.tools.Tools$Helper" primary="true">
149
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" start="23" end="33" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
150
+ <Message>At Tools.java:[lines 23-33]</Message>
151
+ </SourceLine>
152
+ <Message>In class com.github.sample.tools.Tools$Helper</Message>
153
+ </Class>
154
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" start="23" end="33" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java" synthetic="true">
155
+ <Message>At Tools.java:[lines 23-33]</Message>
156
+ </SourceLine>
157
+ </BugInstance>
158
+ <BugInstance type="UWF_UNWRITTEN_FIELD" priority="2" rank="12" abbrev="UwF" category="CORRECTNESS" instanceHash="a84aadf6a9afc3505ee39b0abfe267c8" instanceOccurrenceNum="0" instanceOccurrenceMax="0">
159
+ <ShortMessage>Unwritten field</ShortMessage>
160
+ <LongMessage>Unwritten field: com.github.sample.tools.Tools$Helper.title</LongMessage>
161
+ <Class classname="com.github.sample.tools.Tools$Helper" primary="true">
162
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" start="23" end="33" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
163
+ <Message>At Tools.java:[lines 23-33]</Message>
164
+ </SourceLine>
165
+ <Message>In class com.github.sample.tools.Tools$Helper</Message>
166
+ </Class>
167
+ <Field classname="com.github.sample.tools.Tools$Helper" name="title" signature="Ljava/lang/String;" isStatic="false" primary="true">
168
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
169
+ <Message>In Tools.java</Message>
170
+ </SourceLine>
171
+ <Message>Field com.github.sample.tools.Tools$Helper.title</Message>
172
+ </Field>
173
+ <SourceLine classname="com.github.sample.tools.Tools$Helper" primary="true" start="32" end="32" startBytecode="15" endBytecode="15" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
174
+ <Message>At Tools.java:[line 32]</Message>
175
+ </SourceLine>
176
+ </BugInstance>
177
+ <BugInstance type="SIC_INNER_SHOULD_BE_STATIC" priority="2" rank="18" abbrev="SIC" category="PERFORMANCE" instanceHash="8073e2e346bb32034a6243cc6ed22a3c" instanceOccurrenceNum="0" instanceOccurrenceMax="0">
178
+ <ShortMessage>Should be a static inner class</ShortMessage>
179
+ <LongMessage>Should com.github.sample.tools.Tools$Other be a _static_ inner class?</LongMessage>
180
+ <Class classname="com.github.sample.tools.Tools$Other" primary="true">
181
+ <SourceLine classname="com.github.sample.tools.Tools$Other" start="15" end="20" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java">
182
+ <Message>At Tools.java:[lines 15-20]</Message>
183
+ </SourceLine>
184
+ <Message>In class com.github.sample.tools.Tools$Other</Message>
185
+ </Class>
186
+ <SourceLine classname="com.github.sample.tools.Tools$Other" start="15" end="20" sourcefile="Tools.java" sourcepath="com/github/sample/tools/Tools.java" synthetic="true">
187
+ <Message>At Tools.java:[lines 15-20]</Message>
188
+ </SourceLine>
189
+ </BugInstance>
190
+ <BugInstance type="INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE" priority="1" rank="5" abbrev="INT" category="CORRECTNESS" instanceHash="277eb5f4e73621ee0491d1161fccc096" instanceOccurrenceNum="0" instanceOccurrenceMax="0">
191
+ <ShortMessage>Bad comparison of nonnegative value with negative constant or zero</ShortMessage>
192
+ <LongMessage>Bad comparison of nonnegative value with -1 in com.github.sample.view.ConversationAdapter.setConversations(ArrayList)</LongMessage>
193
+ <Class classname="com.github.sample.view.ConversationAdapter" primary="true">
194
+ <SourceLine classname="com.github.sample.view.ConversationAdapter" start="9" end="37" sourcefile="ConversationAdapter.java" sourcepath="com/github/sample/view/ConversationAdapter.java">
195
+ <Message>At ConversationAdapter.java:[lines 9-37]</Message>
196
+ </SourceLine>
197
+ <Message>In class com.github.sample.view.ConversationAdapter</Message>
198
+ </Class>
199
+ <Method classname="com.github.sample.view.ConversationAdapter" name="setConversations" signature="(Ljava/util/ArrayList;)V" isStatic="false" primary="true">
200
+ <SourceLine classname="com.github.sample.view.ConversationAdapter" start="32" end="37" startBytecode="0" endBytecode="109" sourcefile="ConversationAdapter.java" sourcepath="com/github/sample/view/ConversationAdapter.java"/>
201
+ <Message>In method com.github.sample.view.ConversationAdapter.setConversations(ArrayList)</Message>
202
+ </Method>
203
+ <Int value="-1" role="INT_VALUE">
204
+ <Message>Value -1</Message>
205
+ </Int>
206
+ <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"/>
208
+ <Message>Return value of java.util.ArrayList.size() of type int</Message>
209
+ </Method>
210
+ <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
+ <Message>At ConversationAdapter.java:[line 32]</Message>
212
+ </SourceLine>
213
+ </BugInstance>
214
+ <BugCategory category="CORRECTNESS">
215
+ <Description>Correctness</Description>
216
+ </BugCategory>
217
+ <BugCategory category="PERFORMANCE">
218
+ <Description>Performance</Description>
219
+ </BugCategory>
220
+ <BugPattern type="NP_NULL_ON_SOME_PATH" abbrev="NP" category="CORRECTNESS">
221
+ <ShortDescription>Possible null pointer dereference</ShortDescription>
222
+ <Details><![CDATA[
223
+
224
+ <p> There is a branch of statement that, <em>if executed,</em> guarantees that
225
+ a null value will be dereferenced, which
226
+ would generate a <code>NullPointerException</code> when the code is executed.
227
+ Of course, the problem might be that the branch or statement is infeasible and that
228
+ the null pointer exception can't ever be executed; deciding that is beyond the ability of SpotBugs.
229
+ </p>
230
+
231
+ ]]></Details>
232
+ </BugPattern>
233
+ <BugPattern type="UWF_UNWRITTEN_FIELD" abbrev="UwF" category="CORRECTNESS">
234
+ <ShortDescription>Unwritten field</ShortDescription>
235
+ <Details><![CDATA[
236
+
237
+ <p> This field is never written.&nbsp; All reads of it will return the default
238
+ value. Check for errors (should it have been initialized?), or remove it if it is useless.</p>
239
+
240
+ ]]></Details>
241
+ </BugPattern>
242
+ <BugPattern type="NP_UNWRITTEN_FIELD" abbrev="NP" category="CORRECTNESS">
243
+ <ShortDescription>Read of unwritten field</ShortDescription>
244
+ <Details><![CDATA[
245
+
246
+ <p> The program is dereferencing a field that does not seem to ever have a non-null value written to it.
247
+ Unless the field is initialized via some mechanism not seen by the analysis,
248
+ dereferencing this value will generate a null pointer exception.
249
+ </p>
250
+
251
+ ]]></Details>
252
+ </BugPattern>
253
+ <BugPattern type="SIC_INNER_SHOULD_BE_STATIC" abbrev="SIC" category="PERFORMANCE">
254
+ <ShortDescription>Should be a static inner class</ShortDescription>
255
+ <Details><![CDATA[
256
+
257
+ <p> This class is an inner class, but does not use its embedded reference
258
+ to the object which created it.&nbsp; This reference makes the instances
259
+ of the class larger, and may keep the reference to the creator object
260
+ alive longer than necessary.&nbsp; If possible, the class should be
261
+ made static.
262
+ </p>
263
+
264
+ ]]></Details>
265
+ </BugPattern>
266
+ <BugPattern type="INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE" abbrev="INT" category="CORRECTNESS">
267
+ <ShortDescription>Bad comparison of nonnegative value with negative constant or zero</ShortDescription>
268
+ <Details><![CDATA[
269
+
270
+ <p> This code compares a value that is guaranteed to be non-negative with a negative constant or zero.
271
+ </p>
272
+
273
+ ]]></Details>
274
+ </BugPattern>
275
+ <BugCode abbrev="NP" cweid="476">
276
+ <Description>Null pointer dereference</Description>
277
+ </BugCode>
278
+ <BugCode abbrev="UwF">
279
+ <Description>Unwritten field</Description>
280
+ </BugCode>
281
+ <BugCode abbrev="SIC">
282
+ <Description>Inner class could be made static</Description>
283
+ </BugCode>
284
+ <BugCode abbrev="INT">
285
+ <Description>Suspicious integer expression</Description>
286
+ </BugCode>
287
+ <Errors errors="0" missingClasses="4">
288
+ <MissingClass>android.app.Activity</MissingClass>
289
+ <MissingClass>android.util.Log</MissingClass>
290
+ <MissingClass>android.view.View</MissingClass>
291
+ <MissingClass>android.widget.TextView</MissingClass>
292
+ </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"/>
295
+ <FileStats path="com/github/sample/MainActivity.java" bugCount="1" size="23" bugHash="3d4de8c5d2e5bc77cb5db28779c6c525"/>
296
+ <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"/>
298
+ <FileStats path="com/github/sample/model/Type.java" bugCount="0" size="11"/>
299
+ <FileStats path="com/github/sample/model/User.java" bugCount="0" size="16"/>
300
+ <FileStats path="com/github/sample/tools/Tools.java" bugCount="5" size="25" bugHash="f4054acc9c26c5455b8a4dbd032c7b07"/>
301
+ <FileStats path="com/github/sample/view/ConversationAdapter.java" bugCount="1" size="19" bugHash="7f51758a280a8478b184c14ebff307d8"/>
302
+ <FileStats path="com/github/sample/view/ConversationClickListener.java" bugCount="0" size="2"/>
303
+ <FileStats path="com/github/sample/view/ConversationViewHolder.java" bugCount="0" size="15"/>
304
+ <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"/>
307
+ <ClassStats class="com.github.sample.MainActivity" sourceFile="MainActivity.java" interface="false" size="16" bugs="1" priority_1="1"/>
308
+ <ClassStats class="com.github.sample.MainActivity$1" sourceFile="MainActivity.java" interface="false" size="7" bugs="0"/>
309
+ </PackageStats>
310
+ <PackageStats package="com.github.sample.model" total_bugs="0" total_types="4" total_size="63">
311
+ <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"/>
313
+ <ClassStats class="com.github.sample.model.Type" sourceFile="Type.java" interface="false" size="11" bugs="0"/>
314
+ <ClassStats class="com.github.sample.model.User" sourceFile="User.java" interface="false" size="16" bugs="0"/>
315
+ </PackageStats>
316
+ <PackageStats package="com.github.sample.tools" total_bugs="5" total_types="3" total_size="25" priority_2="4" priority_1="1">
317
+ <ClassStats class="com.github.sample.tools.Tools" sourceFile="Tools.java" interface="false" size="7" bugs="0"/>
318
+ <ClassStats class="com.github.sample.tools.Tools$Helper" sourceFile="Tools.java" interface="false" size="10" bugs="4" priority_2="3" priority_1="1"/>
319
+ <ClassStats class="com.github.sample.tools.Tools$Other" sourceFile="Tools.java" interface="false" size="8" bugs="1" priority_2="1"/>
320
+ </PackageStats>
321
+ <PackageStats package="com.github.sample.view" total_bugs="1" total_types="4" total_size="51" priority_1="1">
322
+ <ClassStats class="com.github.sample.view.ConversationAdapter" sourceFile="ConversationAdapter.java" interface="false" size="19" bugs="1" priority_1="1"/>
323
+ <ClassStats class="com.github.sample.view.ConversationClickListener" sourceFile="ConversationClickListener.java" interface="true" size="2" bugs="0"/>
324
+ <ClassStats class="com.github.sample.view.ConversationViewHolder" sourceFile="ConversationViewHolder.java" interface="false" size="15" bugs="0"/>
325
+ <ClassStats class="com.github.sample.view.MainViewModel" sourceFile="MainViewModel.java" interface="false" size="15" bugs="0"/>
326
+ </PackageStats>
327
+ <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"/>
342
+ </FindBugsProfile>
343
+ </FindBugsSummary>
344
+ <ClassFeatures></ClassFeatures>
345
+ <History></History>
346
+ </BugCollection>