Use fewer empty lists; non-growable (dart-lang/markdown#463)

diff --git a/pkgs/markdown/lib/src/ast.dart b/pkgs/markdown/lib/src/ast.dart
index 182fc4c..c9fd8e7 100644
--- a/pkgs/markdown/lib/src/ast.dart
+++ b/pkgs/markdown/lib/src/ast.dart
@@ -21,7 +21,7 @@
   String? generatedId;
 
   /// Instantiates a [tag] Element with [children].
-  Element(this.tag, this.children) : attributes = <String, String>{};
+  Element(this.tag, this.children) : attributes = {};
 
   /// Instantiates an empty, self-closing [tag] Element.
   Element.empty(this.tag)
@@ -30,7 +30,7 @@
 
   /// Instantiates a [tag] Element with no [children].
   Element.withTag(this.tag)
-      : children = [],
+      : children = const [],
         attributes = {};
 
   /// Instantiates a [tag] Element with a single Text child.
@@ -55,7 +55,10 @@
 
   @override
   String get textContent {
-    return (children ?? []).map((child) => child.textContent).join('');
+    final children = this.children;
+    return children == null
+        ? ''
+        : children.map((child) => child.textContent).join('');
   }
 }
 
diff --git a/pkgs/markdown/lib/src/block_syntaxes/table_syntax.dart b/pkgs/markdown/lib/src/block_syntaxes/table_syntax.dart
index 2cbd4dd..a63540f 100644
--- a/pkgs/markdown/lib/src/block_syntaxes/table_syntax.dart
+++ b/pkgs/markdown/lib/src/block_syntaxes/table_syntax.dart
@@ -93,7 +93,7 @@
       if (column.startsWith(':')) return 'left';
       if (column.endsWith(':')) return 'right';
       return null;
-    }).toList();
+    }).toList(growable: false);
   }
 
   /// Parses a table row at the current line into a table row element, with
diff --git a/pkgs/markdown/lib/src/document.dart b/pkgs/markdown/lib/src/document.dart
index 1428dcd..a42823e 100644
--- a/pkgs/markdown/lib/src/document.dart
+++ b/pkgs/markdown/lib/src/document.dart
@@ -11,7 +11,7 @@
 
 /// Maintains the context needed to parse a Markdown document.
 class Document {
-  final Map<String, LinkReference> linkReferences = <String, LinkReference>{};
+  final Map<String, LinkReference> linkReferences = {};
   final Resolver? linkResolver;
   final Resolver? imageLinkResolver;
   final bool encodeHtml;
@@ -44,8 +44,12 @@
     this.withDefaultInlineSyntaxes = true,
   }) : hasCustomInlineSyntaxes = (inlineSyntaxes?.isNotEmpty ?? false) ||
             (extensionSet?.inlineSyntaxes.isNotEmpty ?? false) {
-    _blockSyntaxes.addAll(blockSyntaxes ?? []);
-    _inlineSyntaxes.addAll(inlineSyntaxes ?? []);
+    if (blockSyntaxes != null) {
+      _blockSyntaxes.addAll(blockSyntaxes);
+    }
+    if (inlineSyntaxes != null) {
+      _inlineSyntaxes.addAll(inlineSyntaxes);
+    }
 
     if (extensionSet == null) {
       if (withDefaultBlockSyntaxes) {
diff --git a/pkgs/markdown/lib/src/extension_set.dart b/pkgs/markdown/lib/src/extension_set.dart
index bbbd8ef..d9d2e38 100644
--- a/pkgs/markdown/lib/src/extension_set.dart
+++ b/pkgs/markdown/lib/src/extension_set.dart
@@ -27,10 +27,7 @@
   /// fenced code blocks, or inline HTML.
   ///
   /// [Markdown.pl]: http://daringfireball.net/projects/markdown/syntax
-  static final ExtensionSet none = ExtensionSet(
-    List<BlockSyntax>.unmodifiable(<BlockSyntax>[]),
-    List<InlineSyntax>.unmodifiable(<InlineSyntax>[]),
-  );
+  static final ExtensionSet none = ExtensionSet(const [], const []);
 
   /// The [commonMark] extension set is close to compliance with [CommonMark].
   ///
diff --git a/pkgs/markdown/lib/src/inline_syntaxes/delimiter_syntax.dart b/pkgs/markdown/lib/src/inline_syntaxes/delimiter_syntax.dart
index 4c71b17..a616cfb 100644
--- a/pkgs/markdown/lib/src/inline_syntaxes/delimiter_syntax.dart
+++ b/pkgs/markdown/lib/src/inline_syntaxes/delimiter_syntax.dart
@@ -63,7 +63,7 @@
       syntax: this,
       node: text,
       allowIntraWord: allowIntraWord,
-      tags: tags ?? [],
+      tags: tags ?? const [],
     );
     if (delimiterRun != null) {
       parser.pushDelimiter(delimiterRun);