@Test public void testBackLinkAnalysis() { ASTType astType = astClassFactory.getType(A.class); InjectionNode injectionNode = analyzer.analyze(astType, astType, analysisContext); injectionNode.addAspect(VariableBuilder.class, variableInjectionBuilderProvider.get()); // A -> B && A -> E assertEquals(1, countMethodInjectionPoints(injectionNode.getAspect(ASTInjectionAspect.class))); MethodInjectionPoint bInjectionPoint = injectionNode .getAspect(ASTInjectionAspect.class) .getGroups() .get(1) .getMethodInjectionPoints() .iterator() .next(); assertEquals(2, bInjectionPoint.getInjectionNodes().size()); // A -> B InjectionNode bInjectionNode = bInjectionPoint.getInjectionNodes().get(0); assertTrue(isProxyRequired(bInjectionNode)); assertEquals(BImpl.class.getCanonicalName(), bInjectionNode.getClassName()); // A -> E InjectionNode eInjectionNode = bInjectionPoint.getInjectionNodes().get(1); assertFalse(isProxyRequired(eInjectionNode)); assertEquals(E.class.getCanonicalName(), eInjectionNode.getClassName()); // B -> C assertEquals(1, countFieldInjectionPoints(bInjectionNode.getAspect(ASTInjectionAspect.class))); FieldInjectionPoint cInjectionPoint = bInjectionNode .getAspect(ASTInjectionAspect.class) .getGroups() .get(1) .getFieldInjectionPoints() .iterator() .next(); InjectionNode cInjectionNode = cInjectionPoint.getInjectionNode(); assertFalse(isProxyRequired(cInjectionNode)); assertEquals(C.class.getCanonicalName(), cInjectionNode.getClassName()); // B -> F ConstructorInjectionPoint fNonBackLinkInjectionPoint = bInjectionNode.getAspect(ASTInjectionAspect.class).getConstructorInjectionPoint(); assertEquals(1, fNonBackLinkInjectionPoint.getInjectionNodes().size()); InjectionNode fInjectionNode = fNonBackLinkInjectionPoint.getInjectionNodes().get(0); assertFalse(isProxyRequired(fInjectionNode)); assertEquals(F.class.getCanonicalName(), fInjectionNode.getClassName()); // E -> F ConstructorInjectionPoint fNonBackLinkInjectionPoint2 = eInjectionNode.getAspect(ASTInjectionAspect.class).getConstructorInjectionPoint(); assertEquals(1, fNonBackLinkInjectionPoint2.getInjectionNodes().size()); InjectionNode fInjectionNode2 = fNonBackLinkInjectionPoint2.getInjectionNodes().get(0); assertFalse(isProxyRequired(fInjectionNode2)); // C -> D assertEquals(1, countFieldInjectionPoints(cInjectionNode.getAspect(ASTInjectionAspect.class))); FieldInjectionPoint dInjectionPoint = cInjectionNode .getAspect(ASTInjectionAspect.class) .getGroups() .get(1) .getFieldInjectionPoints() .iterator() .next(); InjectionNode dInjectionNode = dInjectionPoint.getInjectionNode(); assertFalse(isProxyRequired(dInjectionNode)); assertEquals(D.class.getCanonicalName(), dInjectionNode.getClassName()); // D -> B back link ConstructorInjectionPoint bBackLinkInjectionPoint = dInjectionNode.getAspect(ASTInjectionAspect.class).getConstructorInjectionPoint(); assertEquals(1, bBackLinkInjectionPoint.getInjectionNodes().size()); InjectionNode bBackLinkInjectionNode = bBackLinkInjectionPoint.getInjectionNodes().get(0); assertEquals(BImpl.class.getCanonicalName(), bBackLinkInjectionNode.getClassName()); assertTrue(isProxyRequired(bBackLinkInjectionNode)); // B -> F and E -> F difference assertNotSame(fInjectionNode, fInjectionNode2); assertFalse(fInjectionNode.equals(fInjectionNode2)); }