public void checkOver(SClassDefinition c) { int inheritedThreads = 0; af.createSClassDefinitionAssistant().checkOverloads(c); List<List<PDefinition>> superlist = new Vector<List<PDefinition>>(); for (PDefinition def : c.getSuperDefs()) { SClassDefinition superdef = (SClassDefinition) def; List<PDefinition> inheritable = af.createSClassDefinitionAssistant().getInheritable(superdef); superlist.add(inheritable); if (checkOverrides(c, inheritable)) { inheritedThreads++; } } if (inheritedThreads > 1) { TypeCheckerErrors.report(3001, "Class inherits thread definition from multiple supertypes", c.getLocation(), c); } checkAmbiguities(c, superlist); }
private void setInheritedDefinitions(SClassDefinition definition) { List<PDefinition> indefs = new Vector<PDefinition>(); for (SClassDefinition sclass : definition.getSuperDefs()) { indefs.addAll(getInheritable(sclass)); } // The inherited definitions are ordered such that the // definitions, taken in order, will consider the overriding // members before others. List<PDefinition> superInheritedDefinitions = new Vector<PDefinition>(); for (PDefinition d : indefs) { superInheritedDefinitions.add(d); ILexNameToken localname = d.getName().getModifiedName(definition.getName().getName()); if (af.createPDefinitionListAssistant().findName(definition.getDefinitions(), localname, NameScope.NAMESANDSTATE) == null || af.createPDefinitionAssistant().isSubclassResponsibility(d)) { AInheritedDefinition local = AstFactory.newAInheritedDefinition(localname, d); definition.getLocalInheritedDefinitions().add(local); } } definition.setSuperInheritedDefinitions(superInheritedDefinitions); definition.setAllInheritedDefinitions(new Vector<PDefinition>()); definition.getAllInheritedDefinitions().addAll(superInheritedDefinitions); definition.getAllInheritedDefinitions().addAll(definition.getLocalInheritedDefinitions()); }
List<PDefinition> sdefs = getInheritable(sclass);