anchor.diff:    /// This is built-up during the lifetime of this class.
     final _QueryValues2 _values;
   
  -  CompileQuery2._base(this._metadata, this._queryRoot, this._boundField)
  +  factory CompileQuery2({
  +    @required CompileQueryMetadata metadata,
  +    @required CompileView queryRoot,
  +    @required o.Expression boundField,
  +    @required int nodeIndex,
  +    @required int queryIndex,
  +  }) {
  +    // TODO(matanl): If this is a 'List' type, use a different implementation.
  +    return new _QueryListCompileQuery(
  +      metadata,
  +      queryRoot,
  +      boundField,
  +      nodeIndex: nodeIndex,
  +      queryIndex: queryIndex,
  +    );
  +  }
  +
  +  CompileQuery2._base(
  +    this._metadata,
  +    this._queryRoot,
  +    this._boundField,
  +  )
         : _values = new _QueryValues2(_queryRoot);
   
     /// Whether the query is entirely static, i.e. there are no `<template>`s.
  -  bool get _isStatic;
  +  bool get _isStatic => !_values.hasNestedViews;
   
     /// Whether the query is only setting a single value, not a list-like object.
     ///
  
positive.code:   /// ```dart
    /// import2.QueryList _viewQuery_ChildDirective_0;
    /// ```
    List<o.Statement> createClassFields();
  
    /// Return code that will set the query contents at change-detection time.
    ///
  
negative.code:     }
    }
  
    List<o.Expression> _buildQueryResult(_QueryValues2 viewValues) {
      final result = viewValues.values.toList();
      for (final template in viewValues.templates) {
        result.add(
          _mapNestedViews(
            template.view.declarationElement.appViewContainer,
            template.view,
            _buildQueryResult(template),
          ),
        );
      }
      return result;
    }
  
    /// Invoked by [addQueryResult] when the [_queryRoot] is now dirty.
    ///
    /// This means during the next change detection cycle we need to rebuild the
  