package error;

import edu.rice.cs.mint.runtime.Code;
import edu.rice.cs.mint.runtime.CodeFree;

import java.util.List;

public class CodeFreeSample2 {

    public static class Foo implements CodeFree {
        int i = 0;
        Object o; // error
        Code[] arr; // error
        List<Code> gen; // error
        void foo() { }
    }

    public static class FooMethod implements CodeFree {
        int i() { return 0; }
        Code<Integer> c() { return null; } // error
        Code c2() { return null; } // error
        Object o() { return null; } // error
        Code[] arr() { return null; } // error
        List<Code> gen() { return null; } // error
    }
    
    public static class Bar extends Foo {
        Code<Integer> c; // error
    }
    
    public static interface Fum extends CodeFree {
    }
    
    public static class Fee implements Fum {
        Object o; // error
        Code c; // error
    }

//    // -- code container --
//    
//    public static class CodeContainer {
//        Code<Integer> c;
//    }
//    
//    public static class ContainsCodeContainer implements CodeFree {
//        CodeContainer cc; // error
//    }
//
//    public static class ContainsCodeContainerContainer implements CodeFree {
//        ContainsCodeContainer cc; // error (but not reported, because analysis stops at ContainsCodeContainer <: CodeFree)
//    }
//    
//    // -- code returner --
//
//    public static final class CodeReturner {
//        Code<Integer> get() { return null; }
//    }
//    
//    public static class ContainsCodeReturner implements CodeFree {
//        CodeReturner cr = new CodeReturner(); // error
//    }
//    
//    public static class ContainsCodeReturnerContainer implements CodeFree {
//        ContainsCodeReturner cr; // error (but not reported, because analysis stops at ContainsCodeReturner <: CodeFree)
//    }
}
