📄 xqresolvenames.java
字号:
{ Method meth = ClassType.make("gnu.xquery.util.NodeUtils") .getDeclaredMethod("name", 1); return withContext(meth, exp.getArgs(), "fn:name", 0); } case NUMBER_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.NumberValue") .getDeclaredMethod("numberValue", 1); return withContext(meth, exp.getArgs(), "fn:number", 0); } case ROOT_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.NodeUtils") .getDeclaredMethod("root", 1); return withContext(meth, exp.getArgs(), "fn:root", 0); } case BASE_URI_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.NodeUtils") .getDeclaredMethod("baseUri", 1); return withContext(meth, exp.getArgs(), "fn:base-uri", 0); } case LANG_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.NodeUtils") .getDeclaredMethod("lang", 2); return withContext(meth, exp.getArgs(), "fn:lang", 1); } case ID_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.NodeUtils") .getDeclaredMethod("id$X", 3); return withContext(meth, exp.getArgs(), "fn:id", 1); } case IDREF_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.NodeUtils") .getDeclaredMethod("idref", 2); return withContext(meth, exp.getArgs(), "fn:idref", 1); } case STATIC_BASE_URI_BUILTIN: { Expression[] args = exp.getArgs(); if ((err = checkArgCount(args, decl, 0, 0)) != null) return err; return getBaseUriExpr(); } case NAMESPACE_URI_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.NodeUtils") .getDeclaredMethod("namespaceURI", 1); return withContext(meth, exp.getArgs(), "fn:namespace-uri", 0); } case NORMALIZE_SPACE_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.StringUtils") .getDeclaredMethod("normalizeSpace", 1); return withContext(meth, exp.getArgs(), "fn:normalize-space", 0); } case UNORDERED_BUILTIN: { Expression[] args = exp.getArgs(); if ((err = checkArgCount(args, decl, 1, 1)) != null) return err; return args[0]; } case COMPARE_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.StringUtils") .getDeclaredMethod("compare", 3); return withCollator(meth, exp.getArgs(), "fn:compare", 2); } case STRING_BUILTIN: return withContext(ClassType.make("gnu.xml.TextUtils") .getDeclaredMethod("asString", 1), exp.getArgs(), "fn:string", 0); case INDEX_OF_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.SequenceUtils") .getDeclaredMethod("indexOf$X", 4); return withCollator(meth, exp.getArgs(), "fn:index-of", 2); } case COLLECTION_BUILTIN: { Expression[] args = exp.getArgs(); ClassType cl = ClassType.make("gnu.xquery.util.NodeUtils"); Method meth = cl.getDeclaredMethod("collection", 2); if ((err = checkArgCount(args, decl, 0, 1)) != null) return err; Expression base = getBaseUriExpr(); Expression uri = args.length > 0 ? args[0] : QuoteExp.voidExp; ApplyExp aexp = new ApplyExp(meth, new Expression[]{ uri, base }); if (code == DOC_BUILTIN) aexp.setType(NodeType.documentNodeTest); else aexp.setType(XDataType.booleanType); return aexp; } case DOC_BUILTIN: case DOC_AVAILABLE_BUILTIN: { Expression[] args = exp.getArgs(); ClassType cl = ClassType.make("gnu.xquery.util.NodeUtils"); String mname; if (code == DOC_BUILTIN) { mname = "docCached"; if (parser.warnOldVersion && "document".equals(decl.getName())) getCompilation() .error('w', "replace 'document' by 'doc'"); } else mname = "availableCached"; Method meth = cl.getDeclaredMethod(mname, 2); if ((err = checkArgCount(args, decl, 1, 1)) != null) return err; Expression base = getBaseUriExpr(); ApplyExp aexp = new ApplyExp(meth, new Expression[]{ args[0], base }); if (code == DOC_BUILTIN) aexp.setType(NodeType.documentNodeTest); else aexp.setType(XDataType.booleanType); return aexp; } case RESOLVE_URI_BUILTIN: { Expression[] args = exp.getArgs(); if ((err = checkArgCount(args, decl, 1, 2)) != null) return err; Expression[] margs = new Expression[2]; margs[0] = args[0]; if (args.length == 1) margs[1] = getBaseUriExpr(); else margs[1] = args[1]; Method meth = ClassType.make("gnu.xquery.util.QNameUtils") .getDeclaredMethod("resolveURI", 2); return new ApplyExp(meth, margs); } case DISTINCT_VALUES_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.DistinctValues") .getDeclaredMethod("distinctValues$X", 3); return withCollator(meth, exp.getArgs(), "fn:distinct-values", 1); } case DEEP_EQUAL_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.SequenceUtils") .getDeclaredMethod("deepEqual", 3); return withCollator(meth, exp.getArgs(), "fn:deep-equal", 2); } case MIN_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.MinMax") .getDeclaredMethod("min", 2); return withCollator(meth, exp.getArgs(), "fn:min", 1); } case MAX_BUILTIN: { Method meth = ClassType.make("gnu.xquery.util.MinMax") .getDeclaredMethod("max", 2); return withCollator(meth, exp.getArgs(), "fn:max", 1); } case DEFAULT_COLLATION_BUILTIN: if ((err = checkArgCount(exp.getArgs(), decl, 0, 0)) != null) return err; NamedCollator coll = parser.defaultCollator; return QuoteExp.getInstance(coll != null ? coll.getName() : NamedCollator.UNICODE_CODEPOINT_COLLATION); case HANDLE_EXTENSION_BUILTIN: { Compilation comp = getCompilation(); Expression[] args = exp.getArgs(); int i = 0; for (; i < args.length - 1; i += 2) { Expression pname = args[i]; String qname = (String) ((QuoteExp) pname).getValue(); Symbol psymbol = parser.namespaceResolve(qname, false); if (psymbol == null) ; // error emitted in namespaceResolve else if (psymbol.getNamespaceURI().length() == 0) comp.error('e', "pragma name cannot be in the empty namespace"); else { Expression replacement = checkPragma(psymbol, args[i+1]); if (replacement != null) return replacement; } } if (i < args.length) return args[args.length-1]; String msg = "no recognized pragma or default in extension expression"; getMessages().error('e', msg, "XQST0079"); return new ErrorExp(msg); } } } } proc = exp.getFunctionValue(); if (proc instanceof Type) { Expression[] args = exp.getArgs(); if (args.length != 1) { messages.error('e', "type constructor requires a single argument"); return exp; } return new ApplyExp(XQParser.makeFunctionExp("gnu.xquery.util.CastAs", "castAs"), new Expression[] { exp.getFunction(), args[0] }); } if (proc instanceof MakeElement) { MakeElement make = (MakeElement) proc; // Add namespaces nodes that might be needed. NamespaceBinding nsBindings = make.getNamespaceNodes(); nsBindings = maybeAddNamespace(MakeElement.getTagName(exp), nsBindings); Expression[] args = exp.getArgs(); Symbol[] attrSyms = new Symbol[args.length]; int nattrSyms = 0; for (int i = 0; i < args.length; i++) { Expression arg = args[i]; if (arg instanceof ApplyExp) { ApplyExp app = (ApplyExp) arg; if (app.getFunction() == MakeAttribute.makeAttributeExp) { Symbol sym = MakeElement.getTagName(app); if (sym != null) { for (int j = 0; ; j++) { if (j == nattrSyms) { attrSyms[nattrSyms++] = sym; break; } if (sym.equals(attrSyms[j])) { getCompilation().setLine(app); Symbol elementSym = MakeElement.getTagName(exp); String elementName = elementSym == null ? null : elementSym.toString(); messages.error('e', XMLFilter.duplicateAttributeMessage(sym, elementName), "XQST0040"); } } } nsBindings = maybeAddNamespace(sym, nsBindings); } } } if (nsBindings != null) make.setNamespaceNodes(nsBindings); } return exp; } public Expression checkPragma (Symbol name, Expression contents) { return null; } Expression getBaseUriExpr () { Compilation comp = getCompilation(); String staticBaseUri = parser.getStaticBaseUri(); if (staticBaseUri != null) return QuoteExp.getInstance(staticBaseUri); else return gnu.kawa.functions.GetModuleClass.getModuleClassURI(comp); } static NamespaceBinding maybeAddNamespace(Symbol qname, NamespaceBinding bindings) { if (qname == null) // Happens if prevously-reported unknown prefix. return bindings; String prefix = qname.getPrefix(); String uri = qname.getNamespaceURI(); return NamespaceBinding.maybeAdd(prefix == "" ? null : prefix, uri == "" ? null : uri, bindings); } /** Wrap a (known) procedure value as a Declaration. */ static Declaration procToDecl (Object symbol, Object val) { Declaration decl = new Declaration(symbol); decl.setProcedureDecl(true); decl.noteValue(new QuoteExp(val)); decl.setFlag(Declaration.IS_CONSTANT); return decl; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -