Skip to content

Commit 90608d2

Browse files
committed
implement filtered map to replace guava Maps
1 parent 37f38cc commit 90608d2

4 files changed

Lines changed: 106 additions & 45 deletions

File tree

build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ repositories {
2626

2727
dependencies {
2828
compile 'com.fasterxml.jackson.core:jackson-databind:2.9.1'
29-
compile 'com.google.guava:guava:23.1-android'
3029
compile 'org.slf4j:slf4j-api:1.7.25'
3130
compileOnly 'javax.servlet:javax.servlet-api:3.1.0'
3231

src/main/java/com/bugsnag/Report.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.bugsnag;
22

33
import com.bugsnag.serialization.Expose;
4-
import com.bugsnag.util.FilterTransformer;
54

6-
import com.google.common.collect.Maps;
5+
import com.bugsnag.util.FilteredMap;
76

87
import java.util.ArrayList;
8+
import java.util.Arrays;
99
import java.util.List;
1010
import java.util.Map;
1111

@@ -110,8 +110,7 @@ public Map getUser() {
110110

111111
@Expose
112112
public Map getMetaData() {
113-
Map<String, Object> metaDataMap = diagnostics.metaData;
114-
return Maps.transformEntries(metaDataMap, new FilterTransformer(config.filters));
113+
return new FilteredMap(diagnostics.metaData, Arrays.asList(config.filters));
115114
}
116115

117116
/**

src/main/java/com/bugsnag/util/FilterTransformer.java

Lines changed: 0 additions & 40 deletions
This file was deleted.
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package com.bugsnag.util;
2+
3+
4+
import java.util.*;
5+
6+
/**
7+
* Decorates a map, and alters the return value of {@link #get(Object)} if the key matches a filter.
8+
*/
9+
public class FilteredMap implements Map<String, Object> {
10+
11+
private static final String FILTERED_PLACEHOLDER = "[FILTERED]";
12+
13+
private final Map<String, Object> map;
14+
private final Collection<String> keyFilters = new ArrayList<String>();
15+
16+
public FilteredMap(Map<String, Object> map, Collection<String> keyFilters) {
17+
this.map = map;
18+
this.keyFilters.addAll(keyFilters);
19+
}
20+
21+
@Override
22+
public int size() {
23+
return map.size();
24+
}
25+
26+
@Override
27+
public boolean isEmpty() {
28+
return map.isEmpty();
29+
}
30+
31+
@Override
32+
public boolean containsKey(Object key) {
33+
return map.containsKey(key);
34+
}
35+
36+
@Override
37+
public boolean containsValue(Object value) {
38+
return values().contains(value);
39+
}
40+
41+
@Override
42+
public Object get(Object key) {
43+
Object o = map.get(key);
44+
return o != null ? transformEntry(key, o) : null;
45+
}
46+
47+
@Override
48+
public Object put(String key, Object value) {
49+
return map.put(key, value);
50+
}
51+
52+
@Override
53+
public Object remove(Object key) {
54+
return map.remove(key);
55+
}
56+
57+
@Override
58+
public void putAll(Map<? extends String, ?> m) {
59+
map.putAll(m);
60+
}
61+
62+
@Override
63+
public void clear() {
64+
map.clear();
65+
}
66+
67+
@Override
68+
public Set<String> keySet() {
69+
return map.keySet();
70+
}
71+
72+
@Override
73+
public Collection<Object> values() {
74+
return map.values();
75+
}
76+
77+
@Override
78+
public Set<Entry<String, Object>> entrySet() {
79+
return map.entrySet();
80+
}
81+
82+
private Object transformEntry(Object key, Object value) {
83+
if (value instanceof Map) {
84+
//noinspection unchecked
85+
return new FilteredMap((Map<String, Object>) value, keyFilters);
86+
}
87+
return shouldFilterKey((String) key) ? FILTERED_PLACEHOLDER : value;
88+
}
89+
90+
private boolean shouldFilterKey(String key) {
91+
if (keyFilters == null || key == null) {
92+
return false;
93+
}
94+
95+
for (String filter : keyFilters) {
96+
if (key.contains(filter)) {
97+
return true;
98+
}
99+
}
100+
return false;
101+
}
102+
103+
}

0 commit comments

Comments
 (0)