// Path: src/test/java/com/insightfullogic/multiinherit/Util.java
// public class Util {
// 
// 	public static interface Do<T> {
// 		public void apply(T t);
// 	}
// 
// 	public static void withBools(final Do<Boolean> what) {
// 		what.apply(true);
// 		what.apply(false);
// 	}
// }
// 
// Path: src/test/java/com/insightfullogic/multiinherit/Util.java
// public static interface Do<T> {
// 	public void apply(T t);
// }
// 
// Path: src/main/java/com/insightfullogic/multiinherit/api/MultiModule.java
// public class MultiModule extends AbstractModule {
// 
// 	private final Class<?>[] classes;
// 	private final boolean useGeneration;
// 	private final boolean dumpClasses;
// 
// 	public MultiModule(final boolean useGeneration, final Class<?>... classes) {
// 		this(useGeneration, false, classes);
// 	}
// 
// 	public MultiModule(final boolean useGeneration, final boolean dumpClasses, final Class<?>... classes) {
// 		if (!useGeneration && dumpClasses) {
// 			throw new IllegalArgumentException("You cannot dump the generate class files if you're not generating class files");
// 		}
// 		this.classes = classes;
// 		this.useGeneration = useGeneration;
// 		this.dumpClasses = dumpClasses;
// 	}
// 
// 	@SuppressWarnings({ "rawtypes", "unchecked" })
// 	private void bindMulti(final Class<?>... classes) {
// 		if (useGeneration) {
// 			bind(MultiInjector.class).to(GenerationMultiInjector.class);
// 			bind(Boolean.class).annotatedWith(Names.named("dump")).toInstance(dumpClasses);
// 		} else {
// 			bind(MultiInjector.class).to(ReflectionMultiInjector.class);
// 		}
// 		for (final Class cls : classes) {
// 			bind(cls).toProvider(new MultiProvider(cls));
// 		}
// 	}
// 
// 	@Override
// 	protected void configure() {
// 		bindMulti(classes);
// 	}
// 
// }
// 
// Path: src/test/java/com/insightfullogic/multiinherit/simple/A.java
// @ImplementedBy(AImpl.class)
// public interface A {
// 
// 	public String a();
// }


import static junit.framework.Assert.assertEquals;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.insightfullogic.multiinherit.Util;
import com.insightfullogic.multiinherit.Util.Do;
import com.insightfullogic.multiinherit.api.MultiModule;
import com.insightfullogic.multiinherit.simple.A;

package com.insightfullogic.multiinherit.disambiguate;




public class TestDisambiguationCases {

	@Test
	public void checkAtPrefer() {
		Util.withBools(new Do<Boolean>() {
			@Override
			public void apply(final Boolean b) {

// Path: src/test/java/com/insightfullogic/multiinherit/Util.java
// public class Util {
// 
// 	public static interface Do<T> {
// 		public void apply(T t);
// 	}
// 
// 	public static void withBools(final Do<Boolean> what) {
// 		what.apply(true);
// 		what.apply(false);
// 	}
// }
// 
// Path: src/test/java/com/insightfullogic/multiinherit/Util.java
// public static interface Do<T> {
// 	public void apply(T t);
// }
// 
// Path: src/main/java/com/insightfullogic/multiinherit/api/MultiModule.java
// public class MultiModule extends AbstractModule {
// 
// 	private final Class<?>[] classes;
// 	private final boolean useGeneration;
// 	private final boolean dumpClasses;
// 
// 	public MultiModule(final boolean useGeneration, final Class<?>... classes) {
// 		this(useGeneration, false, classes);
// 	}
// 
// 	public MultiModule(final boolean useGeneration, final boolean dumpClasses, final Class<?>... classes) {
// 		if (!useGeneration && dumpClasses) {
// 			throw new IllegalArgumentException("You cannot dump the generate class files if you're not generating class files");
// 		}
// 		this.classes = classes;
// 		this.useGeneration = useGeneration;
// 		this.dumpClasses = dumpClasses;
// 	}
// 
// 	@SuppressWarnings({ "rawtypes", "unchecked" })
// 	private void bindMulti(final Class<?>... classes) {
// 		if (useGeneration) {
// 			bind(MultiInjector.class).to(GenerationMultiInjector.class);
// 			bind(Boolean.class).annotatedWith(Names.named("dump")).toInstance(dumpClasses);
// 		} else {
// 			bind(MultiInjector.class).to(ReflectionMultiInjector.class);
// 		}
// 		for (final Class cls : classes) {
// 			bind(cls).toProvider(new MultiProvider(cls));
// 		}
// 	}
// 
// 	@Override
// 	protected void configure() {
// 		bindMulti(classes);
// 	}
// 
// }
// 
// Path: src/test/java/com/insightfullogic/multiinherit/simple/A.java
// @ImplementedBy(AImpl.class)
// public interface A {
// 
// 	public String a();
// }


// Path: src/test/java/com/insightfullogic/multiinherit/disambiguate/TestDisambiguationCases.java
import static junit.framework.Assert.assertEquals;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.insightfullogic.multiinherit.Util;
import com.insightfullogic.multiinherit.Util.Do;
import com.insightfullogic.multiinherit.api.MultiModule;
import com.insightfullogic.multiinherit.simple.A;

package com.insightfullogic.multiinherit.disambiguate;




public class TestDisambiguationCases {

	@Test
	public void checkAtPrefer() {
		Util.withBools(new Do<Boolean>() {
			@Override
			public void apply(final Boolean b) {

				final Injector injector = Guice.createInjector(new MultiModule(b, CombinedPreferC.class));
