+ return type.isAssignableFrom(ctx.getPublicDefinition().getDeclaredRepresentationClass());
+ }
+
+ public static boolean isInExtensionBody(StmtContext<?, ?, ?> stmtCtx) {
+
+ StmtContext<?, ?, ?> current = stmtCtx;
+ while (!current.getParentContext().isRootContext()) {
+ current = current.getParentContext();
+ if (producesDeclared(current, UnknownStatementImpl.class)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public static boolean isUnknownStatement(StmtContext<?, ?, ?> stmtCtx) {
+ return producesDeclared(stmtCtx, UnknownStatementImpl.class);
+ }
+
+ public static Set<TypeOfCopy> getCopyTypesFromOriginal(StmtContext<?, ?, ?> ctx) {
+
+ Set<TypeOfCopy> copyTypesFromOriginal = new HashSet<>();
+ StmtContext<?, ?, ?> current = ctx;
+
+ while (current.getOriginalCtx() != null) {
+ copyTypesFromOriginal.add(current.getTypeOfCopy());
+ current = current.getOriginalCtx();
+ }
+
+ return copyTypesFromOriginal;
+ }
+
+ public static Collection<SchemaNodeIdentifier> replaceModuleQNameForKey(
+ StmtContext<Collection<SchemaNodeIdentifier>, KeyStatement, ?> keyStmtCtx, QNameModule newQNameModule) {
+
+ List<String> keyTokens = KEY_SPLITTER.splitToList(keyStmtCtx.rawStatementArgument());
+
+ Set<SchemaNodeIdentifier> newKeys = new HashSet<>();
+
+ for (String keyToken : keyTokens) {
+ QName keyQName = QName.create(newQNameModule, keyToken);
+ SchemaNodeIdentifier keyIdentifier = SchemaNodeIdentifier.create(false, keyQName);
+ newKeys.add(keyIdentifier);
+ }
+
+ return newKeys;