class FkHolder {

    private final CodeGenerationComponent codeGenerationComponent;
    
    private final ForeignKey fk;
    private final ForeignKeyColumn fkc;
    private final Column column;
    private final Table table;
    private final Column foreignColumn;
    private final Table foreignTable;

    public FkHolder(Injector injector, ForeignKey fk) {
        requireNonNull(injector);
        requireNonNull(fk);
        this.codeGenerationComponent = injector.getOrThrow(CodeGenerationComponent.class);
        
        this.fk  = fk;
        this.fkc = fk.foreignKeyColumns().findFirst().orElseThrow(this::noEnabledForeignKeyException);
        
        this.column        = fkc.findColumnOrThrow();
        this.table         = ancestor(column, Table.class).orElseThrow(NoSuchElementException::new);
        this.foreignColumn = fkc.findForeignColumn().orElseThrow(this::foreignKeyWasNullException);
        this.foreignTable  = fkc.findForeignTable().orElseThrow(this::foreignKeyWasNullException);
    }

    public Column getColumn() {
        return column;
    }

    public Table getTable() {
        return table;
    }

    public Column getForeignColumn() {
        return foreignColumn;
    }

    public Table getForeignTable() {
        return foreignTable;
    }

    public JavaClassTranslator<Table, Interface> getEmt() {
        @SuppressWarnings("unchecked")
        final JavaClassTranslator<Table, Interface> translator = 
            (JavaClassTranslator<Table, Interface>)
            codeGenerationComponent.findTranslator(getTable(), StandardTranslatorKey.MANAGER);
        return translator;
    }

    public JavaClassTranslator<Table, Interface> getForeignEmt() {
        @SuppressWarnings("unchecked")
        final JavaClassTranslator<Table, Interface> translator = 
            (JavaClassTranslator<Table, Interface>)
            codeGenerationComponent.findTranslator(getForeignTable(), StandardTranslatorKey.MANAGER);
        return translator;
    }

    private IllegalStateException noEnabledForeignKeyException() {
        return new IllegalStateException(
            "FK " + fk.getId() + " does not have an enabled ForeignKeyColumn"
        );
    }

    private SpeedmentException foreignKeyWasNullException() {<FILL_FUNCTION_BODY>}
}

        return new SpeedmentException(
            "Could not find referenced foreign column '" + 
            fkc.getForeignColumnName() + "' in table '" + 
            fkc.getForeignTableName() + "'."
        );
    
<no_super_class>