Skip to content

Commit 1897b27

Browse files
authored
SONARPY-232 Remove dependency on guava (except for tests) (SonarSource#120)
* SONARPY-232 Remove dependency on guava (except for tests) * Small adjustment * Fix exception when reading resource inside JAR
1 parent 3c84b58 commit 1897b27

71 files changed

Lines changed: 280 additions & 272 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pom.xml

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,6 @@
159159
<artifactId>logback-classic</artifactId>
160160
<version>${logback.version}</version>
161161
</dependency>
162-
<dependency>
163-
<groupId>com.google.guava</groupId>
164-
<artifactId>guava</artifactId>
165-
<version>22.0</version>
166-
</dependency>
167162

168163
<!-- test dependencies -->
169164
<dependency>
@@ -190,12 +185,6 @@
190185
<version>${mockito.version}</version>
191186
<scope>test</scope>
192187
</dependency>
193-
<dependency>
194-
<groupId>org.apache.maven</groupId>
195-
<artifactId>maven-project</artifactId>
196-
<version>${maven.project.version}</version>
197-
<scope>test</scope>
198-
</dependency>
199188
<dependency>
200189
<groupId>org.assertj</groupId>
201190
<artifactId>assertj-core</artifactId>
@@ -208,6 +197,13 @@
208197
<version>${sonarlint-core.version}</version>
209198
<scope>test</scope>
210199
</dependency>
200+
<dependency>
201+
<groupId>com.google.guava</groupId>
202+
<artifactId>guava</artifactId>
203+
<version>22.0</version>
204+
<scope>test</scope>
205+
</dependency>
206+
211207

212208
<!-- provided dependencies -->
213209
<dependency>

python-checks/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
<groupId>commons-io</groupId>
2727
<artifactId>commons-io</artifactId>
2828
</dependency>
29+
30+
<!-- test dependencies -->
2931
<dependency>
3032
<groupId>junit</groupId>
3133
<artifactId>junit</artifactId>
@@ -39,6 +41,10 @@
3941
<artifactId>logback-classic</artifactId>
4042
<scope>test</scope>
4143
</dependency>
44+
<dependency>
45+
<groupId>com.google.guava</groupId>
46+
<artifactId>guava</artifactId>
47+
</dependency>
4248
</dependencies>
4349

4450
</project>

python-checks/src/main/java/org/sonar/python/PythonBuiltinFunctions.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,37 +19,36 @@
1919
*/
2020
package org.sonar.python;
2121

22-
import com.google.common.annotations.VisibleForTesting;
23-
import com.google.common.io.Resources;
22+
import java.io.BufferedReader;
2423
import java.io.IOException;
25-
import java.net.URL;
24+
import java.io.InputStream;
25+
import java.io.InputStreamReader;
26+
import java.io.UncheckedIOException;
2627
import java.nio.charset.StandardCharsets;
27-
import java.util.List;
2828
import java.util.Set;
2929
import java.util.stream.Collectors;
3030

3131
public enum PythonBuiltinFunctions {
3232

3333
INSTANCE;
3434

35-
private static final Set<String> BUILTINS = loadBuiltinNames(PythonBuiltinFunctions.class.getResource("builtins.txt"));
35+
private static final Set<String> BUILTINS = loadBuiltinNames(PythonBuiltinFunctions.class.getResourceAsStream("builtins.txt"));
3636

3737
public static boolean contains(String name) {
3838
return BUILTINS.contains(name);
3939
}
4040

41-
@VisibleForTesting
42-
static Set<String> loadBuiltinNames(URL resourceUrl) {
43-
try {
44-
List<String> lines = Resources.readLines(resourceUrl, StandardCharsets.UTF_8);
45-
return lines.stream()
41+
static Set<String> loadBuiltinNames(InputStream resourceStream) {
42+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream, StandardCharsets.UTF_8))) {
43+
return reader.lines()
4644
.map(String::trim)
4745
.filter(s -> !s.startsWith("#"))
4846
.filter(s -> !s.isEmpty())
4947
.collect(Collectors.toSet());
50-
} catch (IOException e) {
51-
throw new IllegalStateException("Cannot load " + resourceUrl, e);
48+
} catch (IOException | UncheckedIOException e) {
49+
throw new IllegalStateException("Cannot read input stream", e);
5250
}
51+
5352
}
5453

5554
}

python-checks/src/main/java/org/sonar/python/PythonCheck.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919
*/
2020
package org.sonar.python;
2121

22-
import com.google.common.collect.ImmutableList;
2322
import com.sonar.sslr.api.AstNode;
2423
import com.sonar.sslr.api.Token;
2524
import java.util.ArrayList;
25+
import java.util.Arrays;
26+
import java.util.Collections;
27+
import java.util.HashSet;
2628
import java.util.List;
29+
import java.util.Set;
2730
import javax.annotation.Nullable;
2831

2932
public abstract class PythonCheck extends PythonVisitor {
@@ -33,7 +36,7 @@ public abstract class PythonCheck extends PythonVisitor {
3336
public List<PreciseIssue> scanFileForIssues(PythonVisitorContext context) {
3437
issues.clear();
3538
scanFile(context);
36-
return ImmutableList.copyOf(issues);
39+
return Collections.unmodifiableList(new ArrayList<>(issues));
3740
}
3841

3942
protected final PreciseIssue addIssue(AstNode node, String message) {
@@ -103,4 +106,8 @@ public List<IssueLocation> secondaryLocations() {
103106
return secondaryLocations;
104107
}
105108
}
109+
110+
public static <T> Set<T> immutableSet(T... el) {
111+
return Collections.unmodifiableSet(new HashSet<>(Arrays.asList(el)));
112+
}
106113
}

python-checks/src/main/java/org/sonar/python/checks/AbstractFunctionNameCheck.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
*/
2020
package org.sonar.python.checks;
2121

22-
import com.google.common.collect.ImmutableSet;
2322
import com.sonar.sslr.api.AstNode;
2423
import com.sonar.sslr.api.AstNodeType;
24+
import java.util.Collections;
2525
import java.util.Set;
2626
import org.sonar.check.RuleProperty;
2727
import org.sonar.python.api.PythonGrammar;
@@ -43,7 +43,7 @@ protected String format() {
4343

4444
@Override
4545
public Set<AstNodeType> subscribedKinds() {
46-
return ImmutableSet.of(PythonGrammar.FUNCDEF);
46+
return Collections.singleton(PythonGrammar.FUNCDEF);
4747
}
4848

4949
@Override

python-checks/src/main/java/org/sonar/python/checks/AfterJumpStatementCheck.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package org.sonar.python.checks;
2121

22-
import com.google.common.collect.ImmutableSet;
2322
import com.sonar.sslr.api.AstNode;
2423
import com.sonar.sslr.api.AstNodeType;
2524
import java.util.Set;
@@ -36,7 +35,7 @@ public class AfterJumpStatementCheck extends PythonCheck {
3635

3736
@Override
3837
public Set<AstNodeType> subscribedKinds() {
39-
return ImmutableSet.of(
38+
return immutableSet(
4039
PythonGrammar.RETURN_STMT,
4140
PythonGrammar.RAISE_STMT,
4241
PythonGrammar.BREAK_STMT,

python-checks/src/main/java/org/sonar/python/checks/BackslashInStringCheck.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
*/
2020
package org.sonar.python.checks;
2121

22-
import com.google.common.collect.ImmutableSet;
2322
import com.sonar.sslr.api.AstNode;
2423
import com.sonar.sslr.api.AstNodeType;
24+
import java.util.Collections;
2525
import java.util.Set;
2626
import org.sonar.check.Rule;
2727
import org.sonar.python.PythonCheck;
@@ -35,7 +35,7 @@ public class BackslashInStringCheck extends PythonCheck {
3535

3636
@Override
3737
public Set<AstNodeType> subscribedKinds() {
38-
return ImmutableSet.of(PythonTokenType.STRING);
38+
return Collections.singleton(PythonTokenType.STRING);
3939
}
4040

4141
@Override

python-checks/src/main/java/org/sonar/python/checks/BackticksUsageCheck.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
*/
2020
package org.sonar.python.checks;
2121

22-
import com.google.common.collect.ImmutableSet;
2322
import com.sonar.sslr.api.AstNode;
2423
import com.sonar.sslr.api.AstNodeType;
24+
import java.util.Collections;
2525
import java.util.Set;
2626
import org.sonar.check.Rule;
2727
import org.sonar.python.PythonCheck;
@@ -34,7 +34,7 @@ public class BackticksUsageCheck extends PythonCheck {
3434

3535
@Override
3636
public Set<AstNodeType> subscribedKinds() {
37-
return ImmutableSet.of(PythonGrammar.ATOM);
37+
return Collections.singleton(PythonGrammar.ATOM);
3838
}
3939

4040
@Override

python-checks/src/main/java/org/sonar/python/checks/BreakContinueOutsideLoopCheck.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package org.sonar.python.checks;
2121

22-
import com.google.common.collect.ImmutableSet;
2322
import com.sonar.sslr.api.AstNode;
2423
import com.sonar.sslr.api.AstNodeType;
2524
import java.util.Set;
@@ -35,7 +34,7 @@ public class BreakContinueOutsideLoopCheck extends PythonCheck {
3534

3635
@Override
3736
public Set<AstNodeType> subscribedKinds() {
38-
return ImmutableSet.of(PythonGrammar.BREAK_STMT, PythonGrammar.CONTINUE_STMT);
37+
return immutableSet(PythonGrammar.BREAK_STMT, PythonGrammar.CONTINUE_STMT);
3938
}
4039

4140
@Override

python-checks/src/main/java/org/sonar/python/checks/CheckList.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
*/
2020
package org.sonar.python.checks;
2121

22-
import com.google.common.collect.ImmutableList;
22+
import org.sonar.python.PythonCheck;
2323

2424
public final class CheckList {
2525

@@ -31,7 +31,7 @@ private CheckList() {
3131
}
3232

3333
public static Iterable<Class> getChecks() {
34-
return ImmutableList.<Class>of(
34+
return PythonCheck.immutableSet(
3535
CognitiveComplexityFunctionCheck.class,
3636
ParsingErrorCheck.class,
3737
CommentRegularExpressionCheck.class,

0 commit comments

Comments
 (0)