// Path: src/org/udalov/jclang/structs/CXIdxEntityInfo.java
// @SuppressWarnings("unused")
// public class CXIdxEntityInfo extends Structure {
//     public int kind;
//     public int templateKind;
//     public int lang;
//     public String name;
//     public String USR;
//     public CXCursor.ByValue cursor;
//     @Nullable
//     public PointerByReference /* CXIdxAttrInfo */ attributes;
//     public int numAttributes;
// 
//     public CXIdxEntityInfo() {
//         super();
//         setFieldOrder(new String[]{"kind", "templateKind", "lang", "name", "USR", "cursor", "attributes", "numAttributes"});
//     }
// 
//     public static class ByReference extends CXIdxEntityInfo implements Structure.ByReference {}
// }


import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.udalov.jclang.structs.CXIdxEntityInfo;
import java.util.Collections;
import java.util.List;
        CXX_INSTANCE_METHOD,
        CXX_CONSTRUCTOR,
        CXX_DESTRUCTOR,
        CXX_CONVERSION_FUNCTION,
        CXX_TYPE_ALIAS,
        CXX_INTERFACE
    }

    public enum CXXTemplateKind {
        NON_TEMPLATE,
        TEMPLATE,
        TEMPLATE_PARTIAL_SPECIALIZATION,
        TEMPLATE_SPECIALIZATION
    }

    public enum Language {
        NONE,
        C,
        OBJC,
        CXX
    }

    private final Kind kind;
    private final CXXTemplateKind cxxTemplateKind;
    private final Language language;
    private final String name;
    private final String usr;
    private final Cursor cursor;
    private final List<IndexAttribute> attributes;

// Path: src/org/udalov/jclang/structs/CXIdxEntityInfo.java
// @SuppressWarnings("unused")
// public class CXIdxEntityInfo extends Structure {
//     public int kind;
//     public int templateKind;
//     public int lang;
//     public String name;
//     public String USR;
//     public CXCursor.ByValue cursor;
//     @Nullable
//     public PointerByReference /* CXIdxAttrInfo */ attributes;
//     public int numAttributes;
// 
//     public CXIdxEntityInfo() {
//         super();
//         setFieldOrder(new String[]{"kind", "templateKind", "lang", "name", "USR", "cursor", "attributes", "numAttributes"});
//     }
// 
//     public static class ByReference extends CXIdxEntityInfo implements Structure.ByReference {}
// }


// Path: src/org/udalov/jclang/EntityInfo.java
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.udalov.jclang.structs.CXIdxEntityInfo;
import java.util.Collections;
import java.util.List;

        CXX_INSTANCE_METHOD,
        CXX_CONSTRUCTOR,
        CXX_DESTRUCTOR,
        CXX_CONVERSION_FUNCTION,
        CXX_TYPE_ALIAS,
        CXX_INTERFACE
    }

    public enum CXXTemplateKind {
        NON_TEMPLATE,
        TEMPLATE,
        TEMPLATE_PARTIAL_SPECIALIZATION,
        TEMPLATE_SPECIALIZATION
    }

    public enum Language {
        NONE,
        C,
        OBJC,
        CXX
    }

    private final Kind kind;
    private final CXXTemplateKind cxxTemplateKind;
    private final Language language;
    private final String name;
    private final String usr;
    private final Cursor cursor;
    private final List<IndexAttribute> attributes;

    public EntityInfo(@NotNull CXIdxEntityInfo info) {