Search in sources :

Example 6 with CtWildcardReference

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

the class LambdaTest method testGetDeclarationOnTypeParameterFromLambda.

@Test
public void testGetDeclarationOnTypeParameterFromLambda() {
    List<CtTypeParameterReference> listCtTPR = launcher.getModel().getElements(new TypeFilter<>(CtTypeParameterReference.class));
    for (CtTypeParameterReference typeParameterReference : listCtTPR) {
        if (!(typeParameterReference instanceof CtWildcardReference) && typeParameterReference.getDeclaration() == null) {
            System.err.println(typeParameterReference.getSimpleName() + " from parent " + typeParameterReference.getParent(CtClass.class).getPosition() + "  has null declaration");
            typeParameterReference.getDeclaration();
            fail();
        }
    }
}
Also used : CtTypeParameterReference(spoon.reflect.reference.CtTypeParameterReference) CtWildcardReference(spoon.reflect.reference.CtWildcardReference) Test(org.junit.Test)

Example 7 with CtWildcardReference

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

the class GenericsTest method testDiamondComplexGenericsRxJava.

@Test
public void testDiamondComplexGenericsRxJava() {
    Launcher launcher = new Launcher();
    launcher.addInputResource("./src/test/java/spoon/test/generics/testclasses/rxjava/");
    launcher.setSourceOutputDirectory("./target/spooned-rxjava");
    launcher.run();
    Factory factory = launcher.getFactory();
    List<CtConstructorCall> invocations = factory.getModel().getElements(new TypeFilter<>(CtConstructorCall.class));
    boolean invocationDetected = false;
    for (CtConstructorCall call : invocations) {
        if (call.getType().getSimpleName().equals("ToNotificationSubscriber")) {
            assertEquals(1, call.getType().getActualTypeArguments().size());
            CtTypeReference actualTA = call.getType().getActualTypeArguments().get(0);
            assertTrue(actualTA instanceof CtWildcardReference);
            assertEquals("?", actualTA.getSimpleName());
            assertTrue(((CtWildcardReference) actualTA).isDefaultBoundingType());
            invocationDetected = true;
        }
    }
    canBeBuilt("./target/spooned-rxjava", 8);
    assertTrue(invocationDetected);
}
Also used : CtWildcardReference(spoon.reflect.reference.CtWildcardReference) CtConstructorCall(spoon.reflect.code.CtConstructorCall) CtTypeReference(spoon.reflect.reference.CtTypeReference) Launcher(spoon.Launcher) ModelUtils.createFactory(spoon.testing.utils.ModelUtils.createFactory) Factory(spoon.reflect.factory.Factory) MainTest(spoon.test.main.MainTest) Test(org.junit.Test)

Example 8 with CtWildcardReference

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

the class RoleHandlersGenerator method fixValueType.

private CtTypeReference<?> fixValueType(CtTypeReference<?> valueType) {
    valueType = valueType.clone();
    if (valueType instanceof CtTypeParameterReference) {
        if (valueType instanceof CtWildcardReference) {
            CtTypeReference<?> boundingType = ((CtTypeParameterReference) valueType).getBoundingType();
            if (boundingType instanceof CtTypeParameterReference) {
                ((CtTypeParameterReference) valueType).setBoundingType(null);
            }
            return valueType;
        }
        CtTypeParameterReference tpr = (CtTypeParameterReference) valueType;
        return getFactory().createWildcardReference();
    }
    for (int i = 0; i < valueType.getActualTypeArguments().size(); i++) {
        valueType.getActualTypeArguments().set(i, fixValueType(valueType.getActualTypeArguments().get(i)));
    }
    valueType = valueType.box();
    return valueType;
}
Also used : CtTypeParameterReference(spoon.reflect.reference.CtTypeParameterReference) CtWildcardReference(spoon.reflect.reference.CtWildcardReference)

Example 9 with CtWildcardReference

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

the class MethodTypingContext method isSameMethodFormalTypeParameter.

private boolean isSameMethodFormalTypeParameter(CtTypeParameter scopeParam, CtTypeParameter superParam) {
    CtTypeReference<?> scopeBound = getBound(scopeParam);
    CtTypeReference<?> superBound = getBound(superParam);
    int idxOfScopeBoundTypeParam = getIndexOfTypeParam(scopeParam.getTypeParameterDeclarer(), scopeBound);
    if (idxOfScopeBoundTypeParam >= 0) {
        int idxOfSuperBoundTypeParam = getIndexOfTypeParam(superParam.getTypeParameterDeclarer(), superBound);
        if (idxOfSuperBoundTypeParam >= 0) {
            /*
				 * Both type parameters have bound defined as sibling type parameter.
				 * Do not try to adaptType, because it would end with StackOverflowError
				 * They are same formal type parameters if index is same
				 */
            return idxOfScopeBoundTypeParam == idxOfSuperBoundTypeParam;
        }
    }
    if (scopeBound.getActualTypeArguments().size() != superBound.getActualTypeArguments().size()) {
        return false;
    }
    for (int i = 0; i < scopeBound.getActualTypeArguments().size(); i++) {
        CtTypeReference scopeBoundATArg = scopeBound.getActualTypeArguments().get(i);
        CtTypeReference superBoundATArg = superBound.getActualTypeArguments().get(i);
        if (scopeBoundATArg instanceof CtWildcardReference && superBoundATArg instanceof CtWildcardReference) {
            CtWildcardReference scopeBoundWildcard = (CtWildcardReference) scopeBoundATArg;
            // T extends Comparable<? super T>
            if (scopeBoundWildcard.getBoundingType().equals(scopeMethod.getFactory().Type().getDefaultBoundingType())) {
                return true;
            }
        }
    }
    CtTypeReference<?> superBoundAdapted = adaptType(superBound);
    if (superBoundAdapted == null) {
        return false;
    }
    return scopeBound.getQualifiedName().equals(superBoundAdapted.getQualifiedName());
}
Also used : CtWildcardReference(spoon.reflect.reference.CtWildcardReference) CtTypeReference(spoon.reflect.reference.CtTypeReference)

Aggregations

CtWildcardReference (spoon.reflect.reference.CtWildcardReference)9 CtTypeReference (spoon.reflect.reference.CtTypeReference)4 CtTypeParameterReference (spoon.reflect.reference.CtTypeParameterReference)3 Test (org.junit.Test)2 Factory (spoon.reflect.factory.Factory)2 AmplificationHelper (fr.inria.diversify.utils.AmplificationHelper)1 Collections (java.util.Collections)1 List (java.util.List)1 Collectors (java.util.stream.Collectors)1 Launcher (spoon.Launcher)1 CtConstructorCall (spoon.reflect.code.CtConstructorCall)1 CtExpression (spoon.reflect.code.CtExpression)1 CtTypeAccess (spoon.reflect.code.CtTypeAccess)1 CtMethod (spoon.reflect.declaration.CtMethod)1 CtParameter (spoon.reflect.declaration.CtParameter)1 CtType (spoon.reflect.declaration.CtType)1 CtExecutableReference (spoon.reflect.reference.CtExecutableReference)1 CtWildcardReferenceImpl (spoon.support.reflect.reference.CtWildcardReferenceImpl)1 TypeReferenceRuntimeBuilderContext (spoon.support.visitor.java.internal.TypeReferenceRuntimeBuilderContext)1 MainTest (spoon.test.main.MainTest)1