Support variable resolution of wildcard types
Update `ResolvableType` so that variable referenced can be resolved against wildcard types. Prior to this commit, given a type: Map<String, ? extends List<? extends CharSequence>> Calling `type.getGeneric(1).asCollection().resolveGeneric()` would return `null`. This was because the `List` variable `E` referenced a wildcard type which `resolveVariable` did not support. Closes gh-24145
This commit is contained in:
		
							parent
							
								
									a4fa6a7a31
								
							
						
					
					
						commit
						7c84695333
					
				| 
						 | 
				
			
			@ -873,6 +873,12 @@ public class ResolvableType implements Serializable {
 | 
			
		|||
				return forType(ownerType, this.variableResolver).resolveVariable(variable);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (this.type instanceof WildcardType) {
 | 
			
		||||
			ResolvableType resolved = resolveType().resolveVariable(variable);
 | 
			
		||||
			if (resolved != null) {
 | 
			
		||||
				return resolved;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (this.variableResolver != null) {
 | 
			
		||||
			return this.variableResolver.resolveVariable(variable);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -688,6 +688,13 @@ class ResolvableTypeTests {
 | 
			
		|||
		assertThat(type.resolve()).isEqualTo(CharSequence.class);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	void resolveBoundedTypeVariableWildcardResult() throws Exception {
 | 
			
		||||
		ResolvableType type = ResolvableType.forMethodReturnType(Methods.class.getMethod("boundedTypeVaraibleWildcardResult"));
 | 
			
		||||
		assertThat(type.getGeneric(1).asCollection().resolveGeneric()).isEqualTo(CharSequence.class);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	void resolveVariableNotFound() throws Exception {
 | 
			
		||||
		ResolvableType type = ResolvableType.forMethodReturnType(Methods.class.getMethod("typedReturn"));
 | 
			
		||||
| 
						 | 
				
			
			@ -1417,6 +1424,8 @@ class ResolvableTypeTests {
 | 
			
		|||
 | 
			
		||||
		<R extends CharSequence & Serializable> R boundedTypeVaraibleResult();
 | 
			
		||||
 | 
			
		||||
		Map<String, ? extends List<? extends CharSequence>> boundedTypeVaraibleWildcardResult();
 | 
			
		||||
 | 
			
		||||
		void nested(Map<Map<String, Integer>, Map<Byte, Long>> p);
 | 
			
		||||
 | 
			
		||||
		void typedParameter(T p);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue