@Override public CsmFile getContainingFile() { return include.getIncludeFile(); }
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; }
/*package*/ IncludeTarget findTargetObject(final Document doc, final int offset) { CsmInclude incl = findInclude(doc, offset); IncludeTarget item = incl == null ? null : new IncludeTarget(incl); if (incl != null && NEED_TO_TRACE_UNRESOLVED_INCLUDE && incl.getIncludeFile() == null) { System.setProperty("cnd.modelimpl.trace.trace_now", "yes"); //NOI18N try { incl.getIncludeFile(); } finally { System.setProperty("cnd.modelimpl.trace.trace_now", "no"); //NOI18N } } return item; }
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); } } }
@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 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 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; }
public static CsmObject convertToCsmObjectIfNeeded(CsmObject referencedObject) { if (CsmKindUtilities.isInclude(referencedObject)) { referencedObject = ((CsmInclude) referencedObject).getIncludeFile(); } else if (CsmKindUtilities.isFunctionDefinition(referencedObject)) { CsmFunction decl = CsmBaseUtilities.getFunctionDeclaration((CsmFunction) referencedObject); if (decl != null) { referencedObject = decl; } } return referencedObject; }
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())) { refs.add(CsmReferenceSupport.createObjectReference(includedFile, csmInclude));
@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; }
break; CsmFile incFile = inc.getIncludeFile(); if (incFile != null) { gatherMaps(incFile, Integer.MAX_VALUE, out);
public static CsmFile findFile(Node[] activatedNodes) { if (activatedNodes != null && activatedNodes.length > 0) { if (ContextUtils.USE_REFERENCE_RESOLVER) { CsmReference ref = ContextUtils.findReference(activatedNodes[0]); if (ref != null){ if (ref.getClosestTopLevelObject() != null) { if (CsmKindUtilities.isInclude(ref.getClosestTopLevelObject())) { CsmInclude incl = (CsmInclude) ref.getClosestTopLevelObject(); CsmFile file = incl.getIncludeFile(); if (file != null) { return file; } } } } } return ContextUtils.findFile(activatedNodes[0]); } 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)); } } }
public boolean goToInclude(Document doc, JTextComponent target, int offset, HyperlinkType type) { if (!preJump(doc, target, offset, "opening-include-element", type)) { //NOI18N return false; } IncludeTarget item = findTargetObject(doc, offset); if (type == HyperlinkType.ALT_HYPERLINK && ((item != null))) { CsmInclude incl = item.getInclude(); CsmFile toShow = incl.getIncludeFile(); if (toShow == null) { toShow = incl.getContainingFile(); } else { CsmInclude brokenInclude = getFirstBrokenIncludeInsideIncludedFiles(toShow, new HashSet<CsmFile>()); if (brokenInclude != null) { toShow = brokenInclude.getContainingFile(); // jump into problem file return postJump(brokenInclude, "goto_source_source_not_found", "cannot-open-include-element");//NOI18N } } CsmIncludeHierarchyResolver.showIncludeHierachyView(toShow); return true; } else { return postJump(item, "goto_source_source_not_found", "cannot-open-include-element");//NOI18N } }
localEndPoint = localReturnPoint; CsmFile incFile = inc.getIncludeFile(); if( incFile != null && (onlyInProject == null || incFile.getProject() == onlyInProject)) {
private TokenStream getTokenStreamOfIncludedFile(final CsmInclude include) { FileImpl file = (FileImpl) include.getIncludeFile(); if (file != null && file.isValid()) { // create ppHandler till #include directive PreprocessorStatePair includeContextPair = this.getContextPreprocStatePair(include.getStartOffset(), include.getEndOffset()); if (includeContextPair == null) { return file.getTokenStream(0, Integer.MAX_VALUE, 0, true); } APTPreprocHandler.State thisFileStartState = includeContextPair.state; LinkedList<APTIncludeHandler.IncludeInfo> reverseInclStack = APTHandlersSupport.extractIncludeStack(thisFileStartState); reverseInclStack.addLast(new IncludeInfoImpl(include, file.getAbsolutePath())); ProjectBase projectImpl = getProjectImpl(true); if (projectImpl == null) { return file.getTokenStream(0, Integer.MAX_VALUE, 0, true); } APTPreprocHandler preprocHandler = projectImpl.createEmptyPreprocHandler(getAbsolutePath()); APTPreprocHandler restorePreprocHandlerFromIncludeStack = projectImpl.restorePreprocHandlerFromIncludeStack(reverseInclStack, getAbsolutePath(), preprocHandler, thisFileStartState, Interrupter.DUMMY); // using restored preprocessor handler, ask included file for parsing token stream filtered by language TokenStream includedFileTS = file.createParsingTokenStreamForHandler(restorePreprocHandlerFromIncludeStack, true, null, null); if(includedFileTS != null) { APTLanguageFilter languageFilter = file.getLanguageFilter(thisFileStartState); return languageFilter.getFilteredStream(includedFileTS); } } return null; }