private void getFileLocalMacros(CsmFile file){ for (CsmMacro macro : file.getMacros()) { CharSequence name = macro.getName(); CsmUID<CsmMacro> uid = projectMacros.get(name); if (uid == null) { projectMacros.put(name, UIDs.get(macro)); } } }
@Override public Iterator<CsmMacro> getMacros(CsmFile file, CsmFilter filter) { if (file instanceof FileImpl){ Iterator<CsmMacro> res = analyzeFilter((FileImpl)file, filter); if (res != null) { return res; } return ((FileImpl)file).getMacros(filter); } return file.getMacros().iterator(); }
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 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; }