You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by mb...@apache.org on 2019/06/07 20:37:38 UTC
[incubator-daffodil] branch master updated: Sick of NPE.
lexicalParent is now optLexicalParent and is Option type
This is an automated email from the ASF dual-hosted git repository.
mbeckerle pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-daffodil.git
The following commit(s) were added to refs/heads/master by this push:
new 1ccb8c8 Sick of NPE. lexicalParent is now optLexicalParent and is Option type
1ccb8c8 is described below
commit 1ccb8c82bf4c1a6bddc8020a6c0f571efd2c4af3
Author: Michael Beckerle <mb...@tresys.com>
AuthorDate: Sat Jun 1 00:42:06 2019 -0400
Sick of NPE. lexicalParent is now optLexicalParent and is Option type
DAFFODIL-1444
---
.../daffodil/dsom/AnnotatedSchemaComponent.scala | 8 +++--
.../org/apache/daffodil/dsom/ChoiceGroup.scala | 4 +--
.../org/apache/daffodil/dsom/DFDLAnnotation.scala | 4 ++-
.../org/apache/daffodil/dsom/ElementBase.scala | 10 +++---
.../org/apache/daffodil/dsom/ElementRef.scala | 2 +-
.../scala/org/apache/daffodil/dsom/GroupRef.scala | 6 ++--
.../scala/org/apache/daffodil/dsom/IIBase.scala | 2 +-
.../apache/daffodil/dsom/LocalElementDecl.scala | 6 ++--
.../scala/org/apache/daffodil/dsom/Nesting.scala | 8 ++---
.../org/apache/daffodil/dsom/ReptypeMixins.scala | 2 +-
.../org/apache/daffodil/dsom/SchemaComponent.scala | 16 +++++----
.../daffodil/dsom/SchemaComponentFactory.scala | 24 +++++++-------
.../org/apache/daffodil/dsom/SchemaDocument.scala | 3 +-
.../scala/org/apache/daffodil/dsom/SchemaSet.scala | 4 +--
.../org/apache/daffodil/dsom/SequenceGroup.scala | 6 ++--
.../main/scala/org/apache/daffodil/dsom/Term.scala | 38 ++++++++++++----------
.../daffodil/grammar/ElementBaseGrammarMixin.scala | 2 +-
.../grammar/primitives/PrimitivesExpressions.scala | 2 +-
.../annotation/props/TestPropertyRuntime.scala | 2 +-
19 files changed, 82 insertions(+), 67 deletions(-)
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/AnnotatedSchemaComponent.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/AnnotatedSchemaComponent.scala
index cf89c43..6797167 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/AnnotatedSchemaComponent.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/AnnotatedSchemaComponent.scala
@@ -110,8 +110,12 @@ trait ResolvesProperties
/** Convenience class for implemening AnnotatedSchemaComponent trait */
abstract class AnnotatedSchemaComponentImpl(
final override val xml: Node,
- final override val lexicalParent: SchemaComponent)
- extends AnnotatedSchemaComponent
+ final override val optLexicalParent: Option[SchemaComponent])
+ extends AnnotatedSchemaComponent {
+
+ def this(xml: Node, lexicalParent: SchemaComponent) =
+ this(xml, Option(lexicalParent))
+}
/**
* Shared characteristics of any annotated schema component.
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ChoiceGroup.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ChoiceGroup.scala
index b9d6114..cfccc7c 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ChoiceGroup.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ChoiceGroup.scala
@@ -101,7 +101,7 @@ trait ChoiceDefMixin
abstract class ChoiceTermBase(
final override val xml: Node,
- final override val lexicalParent: SchemaComponent,
+ final override val optLexicalParent: Option[SchemaComponent],
final override val position: Int)
extends ModelGroup(position)
with Choice_AnnotationMixin
@@ -369,7 +369,7 @@ abstract class ChoiceTermBase(
}
final class Choice(xmlArg: Node, lexicalParent: SchemaComponent, position: Int)
- extends ChoiceTermBase(xmlArg, lexicalParent, position)
+ extends ChoiceTermBase(xmlArg, Option(lexicalParent), position)
with ChoiceDefMixin {
override lazy val optReferredToComponent = None
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/DFDLAnnotation.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/DFDLAnnotation.scala
index 3567dd3..97dd586 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/DFDLAnnotation.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/DFDLAnnotation.scala
@@ -33,13 +33,15 @@ import org.apache.daffodil.util.Misc
* and Import objects which represent those statements in a schema,
* the proxy DFDLSchemaFile object, etc.
*
+ *
*/
abstract class DFDLAnnotation(xmlArg: Node, annotatedSCArg: AnnotatedSchemaComponent)
extends SchemaComponent
with NestingLexicalMixin {
final override val xml = xmlArg
- final override def lexicalParent = annotatedSCArg
+
+ final override val optLexicalParent = Option(annotatedSCArg)
final lazy val annotatedSC = annotatedSCArg
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
index 34dda3c..4a76249 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
@@ -663,10 +663,12 @@ trait ElementBase
}
final lazy val isParentUnorderedSequence: Boolean = {
- lexicalParent match {
- case s: SequenceTermBase if !s.isOrdered => true
- case _ => false
- }
+ optLexicalParent.map { lp =>
+ lp match {
+ case s: SequenceTermBase if !s.isOrdered => true
+ case _ => false
+ }
+ }.getOrElse(false)
}
private def getImplicitAlignmentInBits(thePrimType: PrimType, theRepresentation: Representation): Int = {
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementRef.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementRef.scala
index 748f302..2202c48 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementRef.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementRef.scala
@@ -38,7 +38,7 @@ abstract class AbstractElementRef(
with NestingLexicalMixin {
override lazy val xml = xmlArg
- final override lazy val lexicalParent = parentArg
+ final override lazy val optLexicalParent = Option(parentArg)
final override lazy val position = positionArg
requiredEvaluations(referencedElement)
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/GroupRef.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/GroupRef.scala
index e31c7e2..6b35c96 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/GroupRef.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/GroupRef.scala
@@ -59,13 +59,13 @@ trait GroupRef { self: ModelGroup =>
* right part of the schema.
*/
final class GroupRefFactory(refXMLArg: Node, val refLexicalParent: SchemaComponent, position: Int, isHidden: Boolean)
- extends SchemaComponentFactory(refXMLArg, refLexicalParent.schemaDocument)
+ extends SchemaComponentFactory(refXMLArg, Some(refLexicalParent.schemaDocument))
with HasRefMixin {
final def qname = this.refQName
lazy val groupRef = LV('groupRef) {
- val gdefFactory = lexicalParent.schemaSet.getGlobalGroupDef(qname).getOrElse {
+ val gdefFactory = schemaSet.getGlobalGroupDef(qname).getOrElse {
SDE("Referenced group definition not found: %s", this.ref)
}
val (gref, _) = gdefFactory.forGroupRef(refXMLArg, refLexicalParent, position, isHidden)
@@ -105,7 +105,7 @@ final class ChoiceGroupRef(
refLexicalParent: SchemaComponent,
positionArg: Int,
isHiddenArg: Boolean)
- extends ChoiceTermBase(refXML, refLexicalParent, positionArg)
+ extends ChoiceTermBase(refXML, Option(refLexicalParent), positionArg)
with GroupRef {
requiredEvaluations(groupDef)
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/IIBase.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/IIBase.scala
index edd4557..9c7032a 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/IIBase.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/IIBase.scala
@@ -126,7 +126,7 @@ object IIUtils {
abstract class IIBase( final override val xml: Node, xsdArg: XMLSchemaDocument, val seenBefore: IIMap)
extends SchemaComponent
with NestingLexicalMixin {
- final override def lexicalParent = xsdArg
+ final override def optLexicalParent = Option(xsdArg)
/**
* An import/include requires only that we can access the
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/LocalElementDecl.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/LocalElementDecl.scala
index d4955fe..ab1c040 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/LocalElementDecl.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/LocalElementDecl.scala
@@ -21,7 +21,7 @@ import scala.xml.Node
sealed abstract class LocalElementDeclBase(
final override val xml: Node,
- final override val lexicalParent: SchemaComponent,
+ final override val optLexicalParent: Option[SchemaComponent],
final override val position: Int)
extends ElementBase
with LocalElementComponentMixin
@@ -35,7 +35,7 @@ class LocalElementDecl(
xml: Node,
lexicalParent: SchemaComponent,
position: Int)
- extends LocalElementDeclBase(xml, lexicalParent, position)
+ extends LocalElementDeclBase(xml, Option(lexicalParent), position)
/**
* A QuasiElement is similar to a LocalElement except it will have no
@@ -49,7 +49,7 @@ class LocalElementDecl(
sealed abstract class QuasiElementDeclBase(
xml: Node,
lexicalParent: SchemaComponent)
- extends LocalElementDeclBase(xml, lexicalParent, -1) {
+ extends LocalElementDeclBase(xml, Option(lexicalParent), -1) {
override lazy val isQuasiElement = true
}
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/Nesting.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/Nesting.scala
index f0729a7..d8d690d 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/Nesting.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/Nesting.scala
@@ -22,7 +22,7 @@ import org.apache.daffodil.exceptions.Assert
trait NestingMixin {
/** The lexically enclosing schema component */
- def lexicalParent: SchemaComponent
+ def optLexicalParent: Option[SchemaComponent]
/**
* Define this for schema components that have back-references to ref
@@ -56,8 +56,7 @@ trait NestingMixin {
trait NestingLexicalMixin
extends NestingMixin {
- override protected def enclosingComponentDef =
- if (lexicalParent eq null) None else Some(lexicalParent)
+ override protected def enclosingComponentDef = optLexicalParent
}
@@ -70,7 +69,8 @@ trait NestingTraversesToReferenceMixin
def referringComponent: Option[SchemaComponent]
final override protected def enclosingComponentDef: Option[SchemaComponent] = {
- Assert.invariant(lexicalParent.isInstanceOf[SchemaDocument]) // global things have schema documents as their parents.
+ Assert.invariant(optLexicalParent.isDefined &&
+ optLexicalParent.get.isInstanceOf[SchemaDocument]) // global things have schema documents as their parents.
referringComponent
}
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ReptypeMixins.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ReptypeMixins.scala
index 6fb60d2..bb160c2 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ReptypeMixins.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ReptypeMixins.scala
@@ -32,7 +32,7 @@ trait HasOptRepTypeMixinImpl extends SchemaComponent with HasOptRepTypeMixin {
override lazy val optRepTypeElement: Option[RepTypeQuasiElementDecl] =
optRepTypeDef.map(repType => {
val xmlElem = Elem(null, "QuasiElementForTypeCalc", new UnprefixedAttribute("type", repType.namedQName.toAttributeNameString, Null), namespaces, true)
- new RepTypeQuasiElementDecl(xmlElem, lexicalParent)
+ new RepTypeQuasiElementDecl(xmlElem, optLexicalParent.get)
})
}
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponent.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponent.scala
index 9bffc30..9cfe5be 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponent.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponent.scala
@@ -36,8 +36,12 @@ import org.apache.daffodil.schema.annotation.props.PropTypes
abstract class SchemaComponentImpl(
final override val xml: Node,
- final override val lexicalParent: SchemaComponent)
- extends SchemaComponent
+ final override val optLexicalParent: Option[SchemaComponent])
+ extends SchemaComponent {
+
+ def this(xml: Node, lexicalParent: SchemaComponent) =
+ this(xml, Option(lexicalParent))
+}
/**
* The core root class of the DFDL Schema object model.
@@ -54,12 +58,10 @@ trait SchemaComponent
with PropTypes {
def xml: Node
- def lexicalParent: SchemaComponent
- final lazy val optLexicalParent = Option(lexicalParent) // Option because Option(null) == None. We want that.
- override def oolagContextViaArgs = Option(lexicalParent) // Option because Option(null) == None. We want that.
+ override def oolagContextViaArgs = optLexicalParent
- def tunable: DaffodilTunables = lexicalParent.tunable
+ lazy val tunable: DaffodilTunables = optLexicalParent.get.tunable
lazy val dpathCompileInfo: DPathCompileInfo =
new DPathCompileInfo(
@@ -209,7 +211,7 @@ trait SchemaComponent
* the 'schema'.
*/
final class Schema(val namespace: NS, schemaDocs: Seq[SchemaDocument], schemaSetArg: SchemaSet)
- extends SchemaComponentImpl(<fake/>, schemaSetArg) {
+ extends SchemaComponentImpl(<fake/>, Option(schemaSetArg)) {
requiredEvaluations(schemaDocuments)
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponentFactory.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponentFactory.scala
index 5d087d0..49d83c8 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponentFactory.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponentFactory.scala
@@ -31,15 +31,17 @@ import scala.xml.Node
*/
abstract class SchemaComponentFactory(
final override val xml: Node,
- final override val lexicalParent: SchemaComponent)
+ final override val optLexicalParent: Option[SchemaComponent])
extends SchemaComponent
with NestingLexicalMixin {
+ def this(xml: Node, lexicalParent: SchemaComponent) =
+ this(xml, Option(lexicalParent))
}
abstract class AnnotatedSchemaComponentFactory(
final override val xml: Node,
- final override val lexicalParent: SchemaComponent)
+ final override val optLexicalParent: Option[SchemaComponent])
extends AnnotatedSchemaComponent
with NestingLexicalMixin {
@@ -50,7 +52,7 @@ trait SchemaFileLocatableImpl
def xml: scala.xml.Node
def schemaFile: Option[DFDLSchemaFile]
- def lexicalParent: SchemaComponent
+ def optLexicalParent: Option[SchemaComponent]
/**
* Annotations can contain expressions, so we need to be able to compile them.
@@ -63,7 +65,7 @@ trait SchemaFileLocatableImpl
val attrText = xml.attribute(XMLUtils.INT_NS, XMLUtils.LINE_ATTRIBUTE_NAME).map { _.text }
if (attrText.isDefined) {
attrText
- } else if (lexicalParent != null) lexicalParent.lineAttribute
+ } else if (optLexicalParent.isDefined) optLexicalParent.get.lineAttribute
else None
}
@@ -79,14 +81,14 @@ trait SchemaFileLocatableImpl
trait CommonContextMixin
extends NestingMixin { self: OOLAGHost with ThrowsSDE =>
- def lexicalParent: SchemaComponent
+ def optLexicalParent: Option[SchemaComponent]
- lazy val schemaFile: Option[DFDLSchemaFile] = lexicalParent.schemaFile
- lazy val schemaSet: SchemaSet = lexicalParent.schemaSet
- def schemaDocument: SchemaDocument = lexicalParent.schemaDocument
- lazy val xmlSchemaDocument: XMLSchemaDocument = lexicalParent.xmlSchemaDocument
- lazy val schema: Schema = lexicalParent.schema
- def uriString: String = lexicalParent.uriString
+ lazy val schemaFile: Option[DFDLSchemaFile] = optLexicalParent.flatMap { _.schemaFile }
+ lazy val schemaSet: SchemaSet = optLexicalParent.get.schemaSet
+ def schemaDocument: SchemaDocument = optLexicalParent.get.schemaDocument
+ lazy val xmlSchemaDocument: XMLSchemaDocument = optLexicalParent.get.xmlSchemaDocument
+ lazy val schema: Schema = optLexicalParent.get.schema
+ def uriString: String = optLexicalParent.get.uriString
def xml: scala.xml.Node
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaDocument.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaDocument.scala
index 49f018f..c7132d0 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaDocument.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaDocument.scala
@@ -182,7 +182,8 @@ final class SchemaDocument(xmlSDoc: XMLSchemaDocument)
with SeparatorSuppressionPolicyMixin {
final override val xml = xmlSDoc.xml
- final override def lexicalParent = xmlSDoc
+ final override def optLexicalParent = Option(xmlSDoc)
+ final override lazy val xmlSchemaDocument = xmlSDoc
override lazy val optReferredToComponent = None
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaSet.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaSet.scala
index 800bac8..4f26d77 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaSet.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaSet.scala
@@ -70,14 +70,14 @@ final class SchemaSet(
val validateDFDLSchemas: Boolean,
checkAllTopLevelArg: Boolean,
tunableArg: DaffodilTunables)
- extends SchemaComponentImpl(<schemaSet/>, null)
+ extends SchemaComponentImpl(<schemaSet/>, None)
with SchemaSetIncludesAndImportsMixin {
private lazy val processorFactory = pfArg // insure this by name arg is evaluated exactly once.
lazy val root = rootElement(processorFactory.flatMap { _.rootSpec })
- override def tunable =
+ override lazy val tunable =
tunableArg
requiredEvaluations(isValid)
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SequenceGroup.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SequenceGroup.scala
index a2a8682..4d1fd7e 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SequenceGroup.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SequenceGroup.scala
@@ -48,7 +48,7 @@ import org.apache.daffodil.exceptions.Assert
*/
abstract class SequenceTermBase(
final override val xml: Node,
- final override val lexicalParent: SchemaComponent,
+ final override val optLexicalParent: Option[SchemaComponent],
final override val position: Int)
extends ModelGroup(position)
with SequenceGrammarMixin {
@@ -86,7 +86,7 @@ abstract class SequenceGroupTermBase(
xml: Node,
lexicalParent: SchemaComponent,
position: Int)
- extends SequenceTermBase(xml, lexicalParent, position)
+ extends SequenceTermBase(xml, Option(lexicalParent), position)
with Sequence_AnnotationMixin
with SequenceRuntimeValuedPropertiesMixin
with SeparatorSuppressionPolicyMixin
@@ -356,7 +356,7 @@ class Sequence(xmlArg: Node, lexicalParent: SchemaComponent, position: Int)
* handled as a degenerate sequence having only one element decl within it.
*/
final class ChoiceBranchImpliedSequence(rawGM: Term)
- extends SequenceTermBase(rawGM.xml, rawGM.lexicalParent, rawGM.position)
+ extends SequenceTermBase(rawGM.xml, rawGM.optLexicalParent, rawGM.position)
with GroupDefLike {
override def separatorSuppressionPolicy: SeparatorSuppressionPolicy = SeparatorSuppressionPolicy.TrailingEmptyStrict
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/Term.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/Term.scala
index 3bfb486..42458f1 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/Term.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/Term.scala
@@ -281,26 +281,28 @@ trait Term
}
final lazy val immediatelyEnclosingModelGroup: Option[ModelGroup] = {
- val res = lexicalParent match {
- case c: ChoiceTermBase => Some(c)
- case s: SequenceTermBase => Some(s)
- case d: SchemaDocument => {
- // we must be the Root elementRef or a quasi node
- Assert.invariant(this.isInstanceOf[Root] || this.isInstanceOf[QuasiElementDeclBase])
- None
- }
- case gr: GroupRef => gr.asModelGroup.immediatelyEnclosingModelGroup
- case gdd: GlobalGroupDef => Some(gdd.groupRef.asModelGroup)
- case ged: GlobalElementDecl => ged.elementRef.immediatelyEnclosingModelGroup
- case ct: ComplexTypeBase => {
- None
- // The above formerly was ct.element.immediatelyEnclosingModelGroup,
- // but if we have a CT as our parent, the group around the element whose type
- // that is, isn't "immediately enclosing".
+ optLexicalParent.flatMap { lexicalParent =>
+ val res = lexicalParent match {
+ case c: ChoiceTermBase => Some(c)
+ case s: SequenceTermBase => Some(s)
+ case d: SchemaDocument => {
+ // we must be the Root elementRef or a quasi node
+ Assert.invariant(this.isInstanceOf[Root] || this.isInstanceOf[QuasiElementDeclBase])
+ None
+ }
+ case gr: GroupRef => gr.asModelGroup.immediatelyEnclosingModelGroup
+ case gdd: GlobalGroupDef => Some(gdd.groupRef.asModelGroup)
+ case ged: GlobalElementDecl => ged.elementRef.immediatelyEnclosingModelGroup
+ case ct: ComplexTypeBase => {
+ None
+ // The above formerly was ct.element.immediatelyEnclosingModelGroup,
+ // but if we have a CT as our parent, the group around the element whose type
+ // that is, isn't "immediately enclosing".
+ }
+ case _ => Assert.invariantFailed("immediatelyEnclosingModelGroup called on " + this + "with lexical parent " + lexicalParent)
}
- case _ => Assert.invariantFailed("immediatelyEnclosingModelGroup called on " + this + "with lexical parent " + lexicalParent)
+ res
}
- res
}
/**
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/grammar/ElementBaseGrammarMixin.scala b/daffodil-core/src/main/scala/org/apache/daffodil/grammar/ElementBaseGrammarMixin.scala
index 793a7e7..8064bba 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/grammar/ElementBaseGrammarMixin.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/grammar/ElementBaseGrammarMixin.scala
@@ -217,7 +217,7 @@ trait ElementBaseGrammarMixin
<element name={ name + " (prefixLength)" } type={ prefixLengthType.toQNameString }/>
.copy(scope = prefixLengthTypeGSTD.xml.scope)
val detachedElementDecl =
- new PrefixLengthQuasiElementDecl(detachedNode, prefixLengthTypeGSTD.lexicalParent)
+ new PrefixLengthQuasiElementDecl(detachedNode, prefixLengthTypeGSTD.optLexicalParent.get)
val prefixedLengthKind = detachedElementDecl.lengthKind
prefixedLengthKind match {
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesExpressions.scala b/daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesExpressions.scala
index ab04318..b392995 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesExpressions.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesExpressions.scala
@@ -123,7 +123,7 @@ case class InitiatedContent(
}
case class SetVariable(stmt: DFDLSetVariable)
- extends ExpressionEvaluatorBase(stmt.lexicalParent) {
+ extends ExpressionEvaluatorBase(stmt.annotatedSC) {
val baseName = "SetVariable[" + stmt.varQName.local + "]"
diff --git a/daffodil-core/src/test/scala/org/apache/daffodil/schema/annotation/props/TestPropertyRuntime.scala b/daffodil-core/src/test/scala/org/apache/daffodil/schema/annotation/props/TestPropertyRuntime.scala
index 72fe751..6ddf703 100644
--- a/daffodil-core/src/test/scala/org/apache/daffodil/schema/annotation/props/TestPropertyRuntime.scala
+++ b/daffodil-core/src/test/scala/org/apache/daffodil/schema/annotation/props/TestPropertyRuntime.scala
@@ -73,7 +73,7 @@ class TestPropertyRuntime {
}
-class HasMixin extends SchemaComponentImpl(<foo/>, null)
+class HasMixin extends SchemaComponentImpl(<foo/>, None)
with TheExamplePropMixin
with NestingLexicalMixin {