import java.lang {
    JString=String,
    Types {
        nativeString
    }
}

"A [[List]] with keys of type `String` that wraps a `List`
 with keys of type `java.lang::String`.

 This class can be used to wrap a `java.util::List` if the
 Java map is first wrapped with [[CeylonList]]:

     CeylonStringList(CeylonList(javaList))

 If the given list is a [[ceylon.collection::MutableList]],
 use [[CeylonStringMutableList]]."
shared class CeylonStringList(List<JString> list)
        satisfies List<String> {

    getFromFirst(Integer index)
            => if (exists string = list[index])
            then string.string
            else null;

    contains(Object element)
            => if (is String element)
            then nativeString(element) in list
            else false;

    lastIndex => list.lastIndex;

    size => list.size;

    shared actual default CeylonStringList clone()
            => CeylonStringList(list.clone());

    hash => (super of List<String>).hash;

    equals(Object that) => (super of List<String>).equals(that);


}