- Component(I instance, Runnable init, Runnable close, Set<Dependency<?>> dependencies,
- Set<Class<? super I>> classes) {
+ Component(Consumer<Component<?>> register, I instance, Runnable init, Runnable close,
+ Set<Dependency<?>> dependencies, Set<Class<? super I>> classes) {
// types
Map<Class<? super I>, PublishedType<? super I>> types = new HashMap<>(classes.size());
for (Class<? super I> clss : classes) {
// types
Map<Class<? super I>, PublishedType<? super I>> types = new HashMap<>(classes.size());
for (Class<? super I> clss : classes) {
- if (!clss.isAssignableFrom(instance.getClass()))
- throw new IllegalArgumentException(
- "Type " + clss.getName() + " is not compatible with " + instance.getClass().getName());
+// if (!clss.isAssignableFrom(instance.getClass()))
+// throw new IllegalArgumentException(
+// "Type " + clss.getName() + " is not compatible with " + instance.getClass().getName());
types.put(clss, new PublishedType<>(this, clss));
}
this.types = Collections.unmodifiableMap(types);
types.put(clss, new PublishedType<>(this, clss));
}
this.types = Collections.unmodifiableMap(types);
CompletableFuture<Void> dependenciesActivated(Void v) {
Set<CompletableFuture<?>> constraints = new HashSet<>(this.dependencies.size());
for (Dependency<?> dependency : this.dependencies) {
CompletableFuture<Void> dependenciesActivated(Void v) {
Set<CompletableFuture<?>> constraints = new HashSet<>(this.dependencies.size());
for (Dependency<?> dependency : this.dependencies) {
CompletableFuture<Void> dependantsDeactivated(Void v) {
Set<CompletableFuture<?>> constraints = new HashSet<>(this.dependants.size());
for (Dependency<?> dependant : this.dependants) {
CompletableFuture<Void> dependantsDeactivated(Void v) {
Set<CompletableFuture<?>> constraints = new HashSet<>(this.dependants.size());
for (Dependency<?> dependant : this.dependants) {
private CompletableFuture<T> value;
public PublishedType(Component<? extends T> component, Class<T> clss) {
this.clss = clss;
this.component = component;
value = CompletableFuture.completedFuture((T) component.instance);
private CompletableFuture<T> value;
public PublishedType(Component<? extends T> component, Class<T> clss) {
this.clss = clss;
this.component = component;
value = CompletableFuture.completedFuture((T) component.instance);
- Component<I> component = new Component<I>(instance, init, close, dependencies, types);
+ Component<I> component = new Component<I>(register, instance, init, close, dependencies, types);
for (Dependency<?> dependency : dependencies) {
dependency.type.getPublisher().addDependant(dependency);
}
for (Dependency<?> dependency : dependencies) {
dependency.type.getPublisher().addDependant(dependency);
}