@Override public Iterator<CsmInclude> getIncludes(CsmFile file, CsmFilter filter) { if (file instanceof FileImpl){ return ((FileImpl)file).getIncludes(filter); } return file.getIncludes().iterator(); }
private boolean hasNonEmptyIncludes(CsmFile fileImpl) { for (Iterator<CsmInclude> it = fileImpl.getIncludes().iterator(); it.hasNext();) { CsmInclude inc = it.next(); if (inc.getIncludeFile() != null) { return true; } } return false; }
private static void findResolved(final Set<String> names, final Set<CsmFile> resolved, final CsmFile file) { for (CsmInclude incl : file.getIncludes()) { String name = incl.getIncludeName().toString(); int i = Math.max(name.lastIndexOf('\\'), name.lastIndexOf('/')); if (i > 0) { name = name.substring(i); } if (names.contains(name)) { resolved.add(file); break; } } }
public static CsmInclude findInclude(CsmFile csmFile, int offset) { assert (csmFile != null); return CsmOffsetUtilities.findObject(csmFile.getIncludes(), null, offset); }
private void buildWhoIsIncluded(CsmFile file, Map<CsmFile,Set<CsmFile>> map){ Set<CsmFile> includes = map.get(file); if (includes != null){ return; } includes = new HashSet<CsmFile>(); map.put(file, includes); for(CsmInclude include : file.getIncludes()){ CsmFile included = include.getIncludeFile(); if (included != null){ includes.add(included); buildWhoIsIncluded(included, map); } } }
private void buildWhoIncludes(CsmFile file, Map<CsmFile,Set<CsmFile>> map){ for(CsmInclude include : file.getIncludes()){ CsmFile included = include.getIncludeFile(); if (included != null){ Set<CsmFile> back = map.get(included); if (back == null){ back = new HashSet<CsmFile>(); map.put(included,back); } if (!back.contains(file)) { back.add(file); buildWhoIncludes(included, map); } } } }
private void gatherIncludeMacros(CsmFile file, Set<CsmFile> visitedFiles) { if( visitedFiles.contains(file) ) { return; } visitedFiles.add(file); for (Iterator<CsmInclude> iter = file.getIncludes().iterator(); iter.hasNext();) { CsmInclude inc = iter.next(); CsmFile incFile = inc.getIncludeFile(); if( incFile != null ) { getFileLocalMacros(incFile); gatherIncludeMacros(incFile, visitedFiles); } } }
private String getIncludeName(CsmFile file, int offset) { for (CsmInclude inc : file.getIncludes()) { if (inc.getStartOffset() == offset) { if(inc.isSystem()) { StringBuilder sb = new StringBuilder("<"); // NOI18N sb.append(inc.getIncludeName().toString()); sb.append(">"); // NOI18N return sb.toString(); } else { StringBuilder sb = new StringBuilder("\""); // NOI18N sb.append(inc.getIncludeName().toString()); sb.append("\""); // NOI18N return sb.toString(); } } } return null; }
private static CsmInclude findFirstLevelInclude(CsmFile startFile, CsmFile searchFile) { assert startFile != null : "start file must be not null"; assert searchFile != null : "search file must be not null"; for (CsmInclude incl : startFile.getIncludes()) { CsmFile included = incl.getIncludeFile(); if (searchFile.equals(included)) { return incl; } else if (included != null && included.getDeclarations().isEmpty()) { // this is a fake include only file return findFirstLevelInclude(included, searchFile); } } return null; }
private OffsetsObjects getFileOffsets(){ synchronized(lock) { if (offsets == null) { offsets = new OffsetsObjects(new ArrayList<Offsets>(), new ArrayList<Offsets>()); for(CsmOffsetableDeclaration declaration : csmFile.getDeclarations()){ offsets.fileDeclarationsOffsets.add(new Offsets(declaration)); } for(CsmInclude declaration : csmFile.getIncludes()){ offsets.fileObjectOffsets.add(new Offsets(declaration)); } for(CsmMacro declaration : csmFile.getMacros()){ offsets.fileObjectOffsets.add(new Offsets(declaration)); } Collections.sort(offsets.fileObjectOffsets); Collections.sort(offsets.fileDeclarationsOffsets); } return offsets; } }
@Override public Collection<CsmReference> getIncludes(CsmFile referencedFile) { CsmProject project = referencedFile.getProject(); if (project instanceof ProjectBase) { List<CsmReference> res = new ArrayList<>(); for (CsmFile file : getReferences((ProjectBase)project, referencedFile)){ for (CsmInclude include : file.getIncludes()){ if (referencedFile.equals(include.getIncludeFile())){ res.add(CsmReferenceSupport.createObjectReference(include.getIncludeFile(), include)); } } } return res; } return Collections.<CsmReference>emptyList(); }
private boolean hasBrokenIncludes(CsmFile file, Collection<CsmFile> visited) { if (visited.contains(file)) { return false; } visited.add(file); if (CsmFileInfoQuery.getDefault().hasBrokenIncludes(file)) { return true; } for (CsmInclude incl : file.getIncludes()) { CsmFile newFile = incl.getIncludeFile(); if (newFile != null && hasBrokenIncludes(newFile, visited)) { return true; } } return false; }
private CsmInclude getFirstBrokenIncludeInsideIncludedFiles(CsmFile file, Collection<CsmFile> visited) { if (visited.contains(file)) { return null; } visited.add(file); if (CsmFileInfoQuery.getDefault().hasBrokenIncludes(file)) { Collection<CsmInclude> brokenIncludes = CsmFileInfoQuery.getDefault().getBrokenIncludes(file); if (!brokenIncludes.isEmpty()) { return brokenIncludes.iterator().next(); } } for (CsmInclude incl : file.getIncludes()) { CsmFile newFile = incl.getIncludeFile(); if (newFile != null) { CsmInclude brokenIncl = getFirstBrokenIncludeInsideIncludedFiles(newFile, visited); if (brokenIncl != null) { return brokenIncl; } } } return null; } }
private static void gatherIncludeMacros(CsmFile file, CsmProject prj, boolean own, Set<CsmFile> visitedFiles, Set<CharSequence> alredyInList, List<CsmMacro> res, CharSequence strPrefix, boolean match, boolean caseSensitive) { if( visitedFiles.contains(file) ) { return; } visitedFiles.add(file); for (Iterator<CsmInclude> iter = file.getIncludes().iterator(); iter.hasNext();) { CsmInclude inc = iter.next(); CsmFile incFile = inc.getIncludeFile(); if( incFile != null ) { if (own) { if (incFile.getProject() == prj) { getFileLocalMacros(incFile, res, alredyInList, strPrefix, match, caseSensitive); gatherIncludeMacros(incFile, prj, own, visitedFiles, alredyInList, res, strPrefix, match, caseSensitive); } } else { if (incFile.getProject() != prj) { getFileLocalMacros(incFile, res, alredyInList, strPrefix, match, caseSensitive); } gatherIncludeMacros(incFile, prj, own, visitedFiles, alredyInList, res, strPrefix, match, caseSensitive); } } } }
Collection<CsmInclude> includes = csmFile.getIncludes(); for (CsmInclude csmInclude : includes) { if (includedFile.equals(csmInclude.getIncludeFile())) {
int offset = info.getIncludeDirectiveOffset(); CsmInclude find = null; for(CsmInclude inc : startFile.getIncludes()){ if (offset == inc.getStartOffset()){ find = inc;
@Override public boolean isKindOf(CsmReference ref, Set<CsmReferenceKind> kinds) { if (kinds.equals(CsmReferenceKind.ALL) || kinds.contains(ref.getKind())) { return true; } CsmFile file = ref.getContainingFile(); int offset = ref.getStartOffset(); if (kinds.contains(CsmReferenceKind.IN_DEAD_BLOCK)) { if (isIn(CsmFileInfoQuery.getDefault().getUnusedCodeBlocks(file, Interrupter.DUMMY), offset)) { return true; } } if (kinds.contains(CsmReferenceKind.IN_PREPROCESSOR_DIRECTIVE)) { if (isIn(file.getIncludes(), offset)) { return true; } if (isIn(file.getMacros(), offset)) { return true; } } return false; }
private static List<KindAndSignature> createFileSignature(CsmFile csmFile) { Collection<FileElement> fileElements = new TreeSet<>(PAIR_COMPARATOR); for (CsmInclude element : csmFile.getIncludes()) { // TODO: what about system vs user, shouldn't it be part of Utils.getCsmIncludeKindKey? CharAndCharSequence cs = new CharAndCharSequence(element.getIncludeName(), Utils.getCsmIncludeKindKey()); FileElement fe = new FileElement(element.getStartOffset(), cs); fileElements.add(fe); } for (CsmMacro element : csmFile.getMacros()) { MacroCharSequence cs = new MacroCharSequence(element.getName(), element.getBody(), Utils.getCsmDeclarationKindkey(CsmDeclaration.Kind.MACRO)); FileElement fe = new FileElement(element.getStartOffset(), cs); fileElements.add(fe); } for (CsmOffsetableDeclaration element : csmFile.getDeclarations()) { addDeclarationAndNested(fileElements, element); } ArrayList<KindAndSignature> out = new ArrayList<>(fileElements.size()); for (FileElement fe : fileElements) { out.add(fe.signature); } out.trimToSize(); return out; }
@Override public Action getPreferredAction() { if (object.isValid()) { Node parent = getParentNode(); if (parent instanceof IncludeNode){ CsmFile find = ((IncludeNode)parent).object; for (final CsmInclude inc : object.getIncludes()){ if (find.equals(inc.getIncludeFile())) { if (CsmKindUtilities.isOffsetable(inc)){ return new GoToFileAction(inc, model.getCloseWindowAction()); } break; } else if (object.equals(inc.getIncludeFile())){ if (CsmKindUtilities.isOffsetable(inc)){ return new GoToFileAction(inc, model.getCloseWindowAction()); } } } } return new GoToFileAction(object, model.getCloseWindowAction()); } return null; }
@Override protected void doGetErrors(CsmErrorProvider.Request request, CsmErrorProvider.Response response) { CsmFile file = request.getFile(); Thread currentThread = Thread.currentThread(); currentThread.setName("Provider "+getName()+" prosess "+file.getAbsolutePath()); // NOI18N for(CsmInclude incl : CsmFileInfoQuery.getDefault().getBrokenIncludes(file)) { if (request.isCancelled()) { break; } if (incl.getIncludeState() == IncludeState.Recursive) { response.addError(new IncludeErrorInfo(incl)); } else if(incl.getIncludeFile() == null) { response.addError(new IncludeErrorInfo(incl)); } } for (CsmErrorDirective error : file.getErrors()) { response.addError(new ErrorDirectiveInfo(error)); } Collection<CsmFile> visited = new HashSet<CsmFile>(); for (CsmInclude incl : file.getIncludes()) { CsmFile newFile = incl.getIncludeFile(); if (newFile != null && hasBrokenIncludes(newFile, visited)) { response.addError(new IncludeWarningInfo(incl)); } } }