Skip to content

Commit 0044cce

Browse files
java-team-github-botGoogle Java Core Libraries
authored andcommitted
When creating the proxy instance using the set of interfaces derived from the 'interfaceType', remove all super types of the interfaces that are in the set. That is to avoid IllegalArgumentException if any of the super types are sealed.
RELNOTES=n/a PiperOrigin-RevId: 782100677
1 parent 4c119ee commit 0044cce

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

android/guava-testlib/src/com/google/common/testing/DummyProxy.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.io.Serializable;
3030
import java.lang.reflect.Method;
3131
import java.lang.reflect.Proxy;
32+
import java.util.Iterator;
3233
import java.util.LinkedHashSet;
3334
import java.util.Set;
3435
import org.jspecify.annotations.NullMarked;
@@ -50,7 +51,22 @@ abstract class DummyProxy {
5051
*/
5152
final <T> T newProxy(TypeToken<T> interfaceType) {
5253
Set<Class<?>> interfaceClasses = new LinkedHashSet<>();
53-
interfaceClasses.addAll(interfaceType.getTypes().interfaces().rawTypes());
54+
Set<Class<? super T>> allInterfaceClasses = interfaceType.getTypes().interfaces().rawTypes();
55+
for (Class<? super T> itf : allInterfaceClasses) {
56+
Iterator<Class<?>> iterator = interfaceClasses.iterator();
57+
boolean addToSet = true;
58+
while (iterator.hasNext()) {
59+
Class<?> current = iterator.next();
60+
if (current == itf || itf.isAssignableFrom(current)) {
61+
// Skip any super interface of the ones that are already included.
62+
addToSet = false;
63+
break;
64+
}
65+
}
66+
if (addToSet) {
67+
interfaceClasses.add(itf);
68+
}
69+
}
5470
// Make the proxy serializable to work with SerializableTester
5571
interfaceClasses.add(Serializable.class);
5672
Object dummy =

guava-testlib/src/com/google/common/testing/DummyProxy.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.io.Serializable;
3030
import java.lang.reflect.Method;
3131
import java.lang.reflect.Proxy;
32+
import java.util.Iterator;
3233
import java.util.LinkedHashSet;
3334
import java.util.Set;
3435
import org.jspecify.annotations.NullMarked;
@@ -50,7 +51,22 @@ abstract class DummyProxy {
5051
*/
5152
final <T> T newProxy(TypeToken<T> interfaceType) {
5253
Set<Class<?>> interfaceClasses = new LinkedHashSet<>();
53-
interfaceClasses.addAll(interfaceType.getTypes().interfaces().rawTypes());
54+
Set<Class<? super T>> allInterfaceClasses = interfaceType.getTypes().interfaces().rawTypes();
55+
for (Class<? super T> itf : allInterfaceClasses) {
56+
Iterator<Class<?>> iterator = interfaceClasses.iterator();
57+
boolean addToSet = true;
58+
while (iterator.hasNext()) {
59+
Class<?> current = iterator.next();
60+
if (current == itf || itf.isAssignableFrom(current)) {
61+
// Skip any super interface of the ones that are already included.
62+
addToSet = false;
63+
break;
64+
}
65+
}
66+
if (addToSet) {
67+
interfaceClasses.add(itf);
68+
}
69+
}
5470
// Make the proxy serializable to work with SerializableTester
5571
interfaceClasses.add(Serializable.class);
5672
Object dummy =

0 commit comments

Comments
 (0)