All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.softicar.platform.common.code.classpath.metadata.TransitivelyRelatedClassesFinder Maven / Gradle / Ivy

Go to download

The SoftiCAR Platform is a lightweight, Java-based library to create interactive business web applications.

There is a newer version: 50.0.0
Show newest version
package com.softicar.platform.common.code.classpath.metadata;

import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Deque;
import java.util.HashSet;
import java.util.Set;
import java.util.function.Function;

class TransitivelyRelatedClassesFinder {

	private final Function, Collection>> directlyRelatedClassesGetter;

	public TransitivelyRelatedClassesFinder(Function, Collection>> directlyRelatedClassesGetter) {

		this.directlyRelatedClassesGetter = directlyRelatedClassesGetter;
	}

	public Set> findAll(Collection> inputClasses) {

		Set> result = new HashSet<>();
		Set> done = new HashSet<>();
		Deque> stack = new ArrayDeque<>(inputClasses);

		while (!stack.isEmpty()) {
			Class inputClass = stack.pop();
			if (done.add(inputClass)) {
				Collection> relatedClasses = directlyRelatedClassesGetter.apply(inputClass);
				result.addAll(relatedClasses);
				stack.addAll(relatedClasses);
			}
		}

		result.removeAll(inputClasses);
		return result;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy