Search in sources :

Example 21 with AbstractJClass

use of com.helger.jcodemodel.AbstractJClass in project androidannotations by androidannotations.

the class RestAnnotationHelper method resolveResponseClass.

/**
	 * Resolve the expected class for the input type according to the following
	 * rules :
	 * <ul>
	 * <li>The type is a primitive : Directly return the JClass as usual</li>
	 * <li>The type is NOT a generics : Directly return the JClass as usual</li>
	 * <li>The type is a generics and enclosing type is a class C&lt;T&gt; :
	 * Generate a subclass of C&lt;T&gt; and return it</li>
	 * <li>The type is a generics and enclosing type is an interface I&lt;T&gt;
	 * : Looking the inheritance tree, then</li>
	 * <ol>
	 * <li>One of the parent is a {@link java.util.Map Map} : Generate a
	 * subclass of {@link LinkedHashMap}&lt;T&gt; one and return it</li>
	 * <li>One of the parent is a {@link Set} : Generate a subclass of
	 * {@link TreeSet}&lt;T&gt; one and return it</li>
	 * <li>One of the parent is a {@link java.util.Collection Collection} :
	 * Generate a subclass of {@link ArrayList}&lt;T&gt; one and return it</li>
	 * <li>Return {@link Object} definition</li>
	 * </ol>
	 * </ul>
	 *
	 */
private AbstractJClass resolveResponseClass(TypeMirror expectedType, RestHolder holder, boolean useTypeReference) {
    // is a class or an interface
    if (expectedType.getKind() == TypeKind.DECLARED) {
        DeclaredType declaredType = (DeclaredType) expectedType;
        List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments();
        // is NOT a generics, return directly
        if (typeArguments.isEmpty()) {
            return codeModelHelper.typeMirrorToJClass(declaredType);
        }
        // is a generics, must generate a new super class
        TypeElement declaredElement = (TypeElement) declaredType.asElement();
        if (useTypeReference && getElementUtils().getTypeElement(RestSpringClasses.PARAMETERIZED_TYPE_REFERENCE) != null) {
            return codeModelHelper.typeMirrorToJClass(declaredType);
        }
        AbstractJClass baseClass = codeModelHelper.typeMirrorToJClass(declaredType).erasure();
        AbstractJClass decoratedExpectedClass = retrieveDecoratedResponseClass(declaredType, declaredElement, holder);
        if (decoratedExpectedClass == null) {
            decoratedExpectedClass = baseClass;
        }
        return decoratedExpectedClass;
    } else if (expectedType.getKind() == TypeKind.ARRAY) {
        ArrayType arrayType = (ArrayType) expectedType;
        TypeMirror componentType = arrayType.getComponentType();
        return resolveResponseClass(componentType, holder, false).array();
    }
    // is not a class nor an interface, return directly
    return codeModelHelper.typeMirrorToJClass(expectedType);
}
Also used : ArrayType(javax.lang.model.type.ArrayType) TypeMirror(javax.lang.model.type.TypeMirror) TypeElement(javax.lang.model.element.TypeElement) AbstractJClass(com.helger.jcodemodel.AbstractJClass) DeclaredType(javax.lang.model.type.DeclaredType)

Example 22 with AbstractJClass

use of com.helger.jcodemodel.AbstractJClass in project androidannotations by androidannotations.

the class RestAnnotationHelper method plainName.

protected String plainName(AbstractJClass jClass) {
    String plainName = jClass.erasure().name();
    List<? extends AbstractJClass> typeParameters = jClass.getTypeParameters();
    if (typeParameters.size() > 0) {
        plainName += "_";
        for (AbstractJClass typeParameter : typeParameters) {
            plainName += plainName(typeParameter);
        }
    }
    return plainName;
}
Also used : AbstractJClass(com.helger.jcodemodel.AbstractJClass)

Example 23 with AbstractJClass

use of com.helger.jcodemodel.AbstractJClass in project androidannotations by androidannotations.

the class RestHolder method setAvailableCookiesField.

private void setAvailableCookiesField() {
    AbstractJClass stringClass = getClasses().STRING;
    AbstractJClass mapClass = getClasses().HASH_MAP.narrow(stringClass, stringClass);
    availableCookiesField = getGeneratedClass().field(JMod.PRIVATE, mapClass, "availableCookies");
    getInit().body().assign(availableCookiesField, _new(mapClass));
}
Also used : AbstractJClass(com.helger.jcodemodel.AbstractJClass)

Example 24 with AbstractJClass

use of com.helger.jcodemodel.AbstractJClass in project androidannotations by androidannotations.

the class AbstractRestMethodWithParameterHandler method getRequestEntity.

@Override
protected IJExpression getRequestEntity(ExecutableElement element, RestHolder holder, JBlock methodBody, SortedMap<String, JVar> params) {
    JVar httpHeaders = restAnnotationHelper.declareHttpHeaders(element, holder, methodBody);
    JVar entitySentToServer = restAnnotationHelper.getEntitySentToServer(element, params);
    if (entitySentToServer == null) {
        Map<String, String> parameters = restAnnotationHelper.extractFieldAndPartParameters(element);
        if (parameters != null) {
            AbstractJClass hashMapClass = getJClass(RestSpringClasses.LINKED_MULTI_VALUE_MAP).narrow(String.class, Object.class);
            entitySentToServer = methodBody.decl(hashMapClass, "parameters", JExpr._new(hashMapClass));
            for (Map.Entry<String, String> parameter : parameters.entrySet()) {
                methodBody.add(entitySentToServer.invoke("add").arg(JExpr.lit(parameter.getKey())).arg(params.get(parameter.getValue())));
            }
        }
    }
    return restAnnotationHelper.declareHttpEntity(methodBody, entitySentToServer, httpHeaders);
}
Also used : AbstractJClass(com.helger.jcodemodel.AbstractJClass) Map(java.util.Map) SortedMap(java.util.SortedMap) JVar(com.helger.jcodemodel.JVar)

Example 25 with AbstractJClass

use of com.helger.jcodemodel.AbstractJClass in project androidannotations by androidannotations.

the class RoboGuiceHandler method listenerFields.

private void listenerFields(Element element, EActivityHolder holder) {
    List<TypeMirror> listenerTypeMirrors = extractListenerTypeMirrors(element);
    int i = 1;
    for (TypeMirror listenerTypeMirror : listenerTypeMirrors) {
        AbstractJClass listenerClass = codeModelHelper.typeMirrorToJClass(listenerTypeMirror);
        JFieldVar listener = holder.getGeneratedClass().field(JMod.PRIVATE, listenerClass, "listener" + i + generationSuffix());
        codeModelHelper.addSuppressWarnings(listener, "unused");
        listener.annotate(getJClass(RoboGuiceClasses.INJECT));
        i++;
    }
}
Also used : TypeMirror(javax.lang.model.type.TypeMirror) JFieldVar(com.helger.jcodemodel.JFieldVar) AbstractJClass(com.helger.jcodemodel.AbstractJClass)

Aggregations

AbstractJClass (com.helger.jcodemodel.AbstractJClass)125 JVar (com.helger.jcodemodel.JVar)48 JMethod (com.helger.jcodemodel.JMethod)36 JBlock (com.helger.jcodemodel.JBlock)35 JInvocation (com.helger.jcodemodel.JInvocation)31 TypeMirror (javax.lang.model.type.TypeMirror)24 IJExpression (com.helger.jcodemodel.IJExpression)23 JDefinedClass (com.helger.jcodemodel.JDefinedClass)19 VariableElement (javax.lang.model.element.VariableElement)14 JFieldVar (com.helger.jcodemodel.JFieldVar)13 GenerationProcess (com.github.sviperll.adt4j.model.util.GenerationProcess)9 ExecutableElement (javax.lang.model.element.ExecutableElement)9 JAnnotationUse (com.helger.jcodemodel.JAnnotationUse)8 JConditional (com.helger.jcodemodel.JConditional)8 JTypeVar (com.helger.jcodemodel.JTypeVar)8 DeclaredType (javax.lang.model.type.DeclaredType)8 VisitorDefinition (com.github.sviperll.adt4j.model.config.VisitorDefinition)6 JFieldRef (com.helger.jcodemodel.JFieldRef)6 ArrayList (java.util.ArrayList)6 BundleHelper (org.androidannotations.helper.BundleHelper)6