@Override final protected void unsatisfiedDependencies(final PicoContainer container, final Set<Type> unsatisfiableDependencyTypes, final List<AccessibleObject> unsatisfiableDependencyMembers) { final StringBuilder sb = new StringBuilder(this.getComponentImplementation().getName()) .append(" has unsatisfied dependency for fields ["); for (int i = 0; i < unsatisfiableDependencyMembers.size(); i++) { final AccessibleObject accessibleObject = unsatisfiableDependencyMembers.get(i); final Field m = (Field) accessibleObject; sb .append(" ") .append(m.getDeclaringClass().getName()) .append(".") .append(m.getName()) .append(" (field's type is ") .append(m.getType().getName()) .append(") "); } final String container1 = container.toString(); throw new UnsatisfiableDependenciesException(sb.toString() + "] from " + container1); }
throw new PicoCompositionException(conflicts.size() + " satisfiable constructors is too many for '"+getComponentImplementation()+"'. Constructor List:" + conflicts.toString().replace(getComponentImplementation().getName(),"<init>").replace("public <i","<i")); } else if (greediestConstructor == null && !unsatisfiableDependencyTypes.isEmpty()) { throw new UnsatisfiableDependenciesException(this.getComponentImplementation().getName() + " has unsatisfied dependency '" + unsatisfiedDependency + "' for constructor '" + unsatisfiedConstructor + "'" + " from " + container);
throw new PicoCompositionException(conflicts.size() + " satisfiable constructors is too many for '"+getComponentImplementation()+"'. Constructor List:" + conflicts.toString().replace(getComponentImplementation().getName(),"<init>").replace("public <i","<i")); } else if (greediestConstructor == null && !unsatisfiableDependencyTypes.isEmpty()) { throw new UnsatisfiableDependenciesException(this.getComponentImplementation().getName() + " has unsatisfied dependency '" + unsatisfiedDependency + "' for constructor '" + unsatisfiedConstructor + "'" + " from " + container);
@Test public void testUnsatisfiableDependenciesExceptionGivesUnsatisfiedDependencyTypes() { MutablePicoContainer pico = createPicoContainer(null); pico.setName("parent"); // D depends on E and B pico.addComponent(ComponentD.class); // first - do not register any dependency // should yield first unsatisfied dependency try { pico.getComponent(ComponentD.class); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { String message = e.getMessage().replace("com.picocontainer.tck.AbstractPicoContainerTest$Component", ""); assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:1<|", message); } // now register only first dependency // should yield second unsatisfied dependency pico.addComponent(ComponentE.class); try { pico.getComponent(ComponentD.class); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { String message = e.getMessage().replace("com.picocontainer.tck.AbstractPicoContainerTest$Component", ""); assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:2<|", message); } }
@Override final protected void unsatisfiedDependencies(final PicoContainer container, final Set<Type> unsatisfiableDependencyTypes, final List<AccessibleObject> unsatisfiableDependencyMembers) { final StringBuilder sb = new StringBuilder(this.getComponentImplementation().getName()) .append(" has unsatisfied dependency for fields ["); for (int i = 0; i < unsatisfiableDependencyMembers.size(); i++) { final AccessibleObject accessibleObject = unsatisfiableDependencyMembers.get(i); final Field m = (Field) accessibleObject; sb .append(" ") .append(m.getDeclaringClass().getName()) .append(".") .append(m.getName()) .append(" (field's type is ") .append(m.getType().getName()) .append(") "); } final String container1 = container.toString(); throw new UnsatisfiableDependenciesException(sb.toString() + "] from " + container1); }
public void verify(final PicoContainer container, final ComponentAdapter<?> forAdapter, final Type expectedType, final NameBinding expectedNameBinding, final boolean useNames, final Annotation binding) { final ComponentAdapter<?> componentAdapter = resolveAdapter(container, forAdapter, Generic.get((Class<?>) expectedType), expectedNameBinding, useNames, binding); if (componentAdapter == null) { final Set<Type> set = new HashSet<Type>(); set.add(expectedType); throw new AbstractInjector.UnsatisfiableDependenciesException( forAdapter.getComponentImplementation().getName() + " has unsatisfied dependencies: " + set + " from " + container); } componentAdapter.verify(container); }
public void verify(final PicoContainer container, final ComponentAdapter<?> forAdapter, final Type expectedType, final NameBinding expectedNameBinding, final boolean useNames, final Annotation binding) { final ComponentAdapter<?> componentAdapter = resolveAdapter(container, forAdapter, Generic.get((Class<?>) expectedType), expectedNameBinding, useNames, binding); if (componentAdapter == null) { final Set<Type> set = new HashSet<Type>(); set.add(expectedType); throw new AbstractInjector.UnsatisfiableDependenciesException( forAdapter.getComponentImplementation().getName() + " has unsatisfied dependencies: " + set + " from " + container); } componentAdapter.verify(container); }
@Override protected void unsatisfiedDependencies(final PicoContainer container, final Set<Type> unsatisfiableDependencyTypes, final List<AccessibleObject> unsatisfiableDependencyMembers) { if (!optional) { throw new UnsatisfiableDependenciesException(this.getComponentImplementation().getName() + " has unsatisfied dependencies " + unsatisfiableDependencyTypes + " for members " + unsatisfiableDependencyMembers + " from " + container); } }
@Override protected void unsatisfiedDependencies(final PicoContainer container, final Set<Type> unsatisfiableDependencyTypes, final List<AccessibleObject> unsatisfiableDependencyMembers) { if (!optional) { throw new UnsatisfiableDependenciesException(this.getComponentImplementation().getName() + " has unsatisfied dependencies " + unsatisfiableDependencyTypes + " for members " + unsatisfiableDependencyMembers + " from " + container); } }
@Test public void testNullValuesDoNotInject() { MutablePicoContainer pico = createPicoContainer(null); pico.addComponent(ConstantParameterTestService.class, ConstantParameterTestService.class, new ConstantParameter(null)); try { ConstantParameterTestService service = pico.getComponent(ConstantParameterTestService.class); fail("Should have thrown unsatisfiable dependencies exception. Instead got " + service + " as a return value"); } catch (UnsatisfiableDependenciesException e) { assertNotNull(e.getMessage()); } }
@Override protected void unsatisfiedDependencies(final PicoContainer container, final Set<Type> unsatisfiableDependencyTypes, final List<AccessibleObject> unsatisfiableDependencyMembers) { if (!optional) { throw new UnsatisfiableDependenciesException(this.getComponentImplementation().getName() + " has unsatisfied dependencies " + unsatisfiableDependencyTypes + " for members " + unsatisfiableDependencyMembers + " from " + container); } }
@Test public void testGettingComponentWithMissingDependencyFails() throws PicoException { MutablePicoContainer picoContainer = createPicoContainerWithDependsOnTouchableOnly(); picoContainer.setName("parent"); try { picoContainer.getComponent(DependsOnTouchable.class); fail("should need a Touchable"); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { String message = e.getMessage().replace("com.picocontainer.testmodel.", ""); assertEquals("DependsOnTouchable has unsatisfied dependency 'interface Touchable' for constructor 'public DependsOnTouchable(Touchable)' from parent:1<|", message); } }
@Test public void testUnsatisfiableDependenciesExceptionGivesVerboseEnoughErrorMessage() { MutablePicoContainer pico = createPicoContainer(null); pico.setName("parent"); pico.addComponent(ComponentD.class); try { pico.getComponent(ComponentD.class); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { String msg = e.getMessage().replace("com.picocontainer.tck.AbstractPicoContainerTest$Component", ""); assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:1<|", msg); } }
@Override protected void unsatisfiedDependencies(final PicoContainer container, final Set<Type> unsatisfiableDependencyTypes, final List<AccessibleObject> unsatisfiableDependencyMembers) { if (!optional) { throw new UnsatisfiableDependenciesException(this.getComponentImplementation().getName() + " has unsatisfied dependencies " + unsatisfiableDependencyTypes + " for members " + unsatisfiableDependencyMembers + " from " + container); } }