KeyValueIterator.ceylon

import ceylon.ast.core {
    Expression,
    KeyValueIterator,
    LIdentifier,
    Type,
    UnspecifiedVariable,
    ValueModifier
}
import ceylon.ast.redhat {
    RedHatTransformer,
    keyValueIteratorToCeylon,
    compileKeyValueIterator
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JKeyValueIterator=KeyValueIterator
    }
}

shared object keyValueIterator satisfies ConcreteTest<KeyValueIterator,JKeyValueIterator> {
    
    String->KeyValueIterator construct(String->LIdentifier keyName, <String->Type|ValueModifier>? keyType, String->LIdentifier valueName, <String->Type|ValueModifier>? valueType, String->Expression iterated)
            => "(`` keyType?.key else "" `` ``keyName.key`` -> `` valueType?.key else "" `` ``valueName.key`` in ``iterated.key``)"->KeyValueIterator(UnspecifiedVariable(keyName.item, keyType?.item), UnspecifiedVariable(valueName.item, valueType?.item), iterated.item);
    
    shared String->KeyValueIterator nameToPersonInPeopleByNameIterator = construct(identifier.nameLIdentifier, null, identifier.personLIdentifier, null, baseExpression.peopleByNameExpression);
    shared String->KeyValueIterator intIndexToCharCharInTextIndexedIterator = construct(identifier.indexLIdentifier, baseType.integerType, identifier.charLIdentifier, baseType.characterType, qualifiedExpression.textIndexedQualifiedExpression);
    shared String->KeyValueIterator valueNameToValuePersonInPeopleByNameIterator = construct(identifier.nameLIdentifier, valueModifier.valueModifier, identifier.personLIdentifier, valueModifier.valueModifier, baseExpression.peopleByNameExpression);
    
    compile = compileKeyValueIterator;
    fromCeylon = RedHatTransformer.transformKeyValueIterator;
    toCeylon = keyValueIteratorToCeylon;
    codes = [nameToPersonInPeopleByNameIterator, intIndexToCharCharInTextIndexedIterator, valueNameToValuePersonInPeopleByNameIterator];
}