@Override public Kind getKind() { return getTemplateDeclaration().getKind(); }
return true; } else if( d.getKind() == CsmDeclaration.Kind.VARIABLE ) { return true; } else if( d.getKind() == CsmDeclaration.Kind.FUNCTION || d.getKind() == CsmDeclaration.Kind.FUNCTION_FRIEND) { return true; } else if( d.getKind() == CsmDeclaration.Kind.FUNCTION_DEFINITION || d.getKind() == CsmDeclaration.Kind.FUNCTION_FRIEND_DEFINITION) { CsmFunctionDefinition definition = (CsmFunctionDefinition) d; CsmFunction func = definition.getDeclaration(); return true; } else if( d.getKind() == CsmDeclaration.Kind.ENUM ) { CsmEnum en = (CsmEnum) d; if( ! CsmKindUtilities.isClassMember(en) || ((CsmMember) en).getContainingClass() == null ) { return true; } else if( d.getKind() == CsmDeclaration.Kind.TYPEDEF ) { return true;
protected SortedName getSortedName(CsmOffsetableDeclaration d){ if( CsmKindUtilities.isClass(d) ) { return new SortedName(1,d.getName(),0); } else if( d.getKind() == CsmDeclaration.Kind.CLASS_FORWARD_DECLARATION ) { return new SortedName(1,d.getName(),0); } else if( d.getKind() == CsmDeclaration.Kind.ENUM ) { return new SortedName(1,d.getName(),1); } else if (d.getKind() == CsmDeclaration.Kind.ENUM_FORWARD_DECLARATION) { return new SortedName(1, d.getName(), 1); } else if( d.getKind() == CsmDeclaration.Kind.TYPEDEF ) { return new SortedName(1,d.getName(),2); } else if( d.getKind() == CsmDeclaration.Kind.VARIABLE ) { return new SortedName(2,d.getName(),0); } else if( d.getKind() == CsmDeclaration.Kind.FUNCTION ) { return new SortedName(3,CVUtil.getSignature((CsmFunction)d),0); } else if( d.getKind() == CsmDeclaration.Kind.FUNCTION_DEFINITION ) { return new SortedName(3,CVUtil.getSignature((CsmFunction)d),1); } else if( d.getKind() == CsmDeclaration.Kind.FUNCTION_FRIEND ) { return new SortedName(3,CVUtil.getSignature((CsmFunction)d),0); } else if( d.getKind() == CsmDeclaration.Kind.FUNCTION_FRIEND_DEFINITION ) { return new SortedName(3,CVUtil.getSignature((CsmFunction)d),1); } return new SortedName(9,d.getName(),0); }
private CsmNamespaceDefinition findNamespaceDefinition(Iterator<CsmOffsetableDeclaration> it, CsmFilter filter) { while(it.hasNext()) { CsmOffsetableDeclaration decl = it.next(); if (decl.getStartOffset() > this.getStartOffset()) { break; } if (decl.getKind() == CsmDeclaration.Kind.NAMESPACE_DEFINITION) { if (this.getEndOffset() < decl.getEndOffset()) { CsmNamespaceDefinition nsdef = (CsmNamespaceDefinition) decl; CsmNamespaceDefinition inner = findNamespaceDefinition(CsmSelect.getDeclarations(nsdef, filter), filter); return (inner == null) ? nsdef : inner; } } } return null; }
private CsmNamespaceDefinition findNamespaceDefinition(Iterator<CsmOffsetableDeclaration> it, CsmFilter filter) { while(it.hasNext()) { CsmOffsetableDeclaration decl = it.next(); if (decl.getStartOffset() > this.getStartOffset()) { break; } if (decl.getKind() == CsmDeclaration.Kind.NAMESPACE_DEFINITION) { if (this.getEndOffset() < decl.getEndOffset()) { CsmNamespaceDefinition nsdef = (CsmNamespaceDefinition) decl; CsmNamespaceDefinition inner = findNamespaceDefinition(CsmSelect.getDeclarations(nsdef, filter), filter); return (inner == null) ? nsdef : inner; } } } return null; }
private CsmFunction findDeclaration(CsmProject prj, String uname){ Collection<CsmDeclaration> decls = new ArrayList<>(1); for(CsmOffsetableDeclaration candidate : prj.findDeclarations(uname)) { if ((candidate.getKind() == CsmDeclaration.Kind.FUNCTION || candidate.getKind() == CsmDeclaration.Kind.FUNCTION_FRIEND)) { if (FunctionImpl.isObjectVisibleInFile(getContainingFile(), candidate)) { decls.add(candidate); } } } CsmDeclaration decl = chooseDeclaration(decls); if( decl != null) { return (CsmFunction) decl; } FunctionParameterListImpl parameterList = getParameterList(); if (parameterList != null && !parameterList.isEmpty()) { CsmFile file = getContainingFile(); if (!Utils.isCppFile(file)){ uname = uname.substring(0,uname.indexOf('('))+"()"; // NOI18N decl = prj.findDeclaration(uname); if( (decl instanceof FunctionImpl<?>) && !((FunctionImpl<?>)decl).isVoidParameterList()) { return (CsmFunction) decl; } } } return null; }
private boolean findVariable(CharSequence name, Iterator<CsmOffsetableDeclaration> it, int offset, CsmFilter filter) { while(it.hasNext()) { CsmOffsetableDeclaration decl = it.next(); if (decl.getStartOffset() >= offset) { break; } switch (decl.getKind()) { case VARIABLE: if (CharSequences.comparator().compare(name, ((CsmVariable) decl).getName()) == 0) { return true; } break; case VARIABLE_DEFINITION: if (CharSequences.comparator().compare(name, ((CsmVariable) decl).getQualifiedName()) == 0) { return true; } break; case NAMESPACE_DEFINITION: CsmNamespaceDefinition nd = (CsmNamespaceDefinition) decl; if (nd.getStartOffset() <= offset && nd.getEndOffset() >= offset) { if (findVariable(name, CsmSelect.getDeclarations(nd, filter), offset, filter)) { return true; } } break; } } return false; }
break; switch (decl.getKind()) { case FUNCTION: case FUNCTION_FRIEND:
new ClassifierKeyArray(updater, (CsmClass) d)); } else if( d.getKind() == CsmDeclaration.Kind.VARIABLE ) { return new GlobalVarNode((CsmVariable) d); else if( d.getKind() == CsmDeclaration.Kind.FUNCTION || d.getKind() == CsmDeclaration.Kind.FUNCTION_FRIEND) { return new GlobalFuncNode((CsmFunction) d); } else if( d.getKind() == CsmDeclaration.Kind.FUNCTION_DEFINITION || d.getKind() == CsmDeclaration.Kind.FUNCTION_FRIEND_DEFINITION) { CsmFunctionDefinition definition = (CsmFunctionDefinition) d; CsmFunction func = definition.getDeclaration(); return new GlobalFuncNode(definition); } else if( d.getKind() == CsmDeclaration.Kind.ENUM ) { CsmEnum en = (CsmEnum) d; if( ! CsmKindUtilities.isClassMember(en) || ((CsmMember) en).getContainingClass() == null ) { new ClassifierKeyArray(updater, en)); } else if( d.getKind() == CsmDeclaration.Kind.TYPEDEF ) { CsmTypedef def = (CsmTypedef) d; if (def.isTypeUnnamed()) {
private static void addDeclarationAndNested(Collection<FileElement> toAdd, CsmOffsetableDeclaration outDecl) { // TODO: what about function return value? // TODO: what about function params? // TODO: what about const/virtual attributes? // TODO: what about static? CharAndCharSequence cs = new CharAndCharSequence(outDecl.getQualifiedName(), Utils.getCsmDeclarationKindkey(outDecl.getKind())); FileElement fe = new FileElement(outDecl.getStartOffset(), cs); toAdd.add(fe); Iterator<? extends CsmOffsetableDeclaration> it = null; if (CsmKindUtilities.isNamespaceDefinition(outDecl)) { it = ((CsmNamespaceDefinition) outDecl).getDeclarations().iterator(); } else if (CsmKindUtilities.isClass(outDecl)) { CsmClass cl = (CsmClass) outDecl; it = cl.getMembers().iterator(); for (CsmInheritance inh : cl.getBaseClasses()) { CharAndCharSequence csi = new CharAndCharSequence(inh.getAncestorType().getClassifierText(), Utils.getCsmInheritanceKindKey(inh)); toAdd.add(new FileElement(inh.getStartOffset(), csi)); } } else if (CsmKindUtilities.isEnum(outDecl)) { CsmEnum en = (CsmEnum) outDecl; it = en.getEnumerators().iterator(); } if (it != null) { while (it.hasNext()) { CsmOffsetableDeclaration decl = (CsmOffsetableDeclaration) it.next(); addDeclarationAndNested(toAdd, decl); } } }