if(node.getName() != null ) node.getName().apply(this, question); if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) node.getClassDefinition().apply(this, question); if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) node.getAccess().apply(this, question); if(node.getType() != null && !_visitedNodes.contains(node.getType())) node.getType().apply(this, question); List<PType> copy = new ArrayList<PType>(node.getSupertypes()); for( PType e : copy) List<ILexNameToken> copy = new ArrayList<ILexNameToken>(node.getSupernames()); for( ILexNameToken e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getAllInheritedDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getLocalInheritedDefinitions());
private List<LexNameTokenWrapper> getMethodNames( AClassClassDefinition classDef) { List<LexNameTokenWrapper> methodNames = new LinkedList<LexNameTokenWrapper>(); List<PDefinition> allDefs = new LinkedList<PDefinition>(); LinkedList<PDefinition> defs = classDef.getDefinitions(); LinkedList<PDefinition> inheritedDefs = classDef.getAllInheritedDefinitions(); allDefs.addAll(defs); allDefs.addAll(inheritedDefs); for (PDefinition def : allDefs) { if (def instanceof SOperationDefinition || def instanceof SFunctionDefinition) { methodNames.add(new LexNameTokenWrapper(def.getName())); } } return methodNames; }
@Override public void inAClassClassDefinition(AClassClassDefinition node) throws AnalysisException { if (node.getSupernames().size() > 1) { int nonFullyAbstract = 0; for(SClassDefinition s : node.getSuperDefs()) { if(!info.getDeclAssistant().isFullyAbstract(s, info)) { nonFullyAbstract++; if (nonFullyAbstract > 1) { info.addUnsupportedNode(node, "Multiple inheritance not supported."); } } } } }
@Override public List<PExp> caseAClassClassDefinition(AClassClassDefinition node) throws AnalysisException { List<PExp> r = new LinkedList<PExp>(); for (PDefinition p : node.getDefinitions()) { r.addAll(p.apply(mainVisitor)); } return r; }
@Override public String caseAClassClassDefinition(AClassClassDefinition node, PrettyPrinterEnv question) throws AnalysisException { StringBuffer sb = new StringBuffer(); question.setClassName(node.getName().getName()); sb.append("class " + node.getName()); sb.append("\n"); // print types printDefsToStringBuffer(sb, node, question, ATypeDefinition.class); printDefsToStringBuffer(sb, node, question, AValueDefinition.class); printDefsToStringBuffer(sb, node, question, AInstanceVariableDefinition.class); printDefsToStringBuffer(sb, node, question, AExplicitOperationDefinition.class); printDefsToStringBuffer(sb, node, question, AExplicitFunctionDefinition.class); sb.append("end " + node.getName()); return sb.toString(); }
@Override public void caseAClassClassDefinition(AClassClassDefinition node) throws AnalysisException { if (enclosingDef != null) { return; } visitModuleDefs(node.getDefinitions(), node); }
innerclassType.setName(enclosingClass.getName() + "_sentinel"); history.setSentinelType(innerclassType); } else
if(node.getName() != null ) node.getName().apply(this); if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) node.getClassDefinition().apply(this); if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) node.getAccess().apply(this); if(node.getType() != null && !_visitedNodes.contains(node.getType())) node.getType().apply(this); List<PType> copy = new ArrayList<PType>(node.getSupertypes()); for( PType e : copy) List<ILexNameToken> copy = new ArrayList<ILexNameToken>(node.getSupernames()); for( ILexNameToken e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getAllInheritedDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getLocalInheritedDefinitions());
Class<? extends PDefinition> pDefClass) throws AnalysisException List<PDefinition> defs = getDefinitions(node.getDefinitions(), pDefClass);
if(node.getName() != null ) node.getName().apply(this); if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) node.getClassDefinition().apply(this); if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) node.getAccess().apply(this); if(node.getType() != null && !_visitedNodes.contains(node.getType())) node.getType().apply(this); List<PType> copy = new ArrayList<PType>(node.getSupertypes()); for( PType e : copy) List<ILexNameToken> copy = new ArrayList<ILexNameToken>(node.getSupernames()); for( ILexNameToken e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getAllInheritedDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getLocalInheritedDefinitions());
@Override public IProofObligationList caseAClassClassDefinition( AClassClassDefinition node, IPOContextStack question) throws AnalysisException { try { IProofObligationList proofObligationList = new ProofObligationList(); question.setGenerator(new UniqueNameGenerator(node)); for (PDefinition def : node.getDefinitions()) { question.push(new PONameContext(assistantFactory.createPDefinitionAssistant().getVariableNames(def))); proofObligationList.addAll(def.apply(mainVisitor, question)); question.pop(); question.clearStateContexts(); } return proofObligationList; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
if(node.getName() != null ) mergeReturns(retVal,node.getName().apply(this, question)); if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) mergeReturns(retVal,node.getClassDefinition().apply(this, question)); if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) mergeReturns(retVal,node.getAccess().apply(this, question)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) mergeReturns(retVal,node.getType().apply(this, question)); List<PType> copy = new ArrayList<PType>(node.getSupertypes()); for( PType e : copy) List<ILexNameToken> copy = new ArrayList<ILexNameToken>(node.getSupernames()); for( ILexNameToken e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getAllInheritedDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getLocalInheritedDefinitions());
if(node.getName() != null ) mergeReturns(retVal,node.getName().apply(this)); if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) mergeReturns(retVal,node.getClassDefinition().apply(this)); if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) mergeReturns(retVal,node.getAccess().apply(this)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) mergeReturns(retVal,node.getType().apply(this)); List<PType> copy = new ArrayList<PType>(node.getSupertypes()); for( PType e : copy) List<ILexNameToken> copy = new ArrayList<ILexNameToken>(node.getSupernames()); for( ILexNameToken e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getAllInheritedDefinitions()); for( PDefinition e : copy) List<PDefinition> copy = new ArrayList<PDefinition>(node.getLocalInheritedDefinitions());