Search in sources :

Example 31 with CtTypeParameterReference

use of spoon.reflect.reference.CtTypeParameterReference in project spoon by INRIA.

the class MetamodelProperty method getItemValueType.

private static CtTypeReference<?> getItemValueType(CtTypeReference<?> valueType) {
    ContainerKind valueContainerType = containerKindOf(valueType.getActualClass());
    if (valueContainerType == ContainerKind.SINGLE) {
        return null;
    }
    CtTypeReference<?> itemValueType;
    if (valueContainerType == ContainerKind.MAP) {
        if (String.class.getName().equals(valueType.getActualTypeArguments().get(0).getQualifiedName()) == false) {
            throw new SpoonException("Unexpected container of type: " + valueType.toString());
        }
        itemValueType = valueType.getActualTypeArguments().get(1);
    } else {
        // List or Set
        itemValueType = valueType.getActualTypeArguments().get(0);
    }
    if (itemValueType instanceof CtTypeParameterReference) {
        itemValueType = ((CtTypeParameterReference) itemValueType).getBoundingType();
        if (itemValueType == null) {
            itemValueType = valueType.getFactory().Type().OBJECT;
        }
    }
    return itemValueType;
}
Also used : CtTypeParameterReference(spoon.reflect.reference.CtTypeParameterReference) SpoonException(spoon.SpoonException) ContainerKind(spoon.reflect.meta.ContainerKind)

Example 32 with CtTypeParameterReference

use of spoon.reflect.reference.CtTypeParameterReference in project spoon by INRIA.

the class MetamodelProperty method setValueType.

void setValueType(CtTypeReference<?> valueType) {
    Factory f = valueType.getFactory();
    if (valueType instanceof CtTypeParameterReference) {
        valueType = ((CtTypeParameterReference) valueType).getBoundingType();
        if (valueType == null) {
            valueType = f.Type().OBJECT;
        }
    }
    if (valueType.isImplicit()) {
        valueType = valueType.clone();
        // never return type  with implicit==true, such type is then not pretty printed
        valueType.setImplicit(false);
    }
    this.valueType = valueType;
    this.valueContainerType = containerKindOf(valueType.getActualClass());
    if (valueContainerType != ContainerKind.SINGLE) {
        itemValueType = getItemValueType(valueType);
    } else {
        itemValueType = valueType;
    }
}
Also used : CtTypeParameterReference(spoon.reflect.reference.CtTypeParameterReference) Factory(spoon.reflect.factory.Factory)

Aggregations

CtTypeParameterReference (spoon.reflect.reference.CtTypeParameterReference)32 CtTypeReference (spoon.reflect.reference.CtTypeReference)11 Test (org.junit.Test)10 CtTypeParameter (spoon.reflect.declaration.CtTypeParameter)10 ArrayList (java.util.ArrayList)6 Factory (spoon.reflect.factory.Factory)4 Launcher (spoon.Launcher)3 SpoonException (spoon.SpoonException)3 CtWildcardReference (spoon.reflect.reference.CtWildcardReference)3 Annotation (org.eclipse.jdt.internal.compiler.ast.Annotation)2 TypeVariableBinding (org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding)2 WildcardBinding (org.eclipse.jdt.internal.compiler.lookup.WildcardBinding)2 CtMethod (spoon.reflect.declaration.CtMethod)2 CtType (spoon.reflect.declaration.CtType)2 CtArrayTypeReference (spoon.reflect.reference.CtArrayTypeReference)2 CtIntersectionTypeReference (spoon.reflect.reference.CtIntersectionTypeReference)2 CtScanner (spoon.reflect.visitor.CtScanner)2 MainTest (spoon.test.main.MainTest)2 ModelUtils.createFactory (spoon.testing.utils.ModelUtils.createFactory)2 List (java.util.List)1