`MemberResolver` misses members inherited via self-referential interface (`ResolvedRecursiveType` as implemented interface)
Ya se ha fusionado un pull request relacionado.
- #135 de @cowtowncoder — fusionado
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Start with MemberResolver and how it walks implemented interfaces, then look at ResolvedRecursiveType.getImplementedInterfaces(), which returns an empty list. Compare with the super-class handling in ResolvedObjectType.getParentClass() that #128 added. Done when the self-referential outerInMid from the reproduction yields the same member methods (get(), top()) as stand-alone OuterI.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
When an implemented interface of a type is a self-reference (ResolvedRecursiveType), it is returned as-is by getImplementedInterfaces(); and since ResolvedRecursiveType.getImplementedInterfaces() returns an empty list (to avoid infinite loops), MemberResolver silently drops all members inherited through that interface.
Reproduction
public interface Top { void top(); }
public interface BaseI<X> extends Top { X get(); }
public interface MidI<T> extends BaseI<OuterI> { }
public interface OuterI extends MidI<String> { }
TypeResolver r = new TypeResolver();
MemberResolver mr = new MemberResolver(r);
// `OuterI` as type parameter of `BaseI<OuterI>`, within `MidI<String>`:
ResolvedType outerInMid = r.resolve(MidI.class, String.class)
.getImplementedInterfaces().get(0).getTypeParameters().get(0);
mr.resolve(outerInMid, null, null).getMemberMethods().length; // 0
mr.resolve(r.resolve(OuterI.class), null, null).getMemberMethods().length; // 2 (`get()`, `top()`)
Here outerInMid implements MidI<String> via a self-reference (since MidI<String> was still being resolved), so BaseI and Top (and their methods) are not reachable.
(note: on 1.7 / current main, even stand-alone OuterI resolves to 0 member methods)
Expected
Same members as for stand-alone OuterI.
Notes
#128 handled the equivalent case for super classes: ResolvedObjectType.getParentClass() maps a self-referential super class to the type it represents (ResolvedRecursiveType.getActualType(), new in 1.8). Super interfaces would need similar handling: either in getImplementedInterfaces() of ResolvedObjectType / ResolvedInterfaceType, or in MemberResolver (HierarchicType construction) when traversing interfaces. Changing what getImplementedInterfaces() returns would be a (minor) behavioral change, so MemberResolver-side handling may be preferable.
- Lenguaje dominante
- Java
- Estrellas
- 266
- Forks
- 53
- Merge medio
- 18 h 46 min
- PR fusionados (30 d)
- 8
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de FasterXML/java-classmate
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
FasterXML/java-classmate#111 · 10 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
FasterXML/java-classmate#81 · 1 comentario ·
-
Make `GenericType<T>` not implement `java.lang.reflect.Type`Posiblemente ocupada @cowtowncoder la tomó hace 316 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
FasterXML/java-classmate#76 · 6 comentarios · 1 reacción ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
FasterXML/java-classmate#72 · 3 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
FasterXML/java-classmate#69 · 22 comentarios ·
Todos los issues de FasterXML/java-classmate
Issues similares
-
enhancement Improvement
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
zowe/zowe-client-java-sdk#647 ·
-
NullPointerException when a `DeserializationProblemHandler` returns `null` for `byte[]` (single value unwrapped) and `char[]` elementsPosiblemente ocupada @Marti2203 la tomó hoy. Abierto
Dificultad 2/5 Medio día Aptitud para principiantes 88/100
FasterXML/jackson-databind#6300 ·
Los mantenedores suelen responder en 1 día
-
content good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
cpinitiative/usaco-guide#6699 ·
Los mantenedores suelen responder en 1 día
-
BC remittance upload: a claim MSP refused (S03) is saved with a blank status instead of refused (F)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertotype: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
carlos-emr/carlos#4933 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
apache/rocketmq-dashboard#6925 ·
Los mantenedores suelen responder en 3 días