@Override public ComponentImpl add(final Dependency ... dependencies) { getExecutor().execute(() -> { List<DependencyContext> instanceBoundDeps = new ArrayList<>(); for (Dependency d : dependencies) { DependencyContext dc = (DependencyContext) d; if (dc.getComponentContext() != null) { m_logger.err("%s can't be added to %s (dependency already added to component %s).", dc, ComponentImpl.this, dc.getComponentContext()); continue; } m_dependencyEvents.put(dc, new ConcurrentSkipListSet<Event>()); m_dependencies.add(dc); generateNameBasedOnServiceAndProperties(); dc.setComponentContext(ComponentImpl.this); if (!(m_state == ComponentState.INACTIVE)) { dc.setInstanceBound(true); instanceBoundDeps.add(dc); } } startDependencies(instanceBoundDeps); handleChange(); }); return this; }