package com.redhat.ceylon.eclipse.util;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import com.redhat.ceylon.compiler.java.runtime.model.TypeDescriptor;
import com.redhat.ceylon.ide.common.model.CeylonProject;
import com.redhat.ceylon.ide.common.vfs.ResourceVirtualFile;
import ceylon.language.Iterator;
import ceylon.language.Sequence;
import ceylon.language.finished_;
public class CeylonHelper {
public static TypeDescriptor td(Class<?> klass) {
TypeDescriptor[] typeArguments = new TypeDescriptor[0];
if (ResourceVirtualFile.class.isAssignableFrom(klass) ||
CeylonProject.class.equals(klass)) {
typeArguments = new TypeDescriptor[] {
TypeDescriptor.klass(IProject.class),
TypeDescriptor.klass(IResource.class),
TypeDescriptor.klass(IFolder.class),
TypeDescriptor.klass(IFile.class)
};
}
return TypeDescriptor.klass(klass, typeArguments);
}
public static <Type> List<Type> list(Class<Type> klass, ceylon.language.Iterable<? extends Type, ? extends Object> ceylonIterable) {
if (ceylonIterable == null) {
return null;
}
ArrayList<Type> arrayList = new ArrayList<>();
Iterator<?> iterator = ceylonIterable.iterator();
Object elem;
while ((elem = iterator.next())!=finished_.get_()) {
arrayList.add((Type) elem);
}
return arrayList;
}
public static List<String> toJavaStringList(ceylon.language.Iterable<? extends ceylon.language.String, ? extends Object> ceylonIterable) {
if (ceylonIterable == null) {
return null;
}
ArrayList<String> arrayList = new ArrayList<>();
Iterator<?> iterator = ceylonIterable.iterator();
Object elem;
while ((elem = iterator.next())!=finished_.get_()) {
arrayList.add(elem == null ? null : ((ceylon.language.String)elem).value);
}
return arrayList;
}
public static String[] toJavaStringArray(Sequence<? extends ceylon.language.String> sequence) {
if (sequence == null) {
return null;
}
long length = sequence.getSize();
String[] result = new String[(int) length];
for (int i=0; i<length; i++) {
ceylon.language.String str = sequence.getFromFirst(i);
result[i] = str==null ? null : str.value;
}
return result;
}
}