1- package com .bugsnag . util ;
1+ package com .bugsnag ;
22
3- import java .util .ArrayList ;
43import java .util .Collection ;
54import java .util .HashMap ;
5+ import java .util .HashSet ;
66import java .util .Map ;
77import java .util .Set ;
88
99/**
10- * Decorates a map by replacing values of filtered keys.
10+ * Decorates a map by replacing values of redacted keys.
1111 */
12- public class FilteredMap implements Map <String , Object > {
12+ class RedactedMap implements Map <String , Object > {
1313
14- private static final String FILTERED_PLACEHOLDER = "[FILTERED ]" ;
14+ private static final String REDACTED_PLACEHOLDER = "[REDACTED ]" ;
1515
16- private final Map <String , Object > filteredCopy ;
17- private final Collection <String > keyFilters = new ArrayList < String >();
16+ private final Map <String , Object > redactedCopy ;
17+ private final Collection <String > redactedKeys = new HashSet < >();
1818
19- public FilteredMap (Map <String , Object > map , Collection <String > keyFilters ) {
20- this .keyFilters .addAll (keyFilters );
21- this .filteredCopy = createCopy (map );
19+ RedactedMap (Map <String , Object > map , Collection <String > redactedKeys ) {
20+ this .redactedKeys .addAll (redactedKeys );
21+ this .redactedCopy = createCopy (map );
2222 }
2323
2424 private Map <String , Object > createCopy (Map <? extends String , ?> map ) {
@@ -36,84 +36,87 @@ private Map<String, Object> createCopy(Map<? extends String, ?> map) {
3636
3737 @ Override
3838 public int size () {
39- return filteredCopy .size ();
39+ return redactedCopy .size ();
4040 }
4141
4242 @ Override
4343 public boolean isEmpty () {
44- return filteredCopy .isEmpty ();
44+ return redactedCopy .isEmpty ();
4545 }
4646
4747 @ Override
4848 public boolean containsKey (Object key ) {
49- return filteredCopy .containsKey (key );
49+ return redactedCopy .containsKey (key );
5050 }
5151
5252 @ Override
5353 public boolean containsValue (Object value ) {
54- return filteredCopy .containsValue (value );
54+ return redactedCopy .containsValue (value );
5555 }
5656
5757 @ Override
5858 public Object get (Object key ) {
59- return filteredCopy .get (key );
59+ return redactedCopy .get (key );
6060 }
6161
6262 @ Override
6363 public Object put (String key , Object value ) {
6464 if (value == null ) {
65- return filteredCopy .put (key , null );
65+ return redactedCopy .put (key , null );
6666 }
6767 Object transformedValue = transformEntry (key , value );
68- return filteredCopy .put (key , transformedValue );
68+ return redactedCopy .put (key , transformedValue );
6969 }
7070
7171 @ Override
7272 public Object remove (Object key ) {
73- return filteredCopy .remove (key );
73+ return redactedCopy .remove (key );
7474 }
7575
7676 @ Override
7777 public void putAll (Map <? extends String , ?> mapValues ) {
7878 Map <String , Object > copy = createCopy (mapValues );
79- filteredCopy .putAll (copy );
79+ redactedCopy .putAll (copy );
8080 }
8181
8282 @ Override
8383 public void clear () {
84- filteredCopy .clear ();
84+ redactedCopy .clear ();
8585 }
8686
8787 @ Override
8888 public Set <String > keySet () {
89- return filteredCopy .keySet ();
89+ return redactedCopy .keySet ();
9090 }
9191
9292 @ Override
9393 public Collection <Object > values () {
94- return filteredCopy .values ();
94+ return redactedCopy .values ();
9595 }
9696
9797 @ Override
9898 public Set <Entry <String , Object >> entrySet () {
99- return filteredCopy .entrySet ();
99+ return redactedCopy .entrySet ();
100100 }
101101
102102 @ SuppressWarnings ("unchecked" )
103103 private Object transformEntry (Object key , Object value ) {
104104 if (value instanceof Map ) {
105- return new FilteredMap ((Map <String , Object >) value , keyFilters );
105+ return new RedactedMap ((Map <String , Object >) value , redactedKeys );
106106 }
107- return shouldFilterKey ((String ) key ) ? FILTERED_PLACEHOLDER : value ;
107+ return shouldRedactKey ((String ) key ) ? REDACTED_PLACEHOLDER : value ;
108108 }
109109
110- private boolean shouldFilterKey (String key ) {
111- if (keyFilters == null || key == null ) {
110+ private boolean shouldRedactKey (String key ) {
111+ if (key == null ) {
112112 return false ;
113113 }
114-
115- for (String filter : keyFilters ) {
116- if (key .contains (filter )) {
114+ // Check for common keys first before looping through all
115+ if (redactedKeys .contains (key )) {
116+ return true ;
117+ }
118+ for (String redactedKey : redactedKeys ) {
119+ if (key .contains (redactedKey )) {
117120 return true ;
118121 }
119122 }
0 commit comments