@Override
 public InferenceSolution solve(
     Map<String, String> configuration,
     Collection<Slot> slots,
     Collection<Constraint> constraints,
     QualifierHierarchy qualHierarchy,
     ProcessingEnvironment processingEnvironment) {
   this.processingEnvironment = processingEnvironment;
   this.slots = slots;
   this.qualHierarchy = qualHierarchy;
   this.constraints = constraints;
   this.slotManager = InferenceMain.getInstance().getSlotManager();
   return solve();
 }
 private void mergeIdToExistance(PermissionSolution solution) {
   for (Map.Entry<Integer, Boolean> entry : solution.getResult().entrySet()) {
     int id = entry.getKey();
     boolean existsPermission = entry.getValue();
     if (idToExistance.containsKey(id)) {
       boolean alreadyExists = idToExistance.get(id);
       if (alreadyExists ^ existsPermission) {
         InferenceMain.getInstance()
             .logger
             .log(Level.INFO, "Mismatch between existance of annotation");
       }
     } else {
       idToExistance.put(id, existsPermission);
     }
   }
 }