package org.netbeans.gradle.model.java; import org.gradle.tooling.BuildController; import org.netbeans.gradle.model.BuildInfoBuilder; import org.netbeans.gradle.model.api.ProjectInfoBuilder2; import org.netbeans.gradle.model.util.BuilderUtils; import org.netbeans.gradle.model.util.ReflectionUtils; public final class TestBuilders { public static BuildInfoBuilder<String> testBuildInfoBuilder(String prefix) { return new TestBuildInfoBuilder(prefix); } public static ProjectInfoBuilder2<String> testProjectInfoBuilder(String prefix) { return new TestProjectInfoBuilder(prefix); } public static BuildInfoBuilder<Void> failingBuildInfoBuilder(String exceptionMessage) { return new FailingBuildInfoBuilder(exceptionMessage); } public static ProjectInfoBuilder2<Void> failingProjectInfoBuilder(String exceptionMessage) { return new FailingProjectInfoBuilder(exceptionMessage); } public static BuildInfoBuilder<Void> notSerializableBuildInfoBuilder() { return new NotSerializableBuildInfoBuilder(); } public static ProjectInfoBuilder2<Void> notSerializableProjectInfoBuilder() { return new NotSerializableProjectInfoBuilder(); } public static BuildInfoBuilder<Object> notSerializableResultBuildInfoBuilder() { return new NotSerializableResultBuildInfoBuilder(); } public static ProjectInfoBuilder2<Object> notSerializableResultProjectInfoBuilder() { return new NotSerializableResultProjectInfoBuilder(); } public static ProjectInfoBuilder2<Object> failingNameProjectInfoBuilder(String infoMessage, String nameMessage) { return new FailingNameProjectInfoBuilder(infoMessage, nameMessage); } private static final class FailingNameProjectInfoBuilder implements ProjectInfoBuilder2<Object> { private static final long serialVersionUID = 1L; private final String infoMessage; private final String nameMessage; public FailingNameProjectInfoBuilder(String infoMessage, String nameMessage) { if (infoMessage == null) throw new NullPointerException("infoMessage"); if (nameMessage == null) throw new NullPointerException("nameMessage"); this.infoMessage = infoMessage; this.nameMessage = nameMessage; } public Object getProjectInfo(Object project) { throw new RuntimeException(infoMessage); } public String getName() { throw new RuntimeException(nameMessage); } } private static final class NotSerializableResultBuildInfoBuilder implements BuildInfoBuilder<Object> { private static final long serialVersionUID = 1L; public final Object blockerOfSerialization = new Object(); public Object getInfo(BuildController controller) { return new Object(); } public String getName() { return getClass().getName(); } } private static final class NotSerializableResultProjectInfoBuilder implements ProjectInfoBuilder2<Object> { private static final long serialVersionUID = 1L; public Object getProjectInfo(Object project) { return new Object(); } public String getName() { return getClass().getName(); } } @SuppressWarnings("serial") private static final class NotSerializableProjectInfoBuilder implements ProjectInfoBuilder2<Void> { public final Object blockerOfSerialization = new Object(); public Void getProjectInfo(Object controller) { return null; } public String getName() { return getClass().getName(); } } @SuppressWarnings("serial") private static final class NotSerializableBuildInfoBuilder implements BuildInfoBuilder<Void> { public final Object blockerOfSerialization = new Object(); public Void getInfo(BuildController controller) { return null; } public String getName() { return getClass().getName(); } } private static final class TestProjectInfoBuilder implements ProjectInfoBuilder2<String> { private static final long serialVersionUID = 1L; private final String prefix; public TestProjectInfoBuilder(String prefix) { if (prefix == null) throw new NullPointerException("prefix"); this.prefix = prefix; } public String getProjectInfo(Object project) { String rootName = ReflectionUtils.getStringProperty(project, "name"); return prefix + rootName; } public String getName() { return BuilderUtils.getNameForGenericBuilder(this, prefix); } } private static final class TestBuildInfoBuilder implements BuildInfoBuilder<String> { private static final long serialVersionUID = 1L; private final String prefix; public TestBuildInfoBuilder(String prefix) { if (prefix == null) throw new NullPointerException("prefix"); this.prefix = prefix; } public String getInfo(BuildController controller) { String rootName = controller.getBuildModel().getRootProject().getName(); return prefix + rootName; } public String getName() { return BuilderUtils.getNameForGenericBuilder(this, prefix); } } private static final class FailingBuildInfoBuilder implements BuildInfoBuilder<Void> { private static final long serialVersionUID = 1L; private final String exceptionMessage; public FailingBuildInfoBuilder(String exceptionMessage) { if (exceptionMessage == null) throw new NullPointerException("exceptionMessage"); this.exceptionMessage = exceptionMessage; } public Void getInfo(BuildController controller) { throw new NotSerializableException(exceptionMessage); } public String getName() { return BuilderUtils.getNameForGenericBuilder(this, exceptionMessage); } } private static final class FailingProjectInfoBuilder implements ProjectInfoBuilder2<Void> { private static final long serialVersionUID = 1L; private final String exceptionMessage; public FailingProjectInfoBuilder(String exceptionMessage) { if (exceptionMessage == null) throw new NullPointerException("exceptionMessage"); this.exceptionMessage = exceptionMessage; } public Void getProjectInfo(Object project) { throw new NotSerializableException(exceptionMessage); } public String getName() { return BuilderUtils.getNameForGenericBuilder(this, exceptionMessage); } } @SuppressWarnings("serial") private static final class NotSerializableException extends RuntimeException { public final Object blockerOfSerialization; public NotSerializableException(String message) { super(message); blockerOfSerialization = new Object(); } } private TestBuilders() { throw new AssertionError(); } }