package de.vksi.c4j.systemtest.contractclassmagic; import org.junit.Rule; import org.junit.Test; import de.vksi.c4j.ContractReference; import de.vksi.c4j.systemtest.TransformerAwareRule; public class ContractForNativeOrAbstractMethodSystemTest { @Rule public TransformerAwareRule transformerAwareRule = new TransformerAwareRule(); @Test public void testContractForNativeMethod() { new TargetClass(); } private static class TargetClass implements ObjectSpec { } @ContractReference(ObjectSpecContract.class) public interface ObjectSpec { // Object.hashCode() is native @Override public int hashCode(); } private static class ObjectSpecContract implements ObjectSpec { @Override public int hashCode() { return 0; } } @Test public void testAbstractClass() { new TargetClassExtendingAbstract(); } private static class TargetClassExtendingAbstract extends AbstractClassExtendingAbstract { @Override public void abstractMethod() { } } @ContractReference(AbstractClassExtendingAbstractContract.class) public static abstract class AbstractClassExtendingAbstract extends AbstractClass { } private static class AbstractClassExtendingAbstractContract extends AbstractClassExtendingAbstract { @Override public void abstractMethod() { } } @ContractReference(AbstractClassContract.class) public static abstract class AbstractClass { public abstract void abstractMethod(); } private static class AbstractClassContract extends AbstractClass { @Override public void abstractMethod() { } } }