diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/BasicStatementRule.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/BasicStatementRule.java index 7e583efff35..075da3e7160 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/BasicStatementRule.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/BasicStatementRule.java @@ -20,7 +20,7 @@ public enum BasicStatementRule implements StatementRule { @Override public void apply(StatementRuleContext rule) throws AxiomSemanticException { Optional argument = rule.typeDefinition().argument(); - if(argument.isPresent()) { + if(argument.isPresent() && rule.optionalValue().isPresent()) { rule.apply(ctx -> ctx.createEffectiveChild(argument.get().name(), ctx.requireValue())); } } diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementRuleContext.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementRuleContext.java index ba8f186280c..6d426f23fbf 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementRuleContext.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementRuleContext.java @@ -32,4 +32,6 @@ public interface Action { AxiomTypeDefinition typeDefinition(); + Optional optionalValue(); + } diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementRuleContextImpl.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementRuleContextImpl.java index f96a2e2b430..600f627a480 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementRuleContextImpl.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementRuleContextImpl.java @@ -99,6 +99,11 @@ public AxiomTypeDefinition typeDefinition() { return context.definition().type(); } + @Override + public Optional optionalValue() { + return context.optionalValue(); + } + @Override public RuleErrorMessage error(String format, Object... arguments) { return RuleErrorMessage.from(context.startLocation(), format, arguments); diff --git a/infra/axiom/src/main/resources/axiom-lang.axiom b/infra/axiom/src/main/resources/axiom-lang.axiom index 82067f70243..2aa5baa7c6a 100644 --- a/infra/axiom/src/main/resources/axiom-lang.axiom +++ b/infra/axiom/src/main/resources/axiom-lang.axiom @@ -98,10 +98,5 @@ model axiom-lang { } } - type AxiomTypeReference { - // extends AxiomReference; - // item targetType { - // value AxiomTypeDefinition; - // } - } + type AxiomTypeReference; } \ No newline at end of file diff --git a/infra/axiom/src/test/resources/base-example.axiom b/infra/axiom/src/test/resources/base-example.axiom index 78ac0b4b18a..d8673249e39 100644 --- a/infra/axiom/src/test/resources/base-example.axiom +++ b/infra/axiom/src/test/resources/base-example.axiom @@ -14,9 +14,9 @@ model model-header { version "0.0.1"; type string; - type PolyString; type Address; type Link; + type PolyString; type Example { documentation """ @@ -45,4 +45,9 @@ model model-header { maxOccurs unbounded; } } + + object { + name User2; + itemName user; + } } \ No newline at end of file