private boolean isVariableVisible(CsmFile currentFile, CsmProject project, CsmVariable var, HashSet<CsmProject> scannedProjects) { if (scannedProjects.contains(project)) { return false; } scannedProjects.add(project); if (isVariableDeclarationsVisible(currentFile, project.findDeclarations(var.getUniqueName() + " (EXTERN)"))) { // NOI18N return true; } if (isVariableDeclarationsVisible(currentFile, project.findDeclarations(var.getUniqueName()))) { return true; } for (CsmProject lib : project.getLibraries()) { if (isVariableVisible(currentFile, lib, var, scannedProjects)) { return true; } } return false; }
@Override public String getIncludeDirective(CsmFile currentFile, CsmObject item) { if (CsmKindUtilities.isOffsetable(item)) { CsmFile file = ((CsmOffsetable) item).getContainingFile(); if (file != null) { if (file.equals(currentFile) || file.isHeaderFile()) { return getIncludeDirectiveByFile(currentFile, item).replace('\\', '/'); // NOI18N; } else if (file.isSourceFile() && CsmKindUtilities.isGlobalVariable(item)) { Collection<CsmOffsetableDeclaration> decls = file.getProject().findDeclarations(((CsmVariable) item).getUniqueName() + " (EXTERN)"); // NOI18N if (!decls.isEmpty()) { return getIncludeDirectiveByFile(currentFile, decls.iterator().next()).replace('\\', '/'); // NOI18N; } } } else { System.err.println("can not find for item " + item); // NOI18N; } } else if (!CsmKindUtilities.isNamespace(item)) { System.err.println("not yet handled object " + item); // NOI18N; } return ""; // NOI18N }
@Override public String getLocalIncludeDerectiveByFilePath(FSPath path, CsmObject item) { if (CsmKindUtilities.isOffsetable(item)) { CsmFile incFile = ((CsmOffsetable) item).getContainingFile(); if (incFile != null) { if (incFile.isHeaderFile()) { return getLocalIncludeDerectiveByHeaderFilePath(path, item).replace('\\', '/'); // NOI18N; } else if (incFile.isSourceFile() && CsmKindUtilities.isGlobalVariable(item)) { Collection<CsmOffsetableDeclaration> decls = incFile.getProject().findDeclarations(((CsmVariable) item).getUniqueName() + " (EXTERN)"); // NOI18N if (!decls.isEmpty()) { return getLocalIncludeDerectiveByHeaderFilePath(path, decls.iterator().next()).replace('\\', '/'); // NOI18N; } } else if (incFile.isSourceFile() && CsmKindUtilities.isFunctionDefinition(item)) { return getLocalIncludeDerectiveByHeaderFilePath(path, ((CsmFunction) item).getDeclaration()).replace('\\', '/'); // NOI18N; } } else { System.err.println("can not find for item " + item); // NOI18N; } } else if (!CsmKindUtilities.isNamespace(item)) { System.err.println("not yet handled object " + item); // NOI18N; } return ""; // NOI18N }
private CsmFunctionDefinition findDefinition(CsmProject prj, String uname){ Collection<CsmOffsetableDeclaration> defs = prj.findDeclarations(uname); CsmDeclaration res = null; if (defs.isEmpty()) {
CsmProject project = file.getProject(); if (project != null){ Collection<CsmOffsetableDeclaration> arr = project.findDeclarations(name); for(CsmFriend friend : CsmFriendResolver.getDefault().findFriends(decl)){ if (CsmKindUtilities.isFriendMethod(friend)) { arr.addAll(project.findDeclarations(def.getUniqueName()));
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; }
Collection<? extends CsmDeclaration> prjDecls = getContainingFile().getProject().findDeclarations(uname); if (prjDecls.isEmpty()) { uname = ""+Utils.getCsmDeclarationKindkey(CsmDeclaration.Kind.FUNCTION_FRIEND) + UNIQUE_NAME_SEPARATOR + getUniqueNameWithoutPrefix(); //NOI18N prjDecls = getContainingFile().getProject().findDeclarations(uname);