From: Steve L. <st...@us...> - 2005-12-21 13:26:12
|
Update of /cvsroot/smartfrog/core/extras/cdl/src/org/smartfrog/sfcore/languages/cdl/resolving In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26769/extras/cdl/src/org/smartfrog/sfcore/languages/cdl/resolving Modified Files: ExtendsResolver.java Log Message: More test suites, fixed up propagation of resolution state properly Index: ExtendsResolver.java =================================================================== RCS file: /cvsroot/smartfrog/core/extras/cdl/src/org/smartfrog/sfcore/languages/cdl/resolving/ExtendsResolver.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** ExtendsResolver.java 21 Dec 2005 10:00:31 -0000 1.15 --- ExtendsResolver.java 21 Dec 2005 13:25:57 -0000 1.16 *************** *** 26,32 **** import org.smartfrog.sfcore.languages.cdl.dom.ToplevelList; import org.smartfrog.sfcore.languages.cdl.faults.CdlException; import org.smartfrog.sfcore.languages.cdl.faults.CdlResolutionException; import org.smartfrog.sfcore.languages.cdl.faults.CdlXmlParsingException; - import org.smartfrog.sfcore.languages.cdl.faults.CdlInternalErrorException; import org.smartfrog.sfcore.languages.cdl.utils.ClassLogger; import org.smartfrog.sfcore.logging.Log; --- 26,32 ---- import org.smartfrog.sfcore.languages.cdl.dom.ToplevelList; import org.smartfrog.sfcore.languages.cdl.faults.CdlException; + import org.smartfrog.sfcore.languages.cdl.faults.CdlInternalErrorException; import org.smartfrog.sfcore.languages.cdl.faults.CdlResolutionException; import org.smartfrog.sfcore.languages.cdl.faults.CdlXmlParsingException; import org.smartfrog.sfcore.languages.cdl.utils.ClassLogger; import org.smartfrog.sfcore.logging.Log; *************** *** 83,87 **** document.replaceSystem((ToplevelList) newSystem); ResolveEnum state = newSystem.aggregateResolutionState(); ! if(!state.isParseTimeResolutionComplete()) { throw new CdlInternalErrorException("Incomplete parse time resolution"); } --- 83,87 ---- document.replaceSystem((ToplevelList) newSystem); ResolveEnum state = newSystem.aggregateResolutionState(); ! if (!state.isParseTimeResolutionComplete()) { throw new CdlInternalErrorException("Incomplete parse time resolution"); } *************** *** 136,139 **** --- 136,140 ---- * resolve a toplevel template by pushing the name onto the stack, * popping it when it is exited + * * @param target * @return *************** *** 181,185 **** ResolveEnum state = ResolveEnum.ResolvedIncomplete; ResolveEnum resolveState = target.getResolveState(); ! if(resolveState.isParseTimeResolutionComplete()) { //we are in a state where no parse time resolution is required. return new ResolveResult(target); --- 182,186 ---- ResolveEnum state = ResolveEnum.ResolvedIncomplete; ResolveEnum resolveState = target.getResolveState(); ! if (resolveState.isParseTimeResolutionComplete()) { //we are in a state where no parse time resolution is required. return new ResolveResult(target); *************** *** 307,314 **** */ private List<Node> copyAndResolve(PropertyList target, ! HashMap<QName, QName> map) throws CdlException { int childCount = target.getChildCount(); List<Node> newChildren = new ArrayList<Node>(childCount); for (Node node : target.nodes()) { if (node instanceof PropertyList) { --- 308,317 ---- */ private List<Node> copyAndResolve(PropertyList target, ! HashMap<QName, QName> map) throws CdlException { int childCount = target.getChildCount(); List<Node> newChildren = new ArrayList<Node>(childCount); + //our goal state. + ResolveEnum state = ResolveEnum.ResolvedComplete; for (Node node : target.nodes()) { if (node instanceof PropertyList) { *************** *** 318,329 **** QName name = entry.getQName(); //merge it ! ResolveResult resolved = resolveExtends(entry); ! PropertyList resolvedList = resolved.getResolvedPropertyList(); assert name.equals(resolvedList.getQName()); //now, at this point we have a resolved property list. //we add this to our children if (map == null) { //when not mapping, we add everything ! newChildren.add(resolvedList); } else { //when mapping, we do a lookup --- 321,333 ---- QName name = entry.getQName(); //merge it ! ResolveResult result = resolveExtends(entry); ! PropertyList resolvedList = result.getResolvedPropertyList(); assert name.equals(resolvedList.getQName()); //now, at this point we have a resolved property list. //we add this to our children + boolean add = false; if (map == null) { //when not mapping, we add everything ! add = true; } else { //when mapping, we do a lookup *************** *** 331,337 **** //and only add unique things map.put(name, name); ! newChildren.add(resolvedList); } } } else { //anything other than a PropertyList. Just merge it in --- 335,346 ---- //and only add unique things map.put(name, name); ! add = true; } } + if (add) { + //add if told to + state = ResolveEnum.merge(state, resolvedList.getResolveState()); + newChildren.add(resolvedList); + } } else { //anything other than a PropertyList. Just merge it in *************** *** 339,342 **** --- 348,352 ---- } } + target.setResolveState(state); return newChildren; } *************** *** 353,360 **** */ private PropertyList replaceNode(PropertyList target, ! List<Node> newChildren) throws CdlXmlParsingException { //copy the target element PropertyList replacement = (PropertyList) target.copy(); //strip its children away (a bit wasteful) replacement.removeChildren(); --- 363,371 ---- */ private PropertyList replaceNode(PropertyList target, ! List<Node> newChildren) throws CdlXmlParsingException { //copy the target element PropertyList replacement = (PropertyList) target.copy(); + //strip its children away (a bit wasteful) replacement.removeChildren(); |