diff --git a/TypeNodes.py b/TypeNodes.py index dd70d57a76e30d53674b09f673baa24dd3310239..17fc44af3ed30d532346be2aa4f07fde897d97d6 100644 --- a/TypeNodes.py +++ b/TypeNodes.py @@ -40,7 +40,7 @@ class ClassInterNode(ASTNode): # 9. A class or interface must not contain (declare or inherit) two methods with the same signature but different return types # 11. A nonstatic method must not replace a static method # 13. A protected method must not replace a public method - return self.getContains([]) + self.contains = self.getContains([]) def getContains(self, hierarchy): # check if not acyclic @@ -176,17 +176,15 @@ class ClassNode(ClassInterNode): raise Exception("ERROR: Class '{}' declares 2 constructors with the same parameter types".format(self.name)) unique.append(key) - # centralized point for overlapping class & interface logic - contains = super().checkHierarchy() + # centralized point for overlapping class & interface logic. Also sets self.contains + super().checkHierarchy() # 10. A class that contains (declares or inherits) any abstract methods must be abstract. - for con in contains: + for con in self.contains: if 'abstract' in con.mods and (not('abstract' in self.mods)): raise Exception("ERROR: Non-abstract Class '{}' contains an abstract method".format(self.name)) if (not con.body) and (not ('native' in con.mods)) and (not ('abstract' in self.mods)) and (not (con in self.constructors)): raise Exception("ERROR: Non-abstract Class '{}' contains an abstract method {}".format(self.name, con.name)) - - self.contains = contains # hierarchy: string[] def getContains(self, hierarchy): @@ -290,8 +288,8 @@ class InterNode(ClassInterNode): raise Exception("ERROR: Interface '{}' extends duplicate interfaces '{}'".format(self.name, inter.name)) unique.append(inter.name) - # centralized point for overlapping class & interface logic - self.contains = super().checkHierarchy() + # centralized point for overlapping class & interface logic. Also sets self.contains + super().checkHierarchy() # hierarchy: string[] def getContains(self, hierarchy):