@Test public void testReplaceTypeVariablesWithLambdaInBetween() { TypeSolver typeResolver = new ReflectionTypeSolver(); ResolvedInterfaceDeclaration streamInterface = new ReflectionInterfaceDeclaration(Stream.class, typeResolver); ResolvedReferenceType stream = new ReferenceTypeImpl(streamInterface, typeResolver); ResolvedMethodDeclaration streamMap = streamInterface.getDeclaredMethods().stream().filter(m -> m.getName().equals("map")).findFirst().get(); ResolvedTypeParameterDeclaration streamMapR = streamMap.findTypeParameter("T").get(); ResolvedTypeVariable typeVariable = new ResolvedTypeVariable(streamMapR); stream = stream.deriveTypeParameters(stream.typeParametersMap().toBuilder().setValue(stream.getTypeDeclaration().getTypeParameters().get(0), typeVariable).build()); ResolvedTypeParameterDeclaration tpToReplace = streamInterface.getTypeParameters().get(0); ResolvedType replaced = new ReferenceTypeImpl(new ReflectionClassDeclaration(String.class, typeResolver), typeResolver); ResolvedType streamReplaced = stream.replaceTypeVariables(tpToReplace, replaced); assertEquals("java.util.stream.Stream<java.lang.String>", streamReplaced.describe()); }
@Test public void testReplaceTypeVariables() { TypeSolver typeResolver = new ReflectionTypeSolver(); ResolvedInterfaceDeclaration streamInterface = new ReflectionInterfaceDeclaration(Stream.class, typeResolver); ResolvedReferenceType stream = new ReferenceTypeImpl(streamInterface, typeResolver); ResolvedMethodDeclaration streamMap = streamInterface.getDeclaredMethods().stream().filter(m -> m.getName().equals("map")).findFirst().get(); ResolvedTypeParameterDeclaration streamMapR = streamMap.findTypeParameter("T").get(); ResolvedTypeVariable typeVariable = new ResolvedTypeVariable(streamMapR); stream = stream.deriveTypeParameters(stream.typeParametersMap().toBuilder().setValue(stream.getTypeDeclaration().getTypeParameters().get(0), typeVariable).build()); ResolvedTypeParameterDeclaration tpToReplace = streamInterface.getTypeParameters().get(0); ResolvedType replaced = new ReferenceTypeImpl(new ReflectionClassDeclaration(String.class, typeResolver), typeResolver); ResolvedType streamReplaced = stream.replaceTypeVariables(tpToReplace, replaced); assertEquals("java.util.stream.Stream<java.lang.String>", streamReplaced.describe()); }