package net.ayld.facade.dependency.matcher.condition;
import net.ayld.facade.dependency.matcher.DependencyMatcherStrategy;
import net.ayld.facade.model.ClassFile;
import net.ayld.facade.model.ClassName;
/**
* Represents a matching condition.
*
* Matching conditions are governed by a {@link DependencyMatcherStrategy}.
*
* Each condition 'gives it's opinion' on whether a class file matches a class name.
* The {@link DependencyMatcherStrategy} decides whether the gathered matcher 'opinions' are sufficient.
*
* The idea is to have various types of conditions each trying to verify whether a class name matches a class file in different ways.
*
* */
public interface MatchingCondition {
/**
* Checks whether this matching condition is satisfied for the given {@link ClassName}, {@link ClassFile} combination.
*
* @param className class name to match
* @param classFile class file to match
*
* @return true if this condition 'thinks' that the given {@link ClassName} matches the given {@link ClassFile},
* false otherwise
* */
public boolean satisfied(ClassName className, ClassFile classFile);
}