@Override public Collection<CsmInheritance> getBaseClasses() { if (inheritances == null) { List<CsmInheritance> res = new ArrayList<>(1); for (CsmInheritance inh : declaration.getBaseClasses()) { if (canSkipInstantiation(inh, mapping)) { res.add(inh); } else { res.add(new Inheritance(inh, this)); } } inheritances = res.isEmpty() ? Collections.<CsmInheritance>emptyList() : res; } return inheritances; }
private void buildSuperHierarchy(CsmClass cls, Map<CsmClass,Set<CsmClass>> map){ Set<CsmClass> back = map.get(cls); if (back != null) { return; } back = new HashSet<CsmClass>(); map.put(cls, back); Collection<CsmInheritance> list = cls.getBaseClasses(); if (list != null && list.size() >0){ for(CsmInheritance inh : list){ CsmClass c = getClassDeclaration(inh); if (c != null) { back.add(c); buildSuperHierarchy(c, map); } } } }
for (Iterator<CsmInheritance> it2 = csmClass.getBaseClasses().iterator(); it2.hasNext();) { CsmInheritance inherit = it2.next(); CsmClass baseClass = CsmInheritanceUtilities.getCsmClass(inherit);
List<CsmClass> toAnalyze = getClassesContainers(cls); for (CsmClass csmClass : toAnalyze) { for (CsmInheritance inh : csmClass.getBaseClasses()) { CsmClass base = getInheritanceClass(inh); if (base != null && !antiLoop.contains(base.getQualifiedName())) {
if (CsmKindUtilities.isClass(decl)) { CsmClass cls = (CsmClass) decl; Collection<CsmInheritance> base = cls.getBaseClasses(); if (!base.isEmpty()) { try {
for (CsmInheritance csmInheritance : typeElement.getBaseClasses()) { CsmClass baseClass = CsmInheritanceUtilities.getCsmClass(csmInheritance); if (baseClass != null) {
try { for (CsmInheritance csmInheritance : typeElement.getBaseClasses()) { CsmClass baseClass = CsmInheritanceUtilities.getCsmClass(csmInheritance); if (baseClass != null) {
private void getVirtualMethods(Set<CsmMethod> res, CsmClass cls, Set<AntiLoopElement> antiLoop) { AntiLoopElement element = new AntiLoopElement(cls); if (antiLoop.contains(element)) { return; } antiLoop.add(element); Collection<CsmInheritance> baseClasses = cls.getBaseClasses(); for(CsmInheritance inh : baseClasses) { element = new AntiLoopElement(inh); if (antiLoop.contains(element)) { continue; } antiLoop.add(element); CsmClassifier classifier = inh.getClassifier(); if (CsmKindUtilities.isClass(classifier)/* && !CsmKindUtilities.isInstantiation(classifier)*/) { CsmClass c = (CsmClass) classifier; getVirtualMethods(res, c, antiLoop); for(CsmMember member : c.getMembers()) { if(CsmKindUtilities.isMethod(member)) { if (CsmVirtualInfoQuery.getDefault().isVirtual((CsmMethod) member)) { res.add((CsmMethod) member); } } } } } }
private void getSuperClasses(CsmClass cls, CharSequence name, List<CsmMember> res, boolean first, ClassifiersAntiLoop antiLoop){ if (first && !res.isEmpty()) { return; } if (antiLoop.contains(cls)){ return; } antiLoop.add(cls); for(CsmInheritance inh : cls.getBaseClasses()){ CsmVisibility v = inh.getVisibility(); switch (v){ case PRIVATE: break; default: CsmClass base = CsmInheritanceUtilities.getCsmClass(inh); if (base != null) { getClassMembers(base, name, res, first); getSuperClasses(base, name, res, first, antiLoop); } } if (first && !res.isEmpty()) { return; } } }
if (CsmKindUtilities.isClass(decl)) { CsmClass cls = (CsmClass) decl; Collection<CsmInheritance> base = cls.getBaseClasses(); if (!base.isEmpty()) { try {
private static CsmFunction getOperatorCheckBaseClasses(CsmClass cls, CsmFile contextFile, int offset, CsmFilter filter, CsmFunction.OperatorKind opKind, ClassifiersAntiLoop antiLoop) { if (antiLoop.contains(cls)) { return null; } antiLoop.add(cls); Iterator<CsmMember> it = CsmSelect.getClassMembers(cls, filter); while (it.hasNext()) { CsmMember member = it.next(); if (CsmKindUtilities.isOperator(member)) { if (((CsmFunction) member).getOperatorKind() == opKind) { return (CsmFunction) member; } } } // now check base classes as well for (CsmInheritance csmInheritance : cls.getBaseClasses()) { CsmClassifier baseClassifier = getClassifier(csmInheritance.getAncestorType(), contextFile, offset); if (CsmKindUtilities.isClass(baseClassifier)) { CsmFunction operatorFun = getOperatorCheckBaseClasses((CsmClass) baseClassifier, contextFile, offset, filter, opKind, antiLoop); if (operatorFun != null) { return operatorFun; } } } return null; }
private static void addDeclarationAndNested(Collection<FileElement> toAdd, CsmOffsetableDeclaration outDecl) { // TODO: what about function return value? // TODO: what about function params? // TODO: what about const/virtual attributes? // TODO: what about static? CharAndCharSequence cs = new CharAndCharSequence(outDecl.getQualifiedName(), Utils.getCsmDeclarationKindkey(outDecl.getKind())); FileElement fe = new FileElement(outDecl.getStartOffset(), cs); toAdd.add(fe); Iterator<? extends CsmOffsetableDeclaration> it = null; if (CsmKindUtilities.isNamespaceDefinition(outDecl)) { it = ((CsmNamespaceDefinition) outDecl).getDeclarations().iterator(); } else if (CsmKindUtilities.isClass(outDecl)) { CsmClass cl = (CsmClass) outDecl; it = cl.getMembers().iterator(); for (CsmInheritance inh : cl.getBaseClasses()) { CharAndCharSequence csi = new CharAndCharSequence(inh.getAncestorType().getClassifierText(), Utils.getCsmInheritanceKindKey(inh)); toAdd.add(new FileElement(inh.getStartOffset(), csi)); } } else if (CsmKindUtilities.isEnum(outDecl)) { CsmEnum en = (CsmEnum) outDecl; it = en.getEnumerators().iterator(); } if (it != null) { while (it.hasNext()) { CsmOffsetableDeclaration decl = (CsmOffsetableDeclaration) it.next(); addDeclarationAndNested(toAdd, decl); } } }
try { for (CsmInheritance csmInheritance : typeElement.getBaseClasses()) { CsmClass baseClass = CsmInheritanceUtilities.getCsmClass(csmInheritance); if (baseClass != null) {
for (Iterator<CsmInheritance> it2 = csmClass.getBaseClasses().iterator(); it2.hasNext();) { CsmInheritance inherit = it2.next(); CsmClass baseClass = CsmInheritanceUtilities.getCsmClass(inherit);
Collection<CsmInheritance> baseClasses = cls.getBaseClasses(); for (CsmInheritance inheritance : baseClasses) { CsmClass baseClass = CsmInheritanceUtilities.getCsmClass(inheritance);
Collection<CsmInheritance> inherits = clazz.getBaseClasses(); CsmInheritance inh = CsmOffsetUtilities.findObject(inherits, context, offset); if (inh != null && !CsmOffsetUtilities.sameOffsets(clazz, inh)) {