Search in sources :

Example 1 with TypeElement

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();
    }
}
Also used : TypeElement(org.eclipse.ceylon.javax.lang.model.element.TypeElement) JCTree(org.eclipse.ceylon.langtools.tools.javac.tree.JCTree)

Example 2 with TypeElement

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. */
}
Also used : TypeMirror(org.eclipse.ceylon.javax.lang.model.type.TypeMirror) TypeElement(org.eclipse.ceylon.javax.lang.model.element.TypeElement) Element(org.eclipse.ceylon.javax.lang.model.element.Element) TypeElement(org.eclipse.ceylon.javax.lang.model.element.TypeElement) ExecutableElement(org.eclipse.ceylon.javax.lang.model.element.ExecutableElement) VariableElement(org.eclipse.ceylon.javax.lang.model.element.VariableElement)

Example 3 with TypeElement

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;
}
Also used : TypeElement(org.eclipse.ceylon.javax.lang.model.element.TypeElement) ArrayList(java.util.ArrayList) VariableElement(org.eclipse.ceylon.javax.lang.model.element.VariableElement) Stack(java.util.Stack)

Aggregations

TypeElement (org.eclipse.ceylon.javax.lang.model.element.TypeElement)3 VariableElement (org.eclipse.ceylon.javax.lang.model.element.VariableElement)2 ArrayList (java.util.ArrayList)1 Stack (java.util.Stack)1 Element (org.eclipse.ceylon.javax.lang.model.element.Element)1 ExecutableElement (org.eclipse.ceylon.javax.lang.model.element.ExecutableElement)1 TypeMirror (org.eclipse.ceylon.javax.lang.model.type.TypeMirror)1 JCTree (org.eclipse.ceylon.langtools.tools.javac.tree.JCTree)1