@Override public DefinitionKind getDefinitionKind() { if (CsmKindUtilities.isFunctionDefinition(declaration)) { return ((CsmFunctionDefinition)declaration).getDefinitionKind(); } return null; }
private static CsmScope findInnerScope(CsmScope outScope, int offset) { for (CsmScopeElement item : outScope.getScopeElements()) { if(CsmKindUtilities.isScope(item) && isInObject(item, offset)) { CsmScope inScope = findInnerScope((CsmScope) item, offset); if(inScope != null) { return inScope; } else { if(CsmKindUtilities.isClass(item) || CsmKindUtilities.isNamespace(item) || CsmKindUtilities.isFunction(item) || CsmKindUtilities.isEnum(item) || CsmKindUtilities.isUnion(item) || CsmKindUtilities.isFile(item)) { return (CsmScope) item; if (CsmKindUtilities.isNamespaceDefinition(outScope)) { for (CsmDeclaration item : ((CsmNamespaceDefinition) outScope).getDeclarations()) { if (CsmKindUtilities.isScope(item) && isInObject(item, offset)) { CsmScope inScope = findInnerScope((CsmScope) item, offset); if (inScope != null) { return inScope; } else { if (CsmKindUtilities.isClass(item) || CsmKindUtilities.isNamespace(item) || CsmKindUtilities.isFunction(item) || CsmKindUtilities.isEnum(item) || CsmKindUtilities.isUnion(item) || CsmKindUtilities.isFile(item)) { return (CsmScope) item;
public static CsmFile getCsmFile(CsmObject csmObject) { if (CsmKindUtilities.isFile(csmObject)) { return ((CsmFile) csmObject); } else if (CsmKindUtilities.isOffsetable(csmObject)) { return ((CsmOffsetable) csmObject).getContainingFile(); } return null; }
/*package*/ static boolean isLangContainerFeature(CsmObject obj) { assert obj != null; return CsmKindUtilities.isFunction(obj) || CsmKindUtilities.isClass(obj) || CsmKindUtilities.isEnum(obj) || CsmKindUtilities.isNamespaceDefinition(obj) || CsmKindUtilities.isFile(obj); }
private void rememberObject(CsmObject obj) { if (CsmKindUtilities.isNamespaceDefinition(obj)) { enclosingNS = (CsmNamespaceDefinition) obj; } else if (CsmKindUtilities.isClass(obj)) { enclosingClass = (CsmClass)obj; } else if (CsmKindUtilities.isFunction(obj)) { enclosingFun = (CsmFunction) obj; } }
/** Get the class or function definition from the known scope */ public CsmOffsetableDeclaration getDefinition(CsmScope scope) { while (CsmKindUtilities.isScopeElement(scope) && (!CsmKindUtilities.isClass(scope) && !CsmKindUtilities.isFunction(scope))) { scope = ((CsmScopeElement) scope).getScope(); } return (CsmKindUtilities.isClass(scope) || CsmKindUtilities.isFunction(scope)) ? (CsmOffsetableDeclaration) scope : null; }
private static String getObjectKind(CsmObject obj) { String kindName = ""; if (obj != null) { if (CsmKindUtilities.isClass(obj)) { CsmDeclaration.Kind kind = ((CsmClass)obj).getKind(); if (kind == CsmDeclaration.Kind.STRUCT) { } else if (CsmKindUtilities.isEnum(obj)) { kindName = getString("LBL_Enum"); // NOI18N } else if (CsmKindUtilities.isMacro(obj)) { kindName = getString("LBL_Macro"); // NOI18N } else if (CsmKindUtilities.isFile(obj)) { kindName = getString("LBL_File"); // NOI18N } else if (CsmKindUtilities.isField(obj)) { kindName = getString("LBL_Field"); // NOI18N } else if (CsmKindUtilities.isParamVariable(obj)) { kindName = getString("LBL_Parameter"); // NOI18N } else if (CsmKindUtilities.isEnumerator(obj)) { kindName = getString("LBL_Enumerator"); // NOI18N } else if (CsmKindUtilities.isVariable(obj)) { kindName = getString("LBL_Variable"); // NOI18N } else if (CsmKindUtilities.isNamespace(obj)) { kindName = getString("LBL_Namespace"); // NOI18N } else if (CsmKindUtilities.isConstructor(obj)) { kindName = getString("LBL_Constructor"); // NOI18N } else if (CsmKindUtilities.isMethod(obj)) { kindName = getString("LBL_Method"); // NOI18N } else if (CsmKindUtilities.isFunction(obj)) { kindName = getString("LBL_Function"); // NOI18N } else if (CsmKindUtilities.isTypedef(obj)) {
private static CsmDeclaration findInnerDeclaration(CsmFile contextFile, CsmDeclaration outDecl, int offset, CsmContext context) { assert (CsmOffsetUtilities.isInObject(outDecl, offset)) : "must be in outDecl object!"; Iterator<? extends CsmDeclaration> it = null; if (CsmKindUtilities.isNamespace(outDecl)) { CsmNamespace ns = (CsmNamespace)outDecl; it = ns.getDeclarations().iterator(); } else if (CsmKindUtilities.isNamespaceDefinition(outDecl)) { it = ((CsmNamespaceDefinition) outDecl).getDeclarations().iterator(); } else if (CsmKindUtilities.isClass(outDecl)) { CsmClass cl = (CsmClass)outDecl; List<CsmOffsetableDeclaration> list = new ArrayList<CsmOffsetableDeclaration>(); } else if (CsmKindUtilities.isEnum(outDecl)) { CsmEnum en = (CsmEnum)outDecl; it = en.getEnumerators().iterator(); } else if (CsmKindUtilities.isTypedef(outDecl) || CsmKindUtilities.isTypeAlias(outDecl)) { CsmTypedef td = (CsmTypedef) outDecl; if (td.isTypeUnnamed() || td.getName().length() == 0) {
private static CsmDeclaration findInnerDeclaration(CsmDeclaration outDecl, int offset) { assert (isInObject(outDecl, offset)) : "must be in outDecl object!"; Iterator<? extends CsmDeclaration> it = null; if (CsmKindUtilities.isNamespace(outDecl)) { CsmNamespace ns = (CsmNamespace)outDecl; it = ns.getDeclarations().iterator(); } else if (CsmKindUtilities.isNamespaceDefinition(outDecl)) { it = ((CsmNamespaceDefinition) outDecl).getDeclarations().iterator(); } else if (CsmKindUtilities.isClass(outDecl)) { CsmClass cl = (CsmClass)outDecl; it = cl.getMembers().iterator(); } else if (CsmKindUtilities.isEnum(outDecl)) { CsmEnum en = (CsmEnum)outDecl; it = en.getEnumerators().iterator(); } return findInnerDeclaration(it, offset); }
int endOffset = obj.getEndOffset(); int endLineOffset = 1; if (CsmKindUtilities.isNamespaceDefinition((CsmObject)obj) || CsmKindUtilities.isEnum((CsmObject)obj)) { endOffset = stOffset; endLineOffset = 0; } else if (CsmKindUtilities.isFunctionDefinition((CsmObject)obj)) { endOffset = ((CsmFunctionDefinition)obj).getBody().getStartOffset()-1; } else if (CsmKindUtilities.isClass((CsmObject)obj)) { endOffset = ((CsmClass)obj).getLeftBracketOffset()-1;
FileReferencesContext(CsmScope csmScope){ if (CsmKindUtilities.isFile(csmScope)) { csmFile = (CsmFile) csmScope; } else if (CsmKindUtilities.isFunction(csmScope)) { csmFile = ((CsmFunction)csmScope).getContainingFile(); } else if (CsmKindUtilities.isOffsetable(csmScope)) { csmFile = ((CsmOffsetable)csmScope).getContainingFile(); } //lastOffset = 0; CsmListeners.getDefault().addProgressListener(this); }
public static CompletionDocumentation getDocumentation(CsmObject obj, CsmFile file) throws IOException { if (CsmKindUtilities.isFunction(obj) && !CsmKindUtilities.isClassMember(obj)) { CsmFunction function = (CsmFunction) obj; return getDoc(function.getQualifiedName().toString(), file); } else if (CsmKindUtilities.isClass(obj)) { CsmClass cls = (CsmClass) obj; return getDoc(cls.getQualifiedName().toString(), file); } else if (CsmKindUtilities.isClassMember(obj)) { CsmScope scope = ((CsmMember) obj).getScope(); if (CsmKindUtilities.isClass(scope)) { CsmClass cls = (CsmClass) scope; return getDoc(cls.getQualifiedName().toString(), file); } } return null; }
/** * Returns the namespace the given class belongs * (even if it's a nested class) */ public static CsmNamespace getClassNamespace(CsmClass cls) { CsmScope scope = cls.getScope(); while( scope != null && CsmKindUtilities.isClass(scope) ) { CsmClass outer = (CsmClass)scope; scope = outer.getScope(); } return CsmKindUtilities.isNamespace(scope) ? (CsmNamespace) scope : null; }
private static void visitDeclarations(Collection<? extends CsmOffsetableDeclaration> decls, StatisticsParameters params, XRefResultSet<XRefEntry> bag, PrintWriter printOut, OutputWriter printErr, AtomicBoolean canceled) { for (CsmOffsetableDeclaration decl : decls) { if (CsmKindUtilities.isFunctionDefinition(decl)) { handleFunctionDefinition((CsmFunctionDefinition) decl, params, bag, printOut, printErr); } else if (CsmKindUtilities.isNamespaceDefinition(decl)) { visitDeclarations(((CsmNamespaceDefinition) decl).getDeclarations(), params, bag, printOut, printErr, canceled); } else if (CsmKindUtilities.isClass(decl)) { visitDeclarations(((CsmClass) decl).getMembers(), params, bag, printOut, printErr, canceled); } if (canceled.get()) { break; } } }
private static Iterator<? extends CsmObject> getInnerObjectsIterator(CsmFilter offsetFilter, CsmScope scope) { Iterator<? extends CsmObject> out; if (CsmKindUtilities.isFile(scope)) { out = CsmSelect.getDeclarations((CsmFile)scope, offsetFilter); } else if (CsmKindUtilities.isNamespaceDefinition(scope)) { out = CsmSelect.getDeclarations(((CsmNamespaceDefinition)scope), offsetFilter); } else if (CsmKindUtilities.isClass(scope)) { out = CsmSelect.getClassMembers(((CsmClass)scope), offsetFilter); } else { out = scope.getScopeElements().iterator(); } return out; }
@Override public boolean isBuiltInBased(boolean resolveTypeChain) { CsmClassifier classifier; if (resolveTypeChain) { classifier = getClassifier(); if (CsmKindUtilities.isTypedef(classifier) || CsmKindUtilities.isTypeAlias(classifier)) { return ((CsmTypedef)classifier).getType().isBuiltInBased(true); } } else { classifier = _getClassifier(); } return CsmKindUtilities.isBuiltIn(classifier); }
private void visitDeclarations(Set<CsmClass> classes, Collection<CsmOffsetableDeclaration> decls, final int caretOffset) { for(CsmOffsetableDeclaration decl : decls) { if (!isApplicable) { return; } if (CsmKindUtilities.isNamespaceDefinition(decl)) { if (decl.getStartOffset() <= caretOffset && caretOffset <= decl.getEndOffset()) { visitDeclarations(classes, ((CsmNamespaceDefinition)decl).getDeclarations(), caretOffset); } } else { if (decl.getStartOffset() <= caretOffset && caretOffset <= decl.getEndOffset()) { isApplicable = false; } if (CsmKindUtilities.isMethodDefinition(decl)) { CsmFunction declaration = ((CsmFunctionDefinition)decl).getDeclaration(); if (CsmKindUtilities.isFunctionDeclaration(declaration) && CsmKindUtilities.isClassMember(declaration)) { CsmMember method = (CsmMember) declaration; CsmClass cls = method.getContainingClass(); if (cls != null) { classes.add(cls); } } } } } }
@Override public boolean check(CsmType value) { CsmClassifier cls = value.getClassifier(); return CsmKindUtilities.isTemplate(cls); }
private static CsmFunctionPointerType tryGetFunctionPointerType(CsmType type) { int iteration = MAX_DEPTH; while (type != null && iteration != 0) { if (CsmKindUtilities.isFunctionPointerType(type)) { return (CsmFunctionPointerType) type; } CsmClassifier cls = type.getClassifier(); if (CsmKindUtilities.isTypedef(cls) || CsmKindUtilities.isTypeAlias(cls)) { CsmTypedef td = (CsmTypedef) cls; type = td.getType(); } else { break; } iteration--; } return null; }
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); } } }