package me.tomassetti.turin.parser.ast.statements; import com.google.common.collect.ImmutableList; import me.tomassetti.jvm.JvmConstructorDefinition; import me.tomassetti.turin.resolvers.SymbolResolver; import me.tomassetti.turin.parser.ast.Node; import me.tomassetti.turin.parser.ast.TurinTypeDefinition; import me.tomassetti.turin.parser.ast.expressions.ActualParam; import me.tomassetti.turin.parser.ast.expressions.InvokableExpr; import me.tomassetti.turin.parser.ast.typeusage.TypeUsageNode; import me.tomassetti.turin.symbols.FormalParameter; import java.util.List; import java.util.Optional; public class SuperInvokation extends InvokableExpr { @Override public String toString() { return "SuperInvokation{" + "params=" + actualParams + '}'; } private TurinTypeDefinition getTurinTypeDefinition() { return getParentOfType(TurinTypeDefinition.class); } public SuperInvokation(List<ActualParam> params) { super(params); } @Override public boolean isOnOverloaded(SymbolResolver resolver) { return getTurinTypeDefinition().hasManyConstructors(); } @Override protected List<? extends FormalParameter> formalParameters(SymbolResolver resolver) { return getTurinTypeDefinition().getSuperclass().getConstructorParams(actualParams); } @Override public Iterable<Node> getChildren() { return ImmutableList.copyOf(actualParams); } @Override public TypeUsageNode calcType() { throw new UnsupportedOperationException(); } public Optional<JvmConstructorDefinition> findJvmDefinition(SymbolResolver resolver) { return getTurinTypeDefinition().getSuperclass().findConstructorDefinition(actualParams); } }