Search in sources :

Example 1 with ICPPTemplateArgument

use of org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument in project linuxtools by eclipse.

the class LibHover method getClassName.

// Get the class name for a type, including any instance template parameters
// e.g. std::basic_string<char>
private String getClassName(ICPPClassType c) {
    String className = null;
    try {
        String[] qualified = c.getQualifiedName();
        className = qualified[0];
        for (int k = 1; k < qualified.length; ++k) {
            // $NON-NLS-1$
            className += "::" + qualified[k];
        }
        // Check if we have an instance of a template class.
        if (c instanceof ICPPTemplateInstance) {
            ICPPTemplateInstance ti = (ICPPTemplateInstance) c;
            // Get a map which tells us the values of the template
            // arguments (e.g. _CharT maps to char in the instance).
            ICPPTemplateParameterMap tiMap = ti.getTemplateParameterMap();
            ICPPTemplateDefinition td = ti.getTemplateDefinition();
            ICPPTemplateParameter[] templateArgs = td.getTemplateParameters();
            // $NON-NLS-1$
            className += "<";
            // $NON-NLS-1$
            String separator = "";
            for (int x = 0; x < templateArgs.length; ++x) {
                ICPPTemplateParameter tp = templateArgs[x];
                ICPPTemplateArgument ta = tiMap.getArgument(tp);
                IType type = null;
                // that when we do a lookup.
                if (ta.isTypeValue()) {
                    type = ta.getTypeValue();
                } else {
                    type = ta.getTypeOfNonTypeValue();
                }
                if (tp.getTemplateNestingLevel() == 0) {
                    // get its class name including template parameters
                    if (type instanceof ICPPClassType) {
                        className += separator + getClassName((ICPPClassType) type);
                    } else {
                        className += separator + type.toString();
                    }
                    // $NON-NLS-1$
                    separator = ",";
                }
            }
            // $NON-NLS-1$
            className += ">";
        }
    } catch (DOMException e) {
        return null;
    }
    return className;
}
Also used : DOMException(org.eclipse.cdt.core.dom.ast.DOMException) ICPPTemplateArgument(org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument) ICPPTemplateInstance(org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance) ICPPTemplateDefinition(org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition) ICPPTemplateParameterMap(org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap) ICPPTemplateParameter(org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter) ICPPClassType(org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType) IType(org.eclipse.cdt.core.dom.ast.IType)

Aggregations

DOMException (org.eclipse.cdt.core.dom.ast.DOMException)1 IType (org.eclipse.cdt.core.dom.ast.IType)1 ICPPClassType (org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType)1 ICPPTemplateArgument (org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument)1 ICPPTemplateDefinition (org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition)1 ICPPTemplateInstance (org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance)1 ICPPTemplateParameter (org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter)1 ICPPTemplateParameterMap (org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap)1