package ex;
import java.util.HashSet;
import java.util.Set;

public class COM_Sample {

    public void test1() {
    }

    public String test2(int i) {
        return String.valueOf(i);
    }

    public Set<String> test3(String a, String b, String c) {
        Set<String> ss = new HashSet<String>();
        ss.add(a);
        ss.add(b);
        ss.add(c);
        return ss;
    }

    public boolean test4(int w, double x, String y, boolean z) {
        return z;
    }

    protected void fpEnhanceAccess() {
    }

    public static class Derived extends COM_Sample {
        @Override
        public void test1() {
        }

        @Override
        public Set<String> test3(String a, String b, String c) {
            Set<String> ss = new HashSet<String>();
            ss.add(a);
            ss.add(b);
            ss.add(c);
            return ss;
        }

        @Override
        public String test2(int i) {
            return String.valueOf(i);
        }

        @Override
        public boolean test4(int w, double x, String y, boolean z) {
            return super.test4(w, x, y, z);
        }

        @Override
        public void fpEnhanceAccess() {
        }
    }
}

interface Inf {
    void m1();

    void m2();
}

abstract class c1 implements Inf {
    @Override
    public void m1() {
    }
}

abstract class c2 extends c1 {
    @Override
    public void m2() {
    }
}

abstract class s1 {
    public static final String FOO = "foo";

    public String getFoo() {
        return FOO;
    }
}

abstract class s2 extends s1 {
    public static final String FOO = "foo2";

    @Override
    public String getFoo() {
        return FOO;
    }
}

package ex;

import java.util.HashSet;
import java.util.Set;

public class COM_Sample {

    public void test1() {
    }

    public String test2(int i) {
        return String.valueOf(i);
    }

    public Set<String> test3(String a, String b, String c) {
        Set<String> ss = new HashSet<>();
        ss.add(a);
        ss.add(b);
        ss.add(c);
        return ss;
    }

    public boolean test4(int w, double x, String y, boolean z) {
        return z;
    }

    protected void fpEnhanceAccess() {
    }

    public static class Derived extends COM_Sample {
        @Override
        public void test1() {
        }

        @Override
        public Set<String> test3(String a, String b, String c) {
            Set<String> ss = new HashSet<>();
            ss.add(a);
            ss.add(b);
            ss.add(c);
            return ss;
        }

        @Override
        public String test2(int i) {
            return String.valueOf(i);
        }

        @Override
        public boolean test4(int w, double x, String y, boolean z) {
            return super.test4(w, x, y, z);
        }

        @Override
        public void fpEnhanceAccess() {
        }
    }
}

interface Inf {
    void m1();

    void m2();
}

abstract class c1 implements Inf {
    @Override
    public void m1() {
    }
}

abstract class c2 extends c1 {
    @Override
    public void m2() {
    }
}

abstract class s1 {
    public static final String FOO = "foo";

    public String getFoo() {
        return FOO;
    }
}

abstract class s2 extends s1 {
    public static final String FOO = "foo2";

    @Override
    public String getFoo() {
        return FOO;
    }
}

class NonSync {
    public int foo() {
        return 42;
    }
}

class Sync extends NonSync {
    @Override
    public synchronized int foo() {
        return super.foo();
    }
}

Add COM fp as shown in issue #225