Skip to content

Commit f027327

Browse files
committed
Remove Exclude effect on parent method
1 parent a568bcd commit f027327

File tree

3 files changed

+10
-37
lines changed

3 files changed

+10
-37
lines changed

firebase-database/src/main/java/com/google/firebase/database/core/utilities/encoding/CustomClassMapper.java

+5-17
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,9 @@
3838
import java.util.Collection;
3939
import java.util.Collections;
4040
import java.util.HashMap;
41-
import java.util.HashSet;
4241
import java.util.List;
4342
import java.util.Locale;
4443
import java.util.Map;
45-
import java.util.Set;
4644
import java.util.concurrent.ConcurrentHashMap;
4745
import java.util.concurrent.ConcurrentMap;
4846

@@ -497,7 +495,6 @@ public BeanMapper(Class<T> clazz) {
497495
// class hierarchy to find the appropriate setter or field.
498496
Class<? super T> currentClass = clazz;
499497
Map<String, Method> bridgeMethods = new HashMap<>();
500-
Set<String> propertyNamesOfExcludedSetters = new HashSet<>();
501498
do {
502499
// Add any setters
503500
for (Method method : currentClass.getDeclaredMethods()) {
@@ -516,12 +513,8 @@ public BeanMapper(Class<T> clazz) {
516513
Method existingSetter = setters.get(propertyName);
517514
Method correspondingBridgeMethod = bridgeMethods.get(propertyName);
518515
if (existingSetter == null) {
516+
method.setAccessible(true);
519517
setters.put(propertyName, method);
520-
if (method.isAnnotationPresent(Exclude.class)) {
521-
propertyNamesOfExcludedSetters.add(propertyName);
522-
} else {
523-
method.setAccessible(true);
524-
}
525518
} else if (!isSetterOverride(method, existingSetter)
526519
&& !(correspondingBridgeMethod != null
527520
&& isSetterOverride(method, correspondingBridgeMethod))) {
@@ -559,14 +552,6 @@ && isSetterOverride(method, correspondingBridgeMethod))) {
559552
currentClass = currentClass.getSuperclass();
560553
} while (currentClass != null && !currentClass.equals(Object.class));
561554

562-
// When subclass setter is annotated with `@Exclude`, the corresponding superclass setter
563-
// also need to be filtered out.
564-
for (String propertyName : propertyNamesOfExcludedSetters) {
565-
Method superclassSetter = setters.get(propertyName);
566-
superclassSetter.setAccessible(false);
567-
setters.remove(propertyName);
568-
}
569-
570555
if (properties.isEmpty()) {
571556
throw new DatabaseException("No properties to serialize found on class " + clazz.getName());
572557
}
@@ -757,7 +742,10 @@ private static boolean shouldIncludeSetter(Method method) {
757742
if (method.getParameterTypes().length != 1) {
758743
return false;
759744
}
760-
745+
// Excluded methods
746+
if (method.isAnnotationPresent(Exclude.class)) {
747+
return false;
748+
}
761749
return true;
762750
}
763751

firebase-firestore/CHANGELOG.md

-1
Original file line numberDiff line numberDiff line change
@@ -890,4 +890,3 @@ updates.
890890
or
891891
[`FieldValue.serverTimestamp()`](/docs/reference/android/com/google/firebase/firestore/FieldValue.html#serverTimestamp())
892892
values.
893-

firebase-firestore/src/main/java/com/google/firebase/firestore/util/CustomClassMapper.java

+5-19
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
import java.util.List;
5151
import java.util.Locale;
5252
import java.util.Map;
53-
import java.util.Set;
5453
import java.util.concurrent.ConcurrentHashMap;
5554
import java.util.concurrent.ConcurrentMap;
5655

@@ -650,7 +649,6 @@ private static class BeanMapper<T> {
650649
// class hierarchy to find the appropriate setter or field.
651650
Class<? super T> currentClass = clazz;
652651
Map<String, Method> bridgeMethods = new HashMap<>();
653-
Set<String> propertyNamesOfExcludedSetters = new HashSet<>();
654652
do {
655653
// Add any setters
656654
for (Method method : currentClass.getDeclaredMethods()) {
@@ -672,11 +670,8 @@ private static class BeanMapper<T> {
672670
Method existingSetter = setters.get(propertyName);
673671
Method correspondingBridgeMethod = bridgeMethods.get(propertyName);
674672
if (existingSetter == null) {
675-
setters.put(propertyName, method);
676673
method.setAccessible(true);
677-
if (method.isAnnotationPresent(Exclude.class)) {
678-
propertyNamesOfExcludedSetters.add(propertyName);
679-
}
674+
setters.put(propertyName, method);
680675
applySetterAnnotations(method);
681676
} else if (!isSetterOverride(method, existingSetter)
682677
&& !(correspondingBridgeMethod != null
@@ -725,14 +720,6 @@ && isSetterOverride(method, correspondingBridgeMethod))) {
725720
currentClass = currentClass.getSuperclass();
726721
} while (currentClass != null && !currentClass.equals(Object.class));
727722

728-
// When subclass setter is annotated with `@Exclude`, the corresponding superclass setter
729-
// also need to be filtered out.
730-
for (String propertyName : propertyNamesOfExcludedSetters) {
731-
Method superclassSetter = setters.get(propertyName);
732-
superclassSetter.setAccessible(false);
733-
setters.remove(propertyName);
734-
}
735-
736723
if (properties.isEmpty()) {
737724
throw new RuntimeException("No properties to serialize found on class " + clazz.getName());
738725
}
@@ -981,10 +968,6 @@ private void applySetterAnnotations(Method method) {
981968
+ " only be applied to fields and getters, not setters.");
982969
}
983970

984-
if (method.isAnnotationPresent(Exclude.class)) {
985-
method.setAccessible(false);
986-
}
987-
988971
if (method.isAnnotationPresent(DocumentId.class)) {
989972
Class<?> paramType = method.getParameterTypes()[0];
990973
ensureValidDocumentIdType("Method", "accepts", paramType);
@@ -1059,7 +1042,10 @@ private static boolean shouldIncludeSetter(Method method) {
10591042
if (method.getParameterTypes().length != 1) {
10601043
return false;
10611044
}
1062-
1045+
// Excluded methods
1046+
if (method.isAnnotationPresent(Exclude.class)) {
1047+
return false;
1048+
}
10631049
return true;
10641050
}
10651051

0 commit comments

Comments
 (0)