Skip to content

Commit 1199ee6

Browse files
committed
Switch to Spotbugs
1 parent 837a1de commit 1199ee6

6 files changed

Lines changed: 47 additions & 21 deletions

File tree

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ buildscript {
77

88
dependencies {
99
classpath "net.ltgt.gradle:gradle-errorprone-javacplugin-plugin:$errorpronePluginVersion"
10+
classpath "gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:$spotbugsPluginVersion"
1011

1112
classpath "gradle.plugin.de.fuerstenau:BuildConfigPlugin:$buildConfigPluginVersion"
1213
classpath "com.github.ben-manes:gradle-versions-plugin:$gradleVersionsPluginVersion"
@@ -25,5 +26,5 @@ allprojects {
2526
}
2627

2728
wrapper {
28-
gradleVersion = project.ext.gradleVersion
29+
setGradleVersion(project.ext.gradleVersion)
2930
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<Or>
2121
<Package name="~me\.proxer\.library\.entity.*"/>
2222
<Class name="me.proxer.library.api.ProxerResponse"/>
23+
<Class name="~.*TestClass"/>
2324
</Or>
2425
<Or>
2526
<Method name="equals" returns="boolean" params="java.lang.Object"/>
@@ -34,4 +35,4 @@
3435
<Bug pattern="NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION"/>
3536
</Match>
3637

37-
</FindBugsFilter>
38+
</FindBugsFilter>

gradle/versions.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ ext {
88
gradleVersionsPluginVersion = '0.20.0'
99
buildConfigPluginVersion = '1.1.8'
1010
freefairPluginsVersion = '2.4.2'
11+
spotbugsPluginVersion = '1.6.2'
1112

1213
jacocoVersion = '0.8.1'
1314
checkstyleVersion = '8.10'
1415
errorproneVersion = '2.3.1'
15-
findbugsVersion = '3.0.1'
16+
spotbugsVersion = '3.1.6'
1617
pmdVersion = '6.3.0'
1718

1819
lombokVersion = '1.18.2'

library/build.gradle

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import com.github.spotbugs.SpotBugsTask
12
import groovy.io.FileType
23
import groovy.text.SimpleTemplateEngine
34
import net.ltgt.gradle.errorprone.javacplugin.CheckSeverity
@@ -9,8 +10,8 @@ apply plugin: 'java-library'
910
apply plugin: 'maven-publish'
1011

1112
apply plugin: 'net.ltgt.errorprone-javacplugin'
13+
apply plugin: 'com.github.spotbugs'
1214
apply plugin: 'checkstyle'
13-
apply plugin: 'findbugs'
1415
apply plugin: 'jacoco'
1516
apply plugin: 'pmd'
1617

@@ -153,11 +154,17 @@ checkstyle {
153154
setToolVersion(checkstyleVersion)
154155
}
155156

156-
findbugs {
157-
excludeFilter = rootProject.file('config/findbugs/findbugs-filter.xml')
158-
sourceSets = [sourceSets.main]
157+
spotbugs {
158+
setToolVersion(spotbugsVersion)
159159

160-
setToolVersion(findbugsVersion)
160+
excludeFilter = rootProject.file('config/spotbugs/spotbugs-filter.xml')
161+
}
162+
163+
tasks.withType(SpotBugsTask) {
164+
reports {
165+
xml.enabled = false
166+
html.enabled = true
167+
}
161168
}
162169

163170
pmd {

library/src/test/java/me/proxer/library/api/EnumRetrofitConverterFactoryTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.junit.Before;
66
import org.junit.Test;
77
import retrofit2.Converter;
8+
import retrofit2.Retrofit;
89

910
import java.io.IOException;
1011
import java.lang.annotation.Annotation;
@@ -17,26 +18,28 @@
1718
public class EnumRetrofitConverterFactoryTest {
1819

1920
private EnumRetrofitConverterFactory factory;
21+
private Retrofit retrofit;
2022

2123
@Before
2224
public void setUp() {
2325
factory = new EnumRetrofitConverterFactory();
26+
retrofit = new Retrofit.Builder().baseUrl("https://proxer.me").build();
2427
}
2528

2629
@Test
2730
public void testCreate() {
28-
assertThat(factory.stringConverter(Genre.class, new Annotation[0], null)).isNotNull();
31+
assertThat(factory.stringConverter(Genre.class, new Annotation[0], retrofit)).isNotNull();
2932
}
3033

3134
@Test
3235
public void testCreateNoEnum() {
33-
assertThat(factory.stringConverter(Entry.class, new Annotation[0], null)).isNull();
36+
assertThat(factory.stringConverter(Entry.class, new Annotation[0], retrofit)).isNull();
3437
}
3538

3639
@SuppressWarnings({"unchecked", "ConstantConditions"})
3740
@Test
3841
public void testConvert() throws IOException {
39-
assertThat(((Converter<Enum<?>, String>) factory.stringConverter(Genre.class, new Annotation[0], null))
42+
assertThat(((Converter<Enum<?>, String>) factory.stringConverter(Genre.class, new Annotation[0], retrofit))
4043
.convert(Genre.ADVENTURE)).isEqualTo("Abenteuer");
4144
}
4245
}

library/src/test/java/me/proxer/library/api/LoggingInterceptorTest.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import me.proxer.library.api.ProxerApi.Builder.LoggingStrategy;
66
import okhttp3.Request;
77
import okhttp3.mockwebserver.MockResponse;
8+
import org.graalvm.compiler.core.common.SuppressFBWarnings;
89
import org.junit.After;
910
import org.junit.Before;
1011
import org.junit.Test;
@@ -28,22 +29,28 @@ public class LoggingInterceptorTest extends ProxerTest {
2829

2930
private ByteArrayOutputStream loggerStream;
3031
private Handler loggerHandler;
32+
private Logger logger;
3133

34+
@SuppressFBWarnings(
35+
value = "LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE",
36+
justification = "False positive? Logger has a hard reference."
37+
)
3238
@Override
3339
@Before
3440
public void setUp() throws IOException, GeneralSecurityException {
3541
super.setUp();
3642

3743
loggerStream = new ByteArrayOutputStream();
3844
loggerHandler = new StreamHandler(loggerStream, new EchoFormatter());
45+
logger = Logger.getLogger("ProxerLibJava");
3946

40-
Logger.getLogger("ProxerLibJava").addHandler(loggerHandler);
47+
logger.addHandler(loggerHandler);
4148
}
4249

4350
@Override
4451
@After
4552
public void tearDown() throws IOException {
46-
Logger.getLogger("ProxerLibJava").removeHandler(loggerHandler);
53+
logger.removeHandler(loggerHandler);
4754

4855
super.tearDown();
4956
}
@@ -59,8 +66,9 @@ public void testLog() throws IOException, ProxerException {
5966
.execute();
6067

6168
loggerHandler.flush();
69+
loggerStream.flush();
6270

63-
assertThat(loggerStream.toString()).isEqualTo("Requesting https://"
71+
assertThat(loggerStream.toString("UTF-8")).isEqualTo("Requesting https://"
6472
+ server.getHostName() + ":" + server.getPort()
6573
+ "/api/v1/notifications/news with method GET and these headers:\n"
6674
+ "proxer-api-key: mockKey\n"
@@ -78,8 +86,9 @@ public void testLogWithBody() throws IOException, ProxerException {
7886
.execute();
7987

8088
loggerHandler.flush();
89+
loggerStream.flush();
8190

82-
assertThat(loggerStream.toString()).isEqualTo("Requesting https://"
91+
assertThat(loggerStream.toString("UTF-8")).isEqualTo("Requesting https://"
8392
+ server.getHostName() + ":" + server.getPort()
8493
+ "/api/v1/user/login with method POST, these headers:\n"
8594
+ "proxer-api-key: mockKey\n"
@@ -98,8 +107,9 @@ public void testLogWithEmptyBody() throws IOException, ProxerException {
98107
.execute();
99108

100109
loggerHandler.flush();
110+
loggerStream.flush();
101111

102-
assertThat(loggerStream.toString()).isEqualTo("Requesting https://"
112+
assertThat(loggerStream.toString("UTF-8")).isEqualTo("Requesting https://"
103113
+ server.getHostName() + ":" + server.getPort()
104114
+ "/api/v1/user/logout with method POST, these headers:\n"
105115
+ "proxer-api-key: mockKey\n"
@@ -117,8 +127,9 @@ public void testLogAllOtherHost() throws IOException {
117127
api.client().newCall(new Request.Builder().url("http://example.com/test").build()).execute();
118128

119129
loggerHandler.flush();
130+
loggerStream.flush();
120131

121-
assertThat(loggerStream.toString()).isEqualTo("Requesting http://"
132+
assertThat(loggerStream.toString("UTF-8")).isEqualTo("Requesting http://"
122133
+ server.getHostName() + ":" + server.getPort()
123134
+ "/test with method GET and no headers.");
124135
}
@@ -134,8 +145,9 @@ public void testLogApiOnly() throws IOException {
134145
api.client().newCall(new Request.Builder().url("http://example.com/test").build()).execute();
135146

136147
loggerHandler.flush();
148+
loggerStream.flush();
137149

138-
assertThat(loggerStream.toString()).isEmpty();
150+
assertThat(loggerStream.toString("UTF-8")).isEmpty();
139151
}
140152

141153
@Test
@@ -149,8 +161,9 @@ public void testLogNone() throws IOException {
149161
api.client().newCall(new Request.Builder().url("http://example.com/test").build()).execute();
150162

151163
loggerHandler.flush();
164+
loggerStream.flush();
152165

153-
assertThat(loggerStream.toString()).isEmpty();
166+
assertThat(loggerStream.toString("UTF-8")).isEmpty();
154167
}
155168

156169
@Test
@@ -160,15 +173,15 @@ public void testLogWithCustomLogger() throws IOException, InterruptedException {
160173
+ server.getHostName() + ":" + server.getPort()
161174
+ "/test with method GET and no headers.";
162175

163-
final CustomLogger logger = message -> {
176+
final CustomLogger customLogger = message -> {
164177
if (message.equals(expectedMessage)) {
165178
lock.countDown();
166179
}
167180

168181
// Failed: Not the message we want. The lock will never be counted down and timeout.
169182
};
170183

171-
api = constructApi().customLogger(logger).loggingStrategy(LoggingStrategy.ALL).build();
184+
api = constructApi().customLogger(customLogger).loggingStrategy(LoggingStrategy.ALL).build();
172185

173186
server.enqueue(new MockResponse());
174187

0 commit comments

Comments
 (0)