    /**
     * module
     */
    @config_simulator: { defaultServerMode: "gui" }
    @config_server_qtro: { useGeneratedMain: true }
    module org.example.echomodule 1.0

    /**
     * \brief the brief
     * the description
     * continues \l http://qt.io
     */
    @config: {id: "org.foo.id.1.0", qml_class_name: "UiEcho"}
    interface Echo {
        /**
         * \brief brief message
         *
         * Some more documentation
         */
        readonly string lastMessage;
        int intValue;
        var varValue;
        @config: { getter_name: "isEchoEnabled" }
        bool echoEnabled;
        @config_simulator: {minimum: 10.}
        real floatValue1;
        @config_simulator: {maximum: 10.}
        real floatValue2;
        string stringValue;
        model<Contact> contactList;
        Contact contact;
        org.example.echomodule.Combo combo;
        list<int> intList;
        list<org.example.echomodule.Combo> comboList;
        WeekDay weekDay;
        TestEnum testEnum;
        real UPPERCASEPROPERTY;
        /* TODO comment */
        @config_simulator: { default: ["Hello Qt"] }
        OnlyAStringInAStruct stringInAStructProperty;

        // single line comment
        string echo(string msg);
        string id() const;
        org.example.echomodule.Combo getCombo();
        void voidSlot();
        void voidSlot2(int param);
        void timer(int interval);
        AirflowDirection flagMethod(AirflowDirection direction);
        TestEnum enumMethod(TestEnum testEnum);

        signal anotherChanged(AnotherStruct another);
        signal foobar(string foo);
        signal somethingHappened();
        signal newValueAvailable(var newValue);
    }

    @config: {id: "org.foo.idz.1.0", zoned: true}
    interface EchoZoned {

        /**
         * \brief brief message
         *
         * Some more documentation
         */
        readonly string lastMessage;
        int intValue;
        var varValue;
        @config_simulator: {domain: ["one", "two", "three"]}
        string stringValue;
        string unsupportedValue;
        bool zonedValue;
        bool valueWithDefault;
        @config: { getter_name: "isEchoEnabled" }
        bool echoEnabled;
        AirflowDirection airflowDirection;
        @config_simulator: {minimum: 10., maximum: 15.}
        int rangedValue;
        int rangedValueWithDefault;
        Contact contact;
        Combo combo;
        list<int> intList;
        list<Combo> comboList;
        WeekDay weekDay;
        TestEnum testEnum;
        real UPPERCASEPROPERTY;

        string echo(string msg);
        string id();
        var varMethod();
        Combo getCombo();
        string timer(int interval);
        AirflowDirection flagMethod(AirflowDirection direction);
        TestEnum enumMethod(TestEnum testEnum);

        signal anotherChanged(AnotherStruct another);
        signal foobar(string foo);
        signal somethingHappened();
        signal newValueAvailable(var newValue);
    }

    /**
     * \brief Control where the airflow goes
     */
    flag AirflowDirection {
        /**
         * \brief Airflow to the windshield
         */
        Windshield = 1,
        /**
         * \brief Airflow to the dashboard
         */
        Dashboard = 2,
        /**
         * \brief Airflow to the floor
         */
        Floor = 4
    }

    @config: { type: "DaysOfTheWeek" }
    flag WeekDay {
        Monday = 1,
        Tuesday = 2,
        Wednesday = 3,
        Thursday = 4,
        Friday = 5
    }

    enum TestEnum {
        FirstEnumValue = 1,
        SecondEnumValue = 2
    }

    /**
     * The contact information
     */
    struct Contact {
        string name;
        int age;
        bool isMarried;
        var additionalData;
    }

    struct Combo {
        Contact contactInfo;
        WeekDay day;
    }

    struct AnotherStruct {
        int justANumber;
    }

    /* AUTOSUITE-1340 */
    struct OnlyAStringInAStruct {
        string myString;
    }