*/
public abstract static class DefaultWithSchemaTree<A, D extends DeclaredStatement<A>,
E extends SchemaTreeAwareEffectiveStatement<A, D>> extends WithSchemaTree<A, D, E> {
- public abstract static class WithSubstatements<A, D extends DeclaredStatement<A>,
- E extends SchemaTreeAwareEffectiveStatement<A, D>> extends DefaultWithSchemaTree<A, D, E> {
- private final @NonNull Object substatements;
-
- protected WithSubstatements(final D declared,
- final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- super(declared, substatements);
- this.substatements = maskList(substatements);
- }
-
- protected WithSubstatements(final WithSubstatements<A, D, E> original) {
- super(original);
- this.substatements = original.substatements;
- }
-
- @Override
- public final ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
- return unmaskList(substatements);
- }
- }
-
private final @NonNull ImmutableMap<QName, SchemaTreeEffectiveStatement<?>> schemaTree;
+ private final @NonNull Object substatements;
private final @NonNull D declared;
protected DefaultWithSchemaTree(final D declared,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
this.declared = requireNonNull(declared);
+ this.substatements = maskList(substatements);
this.schemaTree = ImmutableMap.copyOf(createSchemaTreeNamespace(substatements));
}
protected DefaultWithSchemaTree(final DefaultWithSchemaTree<A, D, E> original) {
this.declared = original.declared;
this.schemaTree = original.schemaTree;
+ this.substatements = original.substatements;
}
@Override
return declared;
}
+ @Override
+ public final ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+ return unmaskList(substatements);
+ }
+
@Override
protected final Map<QName, SchemaTreeEffectiveStatement<?>> schemaTreeNamespace() {
return schemaTree;
*/
public abstract static class DefaultWithDataTree<A, D extends DeclaredStatement<A>,
E extends DataTreeAwareEffectiveStatement<A, D>> extends WithDataTree<A, D, E> {
- public abstract static class WithSubstatements<A, D extends DeclaredStatement<A>,
- E extends DataTreeAwareEffectiveStatement<A, D>> extends DefaultWithDataTree<A, D, E> {
- private final @NonNull Object substatements;
-
- protected WithSubstatements(final D declared,
- final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- super(declared, substatements);
- this.substatements = maskList(substatements);
- }
-
- protected WithSubstatements(final WithSubstatements<A, D, E> original) {
- super(original);
- this.substatements = original.substatements;
- }
-
- @Override
- public final ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
- return unmaskList(substatements);
- }
- }
-
private final @NonNull ImmutableMap<QName, SchemaTreeEffectiveStatement<?>> schemaTree;
private final @NonNull ImmutableMap<QName, DataTreeEffectiveStatement<?>> dataTree;
+ private final @NonNull Object substatements;
private final @NonNull D declared;
protected DefaultWithDataTree(final D declared,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
this.declared = requireNonNull(declared);
+ this.substatements = maskList(substatements);
+
+ // Note we call schema.values() so we do not retain them, as that is just pure memory overhead
final Map<QName, SchemaTreeEffectiveStatement<?>> schema = createSchemaTreeNamespace(substatements);
this.schemaTree = ImmutableMap.copyOf(schema);
this.dataTree = createDataTreeNamespace(schema.values(), schemaTree);
this.declared = original.declared;
this.schemaTree = original.schemaTree;
this.dataTree = original.dataTree;
+ this.substatements = original.substatements;
}
@Override
return declared;
}
+ @Override
+ public final ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+ return unmaskList(substatements);
+ }
+
@Override
protected final Map<QName, SchemaTreeEffectiveStatement<?>> schemaTreeNamespace() {
return schemaTree;