blob: 36325420b33ec285c108c864e14a2ca6c9420a1e [file] [log] [blame]
package com.github.javaparser.symbolsolver.resolution.typeinference;
import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration;
import com.github.javaparser.resolution.types.ResolvedType;
import java.util.LinkedList;
import java.util.List;
/**
* @author Federico Tomassetti
*/
public class Substitution {
private List<ResolvedTypeParameterDeclaration> typeParameterDeclarations;
private List<ResolvedType> types;
private final static Substitution EMPTY = new Substitution();
public static Substitution empty() {
return EMPTY;
}
public Substitution withPair(ResolvedTypeParameterDeclaration typeParameterDeclaration, ResolvedType type) {
Substitution newInstance = new Substitution();
newInstance.typeParameterDeclarations.addAll(this.typeParameterDeclarations);
newInstance.types.addAll(this.types);
newInstance.typeParameterDeclarations.add(typeParameterDeclaration);
newInstance.types.add(type);
return newInstance;
}
private Substitution() {
this.typeParameterDeclarations = new LinkedList<>();
this.types = new LinkedList<>();
}
public ResolvedType apply(ResolvedType originalType) {
ResolvedType result = originalType;
for (int i=0;i<typeParameterDeclarations.size();i++) {
result = result.replaceTypeVariables(typeParameterDeclarations.get(i), types.get(i));
}
return result;
}
}