• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.github.javaparser.symbolsolver.resolution.typeinference;
2 
3 import com.github.javaparser.ast.expr.LambdaExpr;
4 import com.github.javaparser.resolution.types.ResolvedType;
5 import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
6 
7 import java.util.*;
8 
9 /**
10  * @author Federico Tomassetti
11  */
12 public class TypeInferenceCache {
13 
14     private static Map<TypeSolver, IdentityHashMap<LambdaExpr, Map<String, ResolvedType>>> typeForLambdaParameters = new HashMap<>();
15     private static Map<TypeSolver, IdentityHashMap<LambdaExpr, List<InferenceVariable>>> inferenceVariables = new HashMap<>();
16 
record(TypeSolver typeSolver, LambdaExpr lambdaExpr, String paramName, ResolvedType type)17     public static void record(TypeSolver typeSolver, LambdaExpr lambdaExpr, String paramName, ResolvedType type) {
18         if (!typeForLambdaParameters.containsKey(typeSolver)) {
19             typeForLambdaParameters.put(typeSolver, new IdentityHashMap<>());
20         }
21         if (!typeForLambdaParameters.get(typeSolver).containsKey(lambdaExpr)) {
22             typeForLambdaParameters.get(typeSolver).put(lambdaExpr, new HashMap<>());
23         }
24         typeForLambdaParameters.get(typeSolver).get(lambdaExpr).put(paramName, type);
25     }
26 
retrieve(TypeSolver typeSolver, LambdaExpr lambdaExpr, String paramName)27     public static Optional<ResolvedType> retrieve(TypeSolver typeSolver, LambdaExpr lambdaExpr, String paramName) {
28         if (!typeForLambdaParameters.containsKey(typeSolver)) {
29             return Optional.empty();
30         }
31         if (!typeForLambdaParameters.get(typeSolver).containsKey(lambdaExpr)) {
32             return Optional.empty();
33         }
34         if (!typeForLambdaParameters.get(typeSolver).get(lambdaExpr).containsKey(paramName)) {
35             return Optional.empty();
36         }
37         return Optional.of(typeForLambdaParameters.get(typeSolver).get(lambdaExpr).get(paramName));
38     }
39 
recordInferenceVariables(TypeSolver typeSolver, LambdaExpr lambdaExpr, List<InferenceVariable> _inferenceVariables)40     public static void recordInferenceVariables(TypeSolver typeSolver, LambdaExpr lambdaExpr, List<InferenceVariable> _inferenceVariables) {
41         if (!inferenceVariables.containsKey(typeSolver)) {
42             inferenceVariables.put(typeSolver, new IdentityHashMap<>());
43         }
44         inferenceVariables.get(typeSolver).put(lambdaExpr, _inferenceVariables);
45     }
46 
retrieveInferenceVariables(TypeSolver typeSolver, LambdaExpr lambdaExpr)47     public static Optional<List<InferenceVariable>> retrieveInferenceVariables(TypeSolver typeSolver, LambdaExpr lambdaExpr) {
48         if (!inferenceVariables.containsKey(typeSolver)) {
49             return Optional.empty();
50         }
51         if (!inferenceVariables.get(typeSolver).containsKey(lambdaExpr)) {
52             return Optional.empty();
53         }
54         return Optional.of(inferenceVariables.get(typeSolver).get(lambdaExpr));
55     }
56 }
57