package test; import org.junit.Assert; import xapi.annotation.api.XApi; import xapi.annotation.inject.InstanceDefault; import xapi.inject.X_Inject; import com.google.gwt.core.shared.GWT; import javax.inject.Inject; @XApi( templates = "./Generated" ) @InstanceDefault(implFor = Test.class) public class Test { public static final Class<Test> FINAL_FIELD_INITED_BY_CLASS_LITERAL = Test.class; @Inject Test test; public String world; @Inject final static Test withInitializer = newTest(); private static Test newTest() { return X_Inject.instance(FINAL_FIELD_INITED_BY_CLASS_LITERAL); } public Test(){ } public Test(Test param){ // lets do a bunch of injection in this constructor. // It won't cause infinite recursion, as we won't inject this constructor. inject: { // Using an inject annotation should cause this null variable to become initialized Test test = null; assert test != null; } assert param != null; assert this.test != null; } public static Class<Test> NONFINAL_FIELD_INITED_BY_CLASS_LITERAL = Test.class; public static Class<Test> withLiteralReturn() { return Test.class; } public static Class<Test> withFinalFieldReturn() { return FINAL_FIELD_INITED_BY_CLASS_LITERAL; } public static Class<Test> withNonFinalFieldReturn() { return NONFINAL_FIELD_INITED_BY_CLASS_LITERAL; } public Test classLiteral() { return test(GWT.create(Test.class)); } public Test finalFieldInitedByClassLiteral() { return GWT.create(FINAL_FIELD_INITED_BY_CLASS_LITERAL); } public Test nonFinalFieldInitedByClassLiteral() { return GWT.create(NONFINAL_FIELD_INITED_BY_CLASS_LITERAL); } public Test methodWithLiteralReturn() { return GWT.create(withLiteralReturn()); } public Test methodWithFinalFieldReturn() { return GWT.create(withFinalFieldReturn()); } public Test test(Test test) { Assert.assertEquals(test.getClass(), this.getClass()); return test; } public String hello(String world) { this.world = world; return "hello: " + world; } }