private void validatePlannerOutputCompatibility(Planner planner, Output output) { Set<MutationType> plannerMTs = planner.getEmittedMutationTypes(); if (planner instanceof RandomPlanner) { if (!(output instanceof RandomOutput)) { handleIncompatiblePlannerOutput(planner, output); } Set<MutationType> outputMTs = ((RandomOutput)output).getSupportedRandomMutationTypes(); for (MutationType planMT : plannerMTs) { if (!outputMTs.contains(planMT)) { handleIncompatiblePlannerOutput(planner, output); } } } else if (planner instanceof BulkPlanner) { if (!(output instanceof BulkOutput)) { handleIncompatiblePlannerOutput(planner, output); } Set<MutationType> outputMTs = ((BulkOutput)output).getSupportedBulkMutationTypes(); for (MutationType planMT : plannerMTs) { if (!outputMTs.contains(planMT)) { handleIncompatiblePlannerOutput(planner, output); } } } else { throw new RuntimeException("Unexpected planner class: " + planner.getClass().getName()); } }