- return findNode(rootStmtCtx, node.getPathFromRoot());
- }
-
- public static SchemaPath getSchemaPath(StmtContext<?, ?, ?> ctx) {
-
- if (ctx == null) {
- return null;
- }
-
- Iterator<StmtContext<?, ?, ?>> iteratorFromRoot = ctx.getStmtContextsFromRoot().iterator();
-
- if (iteratorFromRoot.hasNext()) {
- iteratorFromRoot.next(); // skip root argument
- }
-
- List<QName> qNamesFromRoot = new LinkedList<>();
- while (iteratorFromRoot.hasNext()) {
- StmtContext<?, ?, ?> nextStmtCtx = iteratorFromRoot.next();
- Object nextStmtArgument = nextStmtCtx.getStatementArgument();
- if (nextStmtArgument instanceof QName) {
- QName qname = (QName) nextStmtArgument;
- if (StmtContextUtils.producesDeclared(nextStmtCtx, UsesStatement.class)) {
- continue;
- }
- if (StmtContextUtils.producesDeclared(nextStmtCtx.getParentContext(), ChoiceStatement.class)
- && isSupportedAsShorthandCase(nextStmtCtx)) {
- qNamesFromRoot.add(qname);
- }
- qNamesFromRoot.add(qname);
- } else if (nextStmtArgument instanceof String) {
- final QName qName = qNameFromArgument(ctx, (String) nextStmtArgument);
- qNamesFromRoot.add(qName);
- } else if (StmtContextUtils.producesDeclared(nextStmtCtx, AugmentStatement.class)
- && nextStmtArgument instanceof SchemaNodeIdentifier) {
- addQNamesFromSchemaNodeIdentifierToList(qNamesFromRoot, (SchemaNodeIdentifier) nextStmtArgument);
- } else if (nextStmtCtx.getPublicDefinition().getDeclaredRepresentationClass()
- .isAssignableFrom(UnknownStatementImpl.class)) {
- qNamesFromRoot.add(nextStmtCtx.getPublicDefinition().getStatementName());
- } else {
- return SchemaPath.SAME;
- }
- }
-
- final SchemaPath schemaPath = SchemaPath.create(qNamesFromRoot, true);
- return schemaPath;
- }
-
- private static boolean isSupportedAsShorthandCase(StmtContext<?, ?, ?> statementCtx) {
-
- Collection<?> supportedCaseShorthands = statementCtx.getFromNamespace(ValidationBundlesNamespace.class,
- ValidationBundleType.SUPPORTED_CASE_SHORTHANDS);
-
- return supportedCaseShorthands == null || supportedCaseShorthands.contains(statementCtx.getPublicDefinition());