//various getter/setter methods related to module extends aspect JAModuleExtends { protected ModuleCompilationUnit ModuleCompilationUnit.superModuleCU = null; public void ModuleCompilationUnit.setSuperModuleCU(ModuleCompilationUnit superModuleCU) { this.superModuleCU = superModuleCU; } public ModuleCompilationUnit ModuleCompilationUnit.getSuperModuleCU() { return this.superModuleCU; } public boolean ModuleCompilationUnit.hasSuperModule() { return getModuleDecl().hasExtends() && (getHostProgram().lookupModuleCUNoTransform(getModuleDecl().getExtends())!= null); } syn lazy ModuleCompilationUnit ModuleCompilationUnit.getSuperModuleCUNoTransform() { if (!hasSuperModule()) { return null; } return getHostProgram().lookupModuleCUNoTransform(getModuleDecl().getExtends()); } //only gets non-implicit members syn lazy LinkedList ModuleCompilationUnit.getSuperMemberList() { LinkedList ret = new LinkedList(); if (getSuperInstance() != null) { ret.addAll(getSuperInstance().getSuperMemberList()); } for (ModuleMemberDecl member : getModuleMemberDeclList()) { //don't get the implicit imports (specifically jastadd$framework) if (!(member instanceof ImplicitModuleImportDecl)) { ret.add(member); } } return ret; } //collects non-implicit members of supers, then all of self syn lazy LinkedList ModuleCompilationUnit.getSelfAndSuperMemberList() { LinkedList ret = new LinkedList(); if (getSuperInstance() != null) { ret.addAll(getSuperInstance().getSuperMemberList()); } for (ModuleMemberDecl member : getModuleMemberDeclList()) { ret.add(member); } return ret; } //only gets non-implicit members, using the no transform super lookup syn lazy LinkedList ModuleCompilationUnit.getSuperMemberListNoTransform() { LinkedList ret = new LinkedList(); if (getSuperModuleCUNoTransform() != null) { ret.addAll(getSuperModuleCUNoTransform().getSuperMemberListNoTransform()); } for (ModuleMemberDecl member : getModuleMemberDeclList()) { //don't get the implicit imports (specifically jastadd$framework) if (!(member instanceof ImplicitModuleImportDecl)) { ret.add(member); } } return ret; } //collects non-implicit members of supers, then all of self, using the no transform lookup syn lazy LinkedList ModuleCompilationUnit.getSelfAndSuperMemberListNoTransform() { LinkedList ret = new LinkedList(); if (getSuperModuleCUNoTransform() != null) { ret.addAll(getSuperModuleCUNoTransform().getSuperMemberListNoTransform()); } for (ModuleMemberDecl member : getModuleMemberDeclList()) { ret.add(member); } return ret; } //also true for self public boolean ModuleCompilationUnit.hasSuperModule(ModuleCompilationUnit mcu) { ModuleCompilationUnit currentMCU = this.getBaseCU(); while (currentMCU != null) { if (currentMCU == mcu.getBaseCU()) { return true; } currentMCU = currentMCU.getSuperModuleCUNoTransform(); } return false; } syn boolean TypeDecl.isOverriden() { ModuleCompilationUnit mcu = compilationUnit().getModuleCompilationUnit(); if (mcu == null || !mcu.isSuperInstance()) { return false; } SimpleSet s = mcu.moduleLookupType(this.moduleLocalPackageName(), this.name(), false); assert (s.size() == 1) : "Type looking up itself unable to find a type: " + this.typeName(); TypeDecl type = (TypeDecl) (s.iterator().next()); return type != this; } }