use of org.eclipse.ceylon.javax.lang.model.element.TypeElement in project ceylon by eclipse.
the class JavacTaskImpl method enter.
/**
* Translate the given abstract syntax trees to elements.
*
* @param trees a list of abstract syntax trees.
* @throws java.io.IOException TODO
* @return a list of elements corresponding to the top level
* classes in the abstract syntax trees
*/
public Iterable<? extends TypeElement> enter(Iterable<? extends CompilationUnitTree> trees) throws IOException {
if (trees == null && notYetEntered != null && notYetEntered.isEmpty())
return List.nil();
prepareCompiler();
ListBuffer<JCCompilationUnit> roots = null;
if (trees == null) {
// list to be entered.
if (notYetEntered.size() > 0) {
if (!parsed)
// TODO would be nice to specify files needed to be parsed
parse();
for (JavaFileObject file : fileObjects) {
JCCompilationUnit unit = notYetEntered.remove(file);
if (unit != null) {
if (roots == null)
roots = new ListBuffer<JCCompilationUnit>();
roots.append(unit);
}
}
notYetEntered.clear();
}
} else {
for (CompilationUnitTree cu : trees) {
if (cu instanceof JCCompilationUnit) {
if (roots == null)
roots = new ListBuffer<JCCompilationUnit>();
roots.append((JCCompilationUnit) cu);
notYetEntered.remove(cu.getSourceFile());
} else
throw new IllegalArgumentException(cu.toString());
}
}
if (roots == null)
return List.nil();
try {
List<JCCompilationUnit> units = compiler.enterTrees(roots.toList());
if (notYetEntered.isEmpty())
compiler = compiler.processAnnotations(units);
ListBuffer<TypeElement> elements = new ListBuffer<TypeElement>();
for (JCCompilationUnit unit : units) {
for (JCTree node : unit.defs) {
if (node.hasTag(JCTree.Tag.CLASSDEF)) {
JCClassDecl cdef = (JCClassDecl) node;
if (// maybe null if errors in anno processing
cdef.sym != null)
elements.append(cdef.sym);
}
}
}
return elements.toList();
} finally {
compiler.log.flush();
}
}
use of org.eclipse.ceylon.javax.lang.model.element.TypeElement in project ceylon by eclipse.
the class JNIWriter method jniType.
protected final String jniType(TypeMirror t) {
TypeElement throwable = elements.getTypeElement("java.lang.Throwable");
TypeElement jClass = elements.getTypeElement("java.lang.Class");
TypeElement jString = elements.getTypeElement("java.lang.String");
Element tclassDoc = types.asElement(t);
switch(t.getKind()) {
case ARRAY:
{
TypeMirror ct = ((ArrayType) t).getComponentType();
switch(ct.getKind()) {
case BOOLEAN:
return "jbooleanArray";
case BYTE:
return "jbyteArray";
case CHAR:
return "jcharArray";
case SHORT:
return "jshortArray";
case INT:
return "jintArray";
case LONG:
return "jlongArray";
case FLOAT:
return "jfloatArray";
case DOUBLE:
return "jdoubleArray";
case ARRAY:
case DECLARED:
return "jobjectArray";
default:
throw new Error(ct.toString());
}
}
case VOID:
return "void";
case BOOLEAN:
return "jboolean";
case BYTE:
return "jbyte";
case CHAR:
return "jchar";
case SHORT:
return "jshort";
case INT:
return "jint";
case LONG:
return "jlong";
case FLOAT:
return "jfloat";
case DOUBLE:
return "jdouble";
case DECLARED:
{
if (tclassDoc.equals(jString))
return "jstring";
else if (types.isAssignable(t, throwable.asType()))
return "jthrowable";
else if (types.isAssignable(t, jClass.asType()))
return "jclass";
else
return "jobject";
}
}
Assert.check(false, "jni unknown type");
return null;
/* dead code. */
}
use of org.eclipse.ceylon.javax.lang.model.element.TypeElement in project ceylon by eclipse.
the class JNIWriter method getAllFields.
/**
* Including super class fields.
*/
List<VariableElement> getAllFields(TypeElement subclazz) {
List<VariableElement> fields = new ArrayList<VariableElement>();
TypeElement cd = null;
Stack<TypeElement> s = new Stack<TypeElement>();
cd = subclazz;
while (true) {
s.push(cd);
TypeElement c = (TypeElement) (types.asElement(cd.getSuperclass()));
if (c == null)
break;
cd = c;
}
while (!s.empty()) {
cd = s.pop();
fields.addAll(ElementFilter.fieldsIn(cd.getEnclosedElements()));
}
return fields;
}
Aggregations