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 }