package de.dhbwstuttgart.target.generate;

import de.dhbwstuttgart.core.JavaTXCompiler;
import de.dhbwstuttgart.syntaxtree.ClassOrInterface;
import de.dhbwstuttgart.syntaxtree.Method;
import de.dhbwstuttgart.typeinference.result.ResultSet;

import java.util.Set;

final class JavaGenerics extends GenerateGenerics {
    JavaGenerics(JavaTXCompiler compiler, ResultSet constraints) {
        super(compiler, constraints);
    }

    @Override
    void generics(ClassOrInterface owner, Method method, Set<Pair> result, Set<TPH> referenced) {
        eliminateCycles(result, referenced);
        eliminateInfimaConnectedToReturnType(method, result, referenced);
        eliminateInfima(result, referenced);
        equalizeTypeVariables(result, referenced);
        eliminateInnerTypeVariables(referenced, result);
    }

    @Override
    void generics(ClassOrInterface classOrInterface, Set<Pair> result, Set<TPH> referenced) {
        eliminateCycles(result, referenced);
        eliminateInfima(result, referenced);
        eliminateInnerTypeVariablesOfClass(classOrInterface, result, referenced);
        equalizeTypeVariables(result, referenced);
    }
}
