Search in sources :

Example 1 with MethodCallTarget

use of com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget in project ArchUnit by TNG.

the class AccessTargetNewerJavaVersionTest method function_resolve_member.

@Test
public void function_resolve_member() {
    @SuppressWarnings("unused")
    class Origin {

        String access() {
            Data_function_resolve_member.Target target = new Data_function_resolve_member.Target();
            Supplier<Data_function_resolve_member.Target> supplier = Data_function_resolve_member.Target::new;
            Consumer<Data_function_resolve_member.Target> consumer = Data_function_resolve_member.Target::method;
            target.method();
            return target.field;
        }
    }
    JavaClass targetClass = new ClassFileImporter().importClasses(Origin.class, Data_function_resolve_member.Target.class).get(Data_function_resolve_member.Target.class);
    MethodCallTarget methodCallTarget = findTargetWithType(targetClass.getAccessesToSelf(), MethodCallTarget.class);
    assertThat(AccessTarget.Functions.RESOLVE_MEMBER.apply(methodCallTarget)).contains(methodCallTarget.resolveMember().get());
    assertThat(AccessTarget.Functions.RESOLVE.apply(methodCallTarget)).isEqualTo(ImmutableSet.of(methodCallTarget.resolveMember().get()));
    assertThat(CodeUnitAccessTarget.Functions.RESOLVE_MEMBER.apply(methodCallTarget)).contains(methodCallTarget.resolveMember().get());
    assertThat(CodeUnitAccessTarget.Functions.RESOLVE.apply(methodCallTarget)).isEqualTo(ImmutableSet.of(methodCallTarget.resolveMember().get()));
    assertThat(MethodCallTarget.Functions.RESOLVE_MEMBER.apply(methodCallTarget)).contains(methodCallTarget.resolveMember().get());
    assertThat(MethodCallTarget.Functions.RESOLVE.apply(methodCallTarget)).isEqualTo(ImmutableSet.of(methodCallTarget.resolveMember().get()));
    MethodReferenceTarget methodReferenceTarget = findTargetWithType(targetClass.getAccessesToSelf(), MethodReferenceTarget.class);
    assertThat(MethodReferenceTarget.Functions.RESOLVE_MEMBER.apply(methodReferenceTarget)).contains(methodReferenceTarget.resolveMember().get());
    ConstructorCallTarget constructorCallTarget = findTargetWithType(targetClass.getAccessesToSelf(), ConstructorCallTarget.class);
    assertThat(ConstructorCallTarget.Functions.RESOLVE_MEMBER.apply(constructorCallTarget)).contains(constructorCallTarget.resolveMember().get());
    assertThat(ConstructorCallTarget.Functions.RESOLVE.apply(constructorCallTarget)).isEqualTo(ImmutableSet.of(constructorCallTarget.resolveMember().get()));
    ConstructorReferenceTarget constructorReferenceTarget = findTargetWithType(targetClass.getAccessesToSelf(), ConstructorReferenceTarget.class);
    assertThat(ConstructorReferenceTarget.Functions.RESOLVE_MEMBER.apply(constructorReferenceTarget)).contains(constructorReferenceTarget.resolveMember().get());
    FieldAccessTarget fieldAccessTarget = findTargetWithType(targetClass.getAccessesToSelf(), FieldAccessTarget.class);
    assertThat(FieldAccessTarget.Functions.RESOLVE_MEMBER.apply(fieldAccessTarget)).contains(fieldAccessTarget.resolveMember().get());
    assertThat(FieldAccessTarget.Functions.RESOLVE.apply(fieldAccessTarget)).isEqualTo(ImmutableSet.of(fieldAccessTarget.resolveMember().get()));
}
Also used : MethodCallTarget(com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget) ConstructorReferenceTarget(com.tngtech.archunit.core.domain.AccessTarget.ConstructorReferenceTarget) FieldAccessTarget(com.tngtech.archunit.core.domain.AccessTarget.FieldAccessTarget) ClassFileImporter(com.tngtech.archunit.core.importer.ClassFileImporter) CodeUnitAccessTarget(com.tngtech.archunit.core.domain.AccessTarget.CodeUnitAccessTarget) ConstructorCallTarget(com.tngtech.archunit.core.domain.AccessTarget.ConstructorCallTarget) MethodReferenceTarget(com.tngtech.archunit.core.domain.AccessTarget.MethodReferenceTarget) MethodCallTarget(com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget) FieldAccessTarget(com.tngtech.archunit.core.domain.AccessTarget.FieldAccessTarget) ConstructorReferenceTarget(com.tngtech.archunit.core.domain.AccessTarget.ConstructorReferenceTarget) MethodReferenceTarget(com.tngtech.archunit.core.domain.AccessTarget.MethodReferenceTarget) ConstructorCallTarget(com.tngtech.archunit.core.domain.AccessTarget.ConstructorCallTarget) Test(org.junit.Test)

Example 2 with MethodCallTarget

use of com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget in project ArchUnit by TNG.

the class ClassFileImporterAccessesTest method imports_method_calls_on_overridden_external_class.

@Test
public void imports_method_calls_on_overridden_external_class() {
    JavaClass classThatCallsExternalMethod = new ClassFileImporter().importUrl(getClass().getResource("testexamples/callimport")).get(ExternalOverriddenMethodCall.class);
    JavaMethodCall call = getOnlyElement(classThatCallsExternalMethod.getMethodCallsFromSelf());
    assertThatCall(call).isFrom(classThatCallsExternalMethod.getCodeUnitWithParameterTypes("call")).inLineNumber(9);
    MethodCallTarget target = call.getTarget();
    assertThat(target.getFullName()).isEqualTo(ChildClass.class.getName() + ".overrideMe()");
    assertThat(resolve(target).getFullName()).isEqualTo(ChildClass.class.getName() + ".overrideMe()");
    assertThat(reflect(target)).isEqualTo(method(ChildClass.class, "overrideMe"));
}
Also used : MethodCallTarget(com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget) JavaClass(com.tngtech.archunit.core.domain.JavaClass) ChildClass(com.tngtech.archunit.core.importer.testexamples.complexexternal.ChildClass) JavaMethodCall(com.tngtech.archunit.core.domain.JavaMethodCall) Test(org.junit.Test)

Example 3 with MethodCallTarget

use of com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget in project ArchUnit by TNG.

the class ClassFileImporterAccessesTest method imports_method_calls_on_external_class.

@Test
public void imports_method_calls_on_external_class() {
    JavaClass classThatCallsExternalMethod = new ClassFileImporter().importUrl(getClass().getResource("testexamples/callimport")).get(CallsExternalMethod.class);
    JavaMethodCall call = getOnlyElement(classThatCallsExternalMethod.getMethodCallsFromSelf());
    assertThatCall(call).isFrom(classThatCallsExternalMethod.getCodeUnitWithParameterTypes("getString")).inLineNumber(7);
    MethodCallTarget target = call.getTarget();
    assertThat(target.getOwner().reflect()).isEqualTo(ArrayList.class);
    assertThat(target.getFullName()).isEqualTo(ArrayList.class.getName() + ".toString()");
}
Also used : MethodCallTarget(com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget) JavaClass(com.tngtech.archunit.core.domain.JavaClass) JavaMethodCall(com.tngtech.archunit.core.domain.JavaMethodCall) Test(org.junit.Test)

Example 4 with MethodCallTarget

use of com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget in project ArchUnit by TNG.

the class ClassFileImporterAccessesTest method imports_shadowed_and_superclass_method_calls.

@Test
public void imports_shadowed_and_superclass_method_calls() {
    JavaClasses classes = new ClassFileImporter().importUrl(getClass().getResource("testexamples/hierarchicalmethodcall"));
    JavaClass classThatCallsMethodOfSuperclass = classes.get(CallOfSuperAndSubclassMethod.class);
    JavaClass superclassWithCalledMethod = classes.get(SuperclassWithCalledMethod.class);
    JavaClass subClassWithCalledMethod = classes.get(SubclassWithCalledMethod.class);
    Set<JavaMethodCall> calls = classThatCallsMethodOfSuperclass.getMethodCallsFromSelf();
    assertThat(calls).hasSize(2);
    JavaCodeUnit callSuperclassMethod = classThatCallsMethodOfSuperclass.getCodeUnitWithParameterTypes(CallOfSuperAndSubclassMethod.callSuperclassMethod);
    JavaMethod expectedSuperclassMethod = superclassWithCalledMethod.getMethod(SuperclassWithCalledMethod.method);
    MethodCallTarget expectedSuperclassCall = newMethodCallTargetBuilder().withOwner(subClassWithCalledMethod).withName(expectedSuperclassMethod.getName()).withParameters(expectedSuperclassMethod.getRawParameterTypes()).withReturnType(expectedSuperclassMethod.getRawReturnType()).withMember(() -> Optional.of(expectedSuperclassMethod)).build();
    assertThatCall(getOnlyByCaller(calls, callSuperclassMethod)).isFrom(callSuperclassMethod).isTo(expectedSuperclassCall).inLineNumber(CallOfSuperAndSubclassMethod.callSuperclassLineNumber);
    JavaCodeUnit callSubclassMethod = classThatCallsMethodOfSuperclass.getCodeUnitWithParameterTypes(CallOfSuperAndSubclassMethod.callSubclassMethod);
    assertThatCall(getOnlyByCaller(calls, callSubclassMethod)).isFrom(callSubclassMethod).isTo(subClassWithCalledMethod.getMethod(SubclassWithCalledMethod.maskedMethod)).inLineNumber(CallOfSuperAndSubclassMethod.callSubclassLineNumber);
}
Also used : MethodCallTarget(com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget) JavaClasses(com.tngtech.archunit.core.domain.JavaClasses) JavaClass(com.tngtech.archunit.core.domain.JavaClass) JavaMethod(com.tngtech.archunit.core.domain.JavaMethod) JavaCodeUnit(com.tngtech.archunit.core.domain.JavaCodeUnit) JavaMethodCall(com.tngtech.archunit.core.domain.JavaMethodCall) Test(org.junit.Test)

Example 5 with MethodCallTarget

use of com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget in project ArchUnit by TNG.

the class ClassFileImporterAccessesTest method imports_method_calls_that_return_Arrays.

@Test
public void imports_method_calls_that_return_Arrays() {
    JavaClass classThatCallsMethodReturningArray = new ClassFileImporter().importUrl(getClass().getResource("testexamples/callimport")).get(CallsMethodReturningArray.class);
    MethodCallTarget target = getOnlyElement(classThatCallsMethodReturningArray.getMethodCallsFromSelf()).getTarget();
    assertThatType(target.getOwner()).matches(CallsMethodReturningArray.SomeEnum.class);
    assertThatType(target.getRawReturnType()).matches(CallsMethodReturningArray.SomeEnum[].class);
}
Also used : MethodCallTarget(com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget) JavaClass(com.tngtech.archunit.core.domain.JavaClass) CallsMethodReturningArray(com.tngtech.archunit.core.importer.testexamples.callimport.CallsMethodReturningArray) Test(org.junit.Test)

Aggregations

MethodCallTarget (com.tngtech.archunit.core.domain.AccessTarget.MethodCallTarget)9 Test (org.junit.Test)8 JavaClass (com.tngtech.archunit.core.domain.JavaClass)5 JavaMethodCall (com.tngtech.archunit.core.domain.JavaMethodCall)5 ConstructorCallTarget (com.tngtech.archunit.core.domain.AccessTarget.ConstructorCallTarget)2 ConstructorReferenceTarget (com.tngtech.archunit.core.domain.AccessTarget.ConstructorReferenceTarget)2 FieldAccessTarget (com.tngtech.archunit.core.domain.AccessTarget.FieldAccessTarget)2 MethodReferenceTarget (com.tngtech.archunit.core.domain.AccessTarget.MethodReferenceTarget)2 JavaMethod (com.tngtech.archunit.core.domain.JavaMethod)2 ClassFileImporter (com.tngtech.archunit.core.importer.ClassFileImporter)2 ImmutableSet (com.google.common.collect.ImmutableSet)1 CodeUnitAccessTarget (com.tngtech.archunit.core.domain.AccessTarget.CodeUnitAccessTarget)1 CodeUnitCallTarget (com.tngtech.archunit.core.domain.AccessTarget.CodeUnitCallTarget)1 JavaClasses (com.tngtech.archunit.core.domain.JavaClasses)1 JavaCodeUnit (com.tngtech.archunit.core.domain.JavaCodeUnit)1 JavaMethodCallBuilder (com.tngtech.archunit.core.importer.DomainBuilders.JavaMethodCallBuilder)1 CallsMethodReturningArray (com.tngtech.archunit.core.importer.testexamples.callimport.CallsMethodReturningArray)1 ChildClass (com.tngtech.archunit.core.importer.testexamples.complexexternal.ChildClass)1 ExpectedMethod (com.tngtech.archunit.core.importer.testexamples.methodresolution.ExpectedMethod)1 OnlyLeftAncestorOverridesRootMethod (com.tngtech.archunit.core.importer.testexamples.methodresolution.OnlyLeftAncestorOverridesRootMethod)1