package org.jboss.windup.config;
import org.jboss.windup.config.loader.RuleLoaderContext;
import org.jboss.windup.config.metadata.RuleProviderMetadata;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationProvider;
import org.ocpsoft.rewrite.config.Rule;
/**
* A windup-specific implementation of {@link ConfigurationProvider}. Provides {@link Rule} instances and relevant {@link RuleProviderMetadata} for
* those {@link Rule} instances.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public interface RuleProvider extends ConfigurationProvider<RuleLoaderContext>
{
/**
* Get the {@link RuleProviderMetadata} for this {@link RuleProvider}.
*/
RuleProviderMetadata getMetadata();
/**
* KEEP - The purpose of this override is to make sure that reflection (interface.getClass().getMethods())
* keeps a method with the specific type. Otherwise, type erasure will get rid of it and callers will get
* ClassCastExceptions in some obscure cases.
*/
@Override
Configuration getConfiguration(RuleLoaderContext context);
}