Home | History | Annotate | Download | only in typeinference
      1 package com.github.javaparser.symbolsolver.resolution.typeinference;
      2 
      3 import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration;
      4 import com.github.javaparser.resolution.types.ResolvedType;
      5 
      6 import java.util.LinkedList;
      7 import java.util.List;
      8 
      9 /**
     10  * @author Federico Tomassetti
     11  */
     12 public class Substitution {
     13 
     14     private List<ResolvedTypeParameterDeclaration> typeParameterDeclarations;
     15     private List<ResolvedType> types;
     16 
     17     private final static Substitution EMPTY = new Substitution();
     18 
     19     public static Substitution empty() {
     20         return EMPTY;
     21     }
     22 
     23     public Substitution withPair(ResolvedTypeParameterDeclaration typeParameterDeclaration, ResolvedType type) {
     24         Substitution newInstance = new Substitution();
     25         newInstance.typeParameterDeclarations.addAll(this.typeParameterDeclarations);
     26         newInstance.types.addAll(this.types);
     27         newInstance.typeParameterDeclarations.add(typeParameterDeclaration);
     28         newInstance.types.add(type);
     29         return newInstance;
     30 
     31     }
     32 
     33     private Substitution() {
     34         this.typeParameterDeclarations = new LinkedList<>();
     35         this.types = new LinkedList<>();
     36     }
     37 
     38     public ResolvedType apply(ResolvedType originalType) {
     39         ResolvedType result = originalType;
     40         for (int i=0;i<typeParameterDeclarations.size();i++) {
     41             result = result.replaceTypeVariables(typeParameterDeclarations.get(i), types.get(i));
     42         }
     43         return result;
     44     }
     45 }
     46