Skip to content

Commit

Permalink
Make defaultResolverFactory settable only once before use
Browse files Browse the repository at this point in the history
  • Loading branch information
Bouncheck committed Sep 6, 2024
1 parent 6725ab9 commit e9d0b9c
Showing 1 changed file with 18 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
*/
public class ResolverProvider {

private static boolean alreadyInUse = false;
private static boolean alreadySet = false;
private static AbstractResolverFactory defaultResolverFactoryImpl = new DefaultResolverFactory();

/**
Expand All @@ -16,7 +18,8 @@ public class ResolverProvider {
* @param clazz Class that is requesting the {@link Resolver}.
* @return new {@link Resolver}.
*/
public static Resolver getResolver(Class<?> clazz) {
public static synchronized Resolver getResolver(Class<?> clazz) {
alreadyInUse = true;
return defaultResolverFactoryImpl.getResolver(clazz);
}

Expand All @@ -26,7 +29,20 @@ public static Resolver getResolver(Class<?> clazz) {
*
* @param resolverFactoryImpl new {@link Resolver} factory.
*/
public static void setDefaultResolverFactory(AbstractResolverFactory resolverFactoryImpl) {
public static synchronized void setDefaultResolverFactory(
AbstractResolverFactory resolverFactoryImpl) {
if (alreadyInUse) {
throw new IllegalStateException(
"Cannot change default resolver factory: ResolverProvider has already returned "
+ "an instance of a Resolver to use. Default resolver factory needs to be set up before first use by any "
+ "class.");
}
if (alreadySet) {
throw new IllegalStateException(
"Cannot change default resolver factory: this method has already been called. "
+ "You can set default resolver factory only once.");
}
alreadySet = true;
defaultResolverFactoryImpl = resolverFactoryImpl;
}
}

0 comments on commit e9d0b9c

Please sign in to comment.