diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6326e147a..7dead2ee7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,4 +58,4 @@ jobs: distribution: 'zulu' - name: Android Lint checks - run: cd commonmark-android-test && ./gradlew :app:lint + run: cd commonmark-android-test && ./gradlew :app:lint && ./gradlew :app:animalsnifferDebug diff --git a/README.md b/README.md index 9559a6bcb..8e838e582 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ extensible library with the following features: The library is supported on Java 11 and later. It works on Android too, but that is on a best-effort basis, please report problems. For Android the -minimum API level is 19, see the +minimum API level is 24, see the [commonmark-android-test](commonmark-android-test) directory. diff --git a/commonmark-android-test/README.md b/commonmark-android-test/README.md index 0fb792ae3..9b737a98d 100644 --- a/commonmark-android-test/README.md +++ b/commonmark-android-test/README.md @@ -6,8 +6,8 @@ Current `minSdk` is 19 Requirements: -* Java 11 or above -* Android SDK 30 +* Java 17 or above (supported by the Gradle wrapper version) +* Android SDK Platform 30 and SDK Build Tools 36.0.0 Configuration ----- diff --git a/commonmark-android-test/app/build.gradle b/commonmark-android-test/app/build.gradle index fd8ae34cb..30b7cce8b 100644 --- a/commonmark-android-test/app/build.gradle +++ b/commonmark-android-test/app/build.gradle @@ -1,3 +1,8 @@ +// Check Java API usage +plugins { + id 'ru.vyarus.animalsniffer' version '2.0.1' +} + apply plugin: 'com.android.application' android { @@ -6,7 +11,7 @@ android { defaultConfig { applicationId "org.commonmark.android.test" - minSdk 19 + minSdk 24 targetSdk 30 versionCode 1 versionName "1.0" @@ -49,4 +54,6 @@ android { dependencies { implementation('org.nibor.autolink:autolink:0.11.0') + + signature 'net.sf.androidscents.signature:android-api-level-24:7.0_r2@signature' } diff --git a/commonmark-android-test/build.gradle b/commonmark-android-test/build.gradle index f359e8154..812dc8e40 100644 --- a/commonmark-android-test/build.gradle +++ b/commonmark-android-test/build.gradle @@ -4,7 +4,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:9.4.1' } } diff --git a/commonmark-android-test/gradle/wrapper/gradle-wrapper.jar b/commonmark-android-test/gradle/wrapper/gradle-wrapper.jar index d64cd4917..9fa7f2882 100644 Binary files a/commonmark-android-test/gradle/wrapper/gradle-wrapper.jar and b/commonmark-android-test/gradle/wrapper/gradle-wrapper.jar differ diff --git a/commonmark-android-test/gradle/wrapper/gradle-wrapper.properties b/commonmark-android-test/gradle/wrapper/gradle-wrapper.properties index a80b22ce5..91c4fc64a 100644 --- a/commonmark-android-test/gradle/wrapper/gradle-wrapper.properties +++ b/commonmark-android-test/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/commonmark-android-test/gradlew b/commonmark-android-test/gradlew index 1aa94a426..249efbb03 100755 --- a/commonmark-android-test/gradlew +++ b/commonmark-android-test/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,10 +15,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -27,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -112,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -170,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -203,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/commonmark-android-test/gradlew.bat b/commonmark-android-test/gradlew.bat index 7101f8e46..03754c4c3 100644 --- a/commonmark-android-test/gradlew.bat +++ b/commonmark-android-test/gradlew.bat @@ -13,16 +13,45 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +@rem Catch executions from older scripts and ensure they exit cleanly. +@rem This can be removed once we can be reasonably confident that few people +@rem will be migrating directly to this new wrapper. +goto afterSafetyNet +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +goto exitWithErrorLevel +:afterSafetyNet set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -43,13 +72,14 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -57,36 +87,26 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% -:mainEnd -if "%OS%"=="Windows_NT" endlocal +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel & goto exitWithErrorLevel -:omega +@rem This label must not be changed. We rely on old scripts being able to jump to this point. +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/commonmark-ext-autolink/src/main/java/org/commonmark/ext/autolink/AutolinkExtension.java b/commonmark-ext-autolink/src/main/java/org/commonmark/ext/autolink/AutolinkExtension.java index 14222121c..8d24b5769 100644 --- a/commonmark-ext-autolink/src/main/java/org/commonmark/ext/autolink/AutolinkExtension.java +++ b/commonmark-ext-autolink/src/main/java/org/commonmark/ext/autolink/AutolinkExtension.java @@ -1,5 +1,6 @@ package org.commonmark.ext.autolink; +import java.util.Arrays; import java.util.EnumSet; import java.util.Set; import org.commonmark.Extension; @@ -57,7 +58,12 @@ public Builder linkTypes(AutolinkType... linkTypes) { throw new NullPointerException("linkTypes must not be null"); } - return this.linkTypes(Set.of(linkTypes)); + if (linkTypes.length == 0) { + throw new IllegalArgumentException("linkTypes must not be empty"); + } + + this.linkTypes = EnumSet.copyOf(Arrays.asList(linkTypes)); + return this; } /** diff --git a/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/FootnotesExtension.java b/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/FootnotesExtension.java index 4517d14d6..f1114249b 100644 --- a/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/FootnotesExtension.java +++ b/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/FootnotesExtension.java @@ -1,5 +1,6 @@ package org.commonmark.ext.footnotes; +import java.util.Collections; import java.util.Set; import org.commonmark.Extension; import org.commonmark.ext.footnotes.internal.*; @@ -83,7 +84,7 @@ public NodeRenderer create(MarkdownNodeRendererContext context) { @Override public Set getSpecialCharacters() { - return Set.of(); + return Collections.emptySet(); } }); } diff --git a/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteBlockParser.java b/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteBlockParser.java index db11b906a..2bda7ad0a 100644 --- a/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteBlockParser.java +++ b/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteBlockParser.java @@ -1,5 +1,6 @@ package org.commonmark.ext.footnotes.internal; +import java.util.Collections; import java.util.List; import org.commonmark.ext.footnotes.FootnoteDefinition; import org.commonmark.node.Block; @@ -54,7 +55,7 @@ public BlockContinue tryContinue(ParserState parserState) { public List> getDefinitions() { var map = new DefinitionMap<>(FootnoteDefinition.class); map.putIfAbsent(block.getLabel(), block); - return List.of(map); + return Collections.singletonList(map); } public static class Factory implements BlockParserFactory { diff --git a/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteHtmlNodeRenderer.java b/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteHtmlNodeRenderer.java index db88a8269..2c2d42513 100644 --- a/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteHtmlNodeRenderer.java +++ b/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteHtmlNodeRenderer.java @@ -82,7 +82,12 @@ public FootnoteHtmlNodeRenderer(HtmlNodeRendererContext context) { @Override public Set> getNodeTypes() { - return Set.of(FootnoteReference.class, InlineFootnote.class, FootnoteDefinition.class); + return Collections.unmodifiableSet( + new HashSet<>( + Arrays.asList( + FootnoteReference.class, + InlineFootnote.class, + FootnoteDefinition.class))); } @Override @@ -203,7 +208,10 @@ private ReferenceInfo registerReference(Node node, String label) { } private void renderReference(Node node, ReferenceInfo referenceInfo) { - html.tag("sup", context.extendAttributes(node, "sup", Map.of("class", "footnote-ref"))); + html.tag( + "sup", + context.extendAttributes( + node, "sup", Collections.singletonMap("class", "footnote-ref"))); var href = "#" + referenceInfo.definitionId; var attrs = new LinkedHashMap(); @@ -231,7 +239,7 @@ private void renderDefinition(Node def, ReferencedDefinition referencedDefinitio // Because we're manually rendering the

for the last paragraph, do the same // for all other paragraphs for consistency (Paragraph rendering might be // overwritten by a custom renderer). - html.tag("p", context.extendAttributes(node, "p", Map.of())); + html.tag("p", context.extendAttributes(node, "p", Collections.emptyMap())); renderChildren(node); html.tag("/p"); html.line(); @@ -241,14 +249,14 @@ private void renderDefinition(Node def, ReferencedDefinition referencedDefinitio node = node.getNext(); } - html.tag("p", context.extendAttributes(lastParagraph, "p", Map.of())); + html.tag("p", context.extendAttributes(lastParagraph, "p", Collections.emptyMap())); renderChildren(lastParagraph); html.raw(" "); renderBackrefs(def, referencedDefinition); html.tag("/p"); html.line(); } else if (def instanceof InlineFootnote) { - html.tag("p", context.extendAttributes(def, "p", Map.of())); + html.tag("p", context.extendAttributes(def, "p", Collections.emptyMap())); renderChildren(def); html.raw(" "); renderBackrefs(def, referencedDefinition); @@ -283,7 +291,8 @@ private void renderBackrefs(Node def, ReferencedDefinition referencedDefinition) if (refNumber > 1) { html.tag( "sup", - context.extendAttributes(def, "sup", Map.of("class", "footnote-ref"))); + context.extendAttributes( + def, "sup", Collections.singletonMap("class", "footnote-ref"))); html.raw(String.valueOf(refNumber)); html.tag("/sup"); } diff --git a/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteMarkdownNodeRenderer.java b/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteMarkdownNodeRenderer.java index 0e654cf5e..a812a822d 100644 --- a/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteMarkdownNodeRenderer.java +++ b/commonmark-ext-footnotes/src/main/java/org/commonmark/ext/footnotes/internal/FootnoteMarkdownNodeRenderer.java @@ -1,5 +1,8 @@ package org.commonmark.ext.footnotes.internal; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.Set; import org.commonmark.ext.footnotes.FootnoteDefinition; import org.commonmark.ext.footnotes.FootnoteReference; @@ -21,7 +24,12 @@ public FootnoteMarkdownNodeRenderer(MarkdownNodeRendererContext context) { @Override public Set> getNodeTypes() { - return Set.of(FootnoteReference.class, InlineFootnote.class, FootnoteDefinition.class); + return Collections.unmodifiableSet( + new HashSet<>( + Arrays.asList( + FootnoteReference.class, + InlineFootnote.class, + FootnoteDefinition.class))); } @Override diff --git a/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/AlertsExtension.java b/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/AlertsExtension.java index 3035c9952..9c4515855 100644 --- a/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/AlertsExtension.java +++ b/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/AlertsExtension.java @@ -1,5 +1,6 @@ package org.commonmark.ext.gfm.alerts; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; @@ -121,7 +122,7 @@ public NodeRenderer create(MarkdownNodeRendererContext context) { @Override public Set getSpecialCharacters() { - return Set.of(); + return Collections.emptySet(); } }); } diff --git a/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertBlockParser.java b/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertBlockParser.java index 67acbe475..b5ecd23e2 100644 --- a/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertBlockParser.java +++ b/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertBlockParser.java @@ -1,6 +1,6 @@ package org.commonmark.ext.gfm.alerts.internal; -import java.util.List; +import java.util.Collections; import java.util.Locale; import java.util.Set; import java.util.regex.Pattern; @@ -91,7 +91,7 @@ public void parseInlines(InlineParser inlineParser) { // Set source spans on the title node from the source line var sourceSpan = titleLine.getSourceSpan(); if (sourceSpan != null) { - titleNode.setSourceSpans(List.of(sourceSpan)); + titleNode.setSourceSpans(Collections.singletonList(sourceSpan)); } // Body blocks were attached as children during block parsing. Prepend the title. diff --git a/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertHtmlNodeRenderer.java b/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertHtmlNodeRenderer.java index 30aea6f04..5f5fe78f8 100644 --- a/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertHtmlNodeRenderer.java +++ b/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertHtmlNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.gfm.alerts.internal; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import org.commonmark.ext.gfm.alerts.Alert; @@ -40,7 +41,9 @@ protected void renderAlert(Alert alert) { // Render alert title htmlWriter.tag( - "p", context.extendAttributes(alert, "p", Map.of("class", "markdown-alert-title"))); + "p", + context.extendAttributes( + alert, "p", Collections.singletonMap("class", "markdown-alert-title"))); var first = alert.getFirstChild(); if (first instanceof AlertTitle) { renderChildren(first); diff --git a/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertNodeRenderer.java b/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertNodeRenderer.java index ff4bdf6ad..23926bf91 100644 --- a/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertNodeRenderer.java +++ b/commonmark-ext-gfm-alerts/src/main/java/org/commonmark/ext/gfm/alerts/internal/AlertNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.gfm.alerts.internal; +import java.util.Collections; import java.util.Set; import org.commonmark.ext.gfm.alerts.Alert; import org.commonmark.ext.gfm.alerts.AlertTitle; @@ -10,7 +11,7 @@ public abstract class AlertNodeRenderer implements NodeRenderer { @Override public Set> getNodeTypes() { - return Set.of(Alert.class); + return Collections.singleton(Alert.class); } @Override diff --git a/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/StrikethroughExtension.java b/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/StrikethroughExtension.java index 4b18b7d66..f3b01fee3 100644 --- a/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/StrikethroughExtension.java +++ b/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/StrikethroughExtension.java @@ -1,5 +1,6 @@ package org.commonmark.ext.gfm.strikethrough; +import java.util.Collections; import java.util.Set; import org.commonmark.Extension; import org.commonmark.ext.gfm.strikethrough.internal.StrikethroughDelimiterProcessor; @@ -96,7 +97,7 @@ public NodeRenderer create(MarkdownNodeRendererContext context) { @Override public Set getSpecialCharacters() { - return Set.of('~'); + return Collections.singleton('~'); } }); } diff --git a/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/internal/StrikethroughHtmlNodeRenderer.java b/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/internal/StrikethroughHtmlNodeRenderer.java index e5ee31f4e..033258d7c 100644 --- a/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/internal/StrikethroughHtmlNodeRenderer.java +++ b/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/internal/StrikethroughHtmlNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.gfm.strikethrough.internal; +import java.util.Collections; import java.util.Map; import org.commonmark.node.Node; import org.commonmark.renderer.html.HtmlNodeRendererContext; @@ -17,7 +18,8 @@ public StrikethroughHtmlNodeRenderer(HtmlNodeRendererContext context) { @Override public void render(Node node) { - Map attributes = context.extendAttributes(node, "del", Map.of()); + Map attributes = + context.extendAttributes(node, "del", Collections.emptyMap()); html.tag("del", attributes); renderChildren(node); html.tag("/del"); diff --git a/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/internal/StrikethroughNodeRenderer.java b/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/internal/StrikethroughNodeRenderer.java index 56d94d300..1c4254671 100644 --- a/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/internal/StrikethroughNodeRenderer.java +++ b/commonmark-ext-gfm-strikethrough/src/main/java/org/commonmark/ext/gfm/strikethrough/internal/StrikethroughNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.gfm.strikethrough.internal; +import java.util.Collections; import java.util.Set; import org.commonmark.ext.gfm.strikethrough.Strikethrough; import org.commonmark.node.Node; @@ -9,6 +10,6 @@ abstract class StrikethroughNodeRenderer implements NodeRenderer { @Override public Set> getNodeTypes() { - return Set.of(Strikethrough.class); + return Collections.singleton(Strikethrough.class); } } diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java index 0db0ea513..4646c18dd 100644 --- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java +++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/TablesExtension.java @@ -1,5 +1,6 @@ package org.commonmark.ext.gfm.tables; +import java.util.Collections; import java.util.Set; import org.commonmark.Extension; import org.commonmark.ext.gfm.tables.internal.TableBlockParser; @@ -78,7 +79,7 @@ public NodeRenderer create(MarkdownNodeRendererContext context) { @Override public Set getSpecialCharacters() { - return Set.of('|'); + return Collections.singleton('|'); } }); } diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableHtmlNodeRenderer.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableHtmlNodeRenderer.java index 81e584c9d..d0039d41d 100644 --- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableHtmlNodeRenderer.java +++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableHtmlNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.gfm.tables.internal; +import java.util.Collections; import java.util.Map; import org.commonmark.ext.gfm.tables.*; import org.commonmark.node.Node; @@ -63,15 +64,17 @@ protected void renderCell(TableCell tableCell) { } private Map getAttributes(Node node, String tagName) { - return context.extendAttributes(node, tagName, Map.of()); + return context.extendAttributes(node, tagName, Collections.emptyMap()); } private Map getCellAttributes(TableCell tableCell, String tagName) { if (tableCell.getAlignment() != null) { return context.extendAttributes( - tableCell, tagName, Map.of("align", getAlignValue(tableCell.getAlignment()))); + tableCell, + tagName, + Collections.singletonMap("align", getAlignValue(tableCell.getAlignment()))); } else { - return context.extendAttributes(tableCell, tagName, Map.of()); + return context.extendAttributes(tableCell, tagName, Collections.emptyMap()); } } diff --git a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java index 4e3a00815..3cfe17441 100644 --- a/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java +++ b/commonmark-ext-gfm-tables/src/main/java/org/commonmark/ext/gfm/tables/internal/TableNodeRenderer.java @@ -1,5 +1,8 @@ package org.commonmark.ext.gfm.tables.internal; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.Set; import org.commonmark.ext.gfm.tables.*; import org.commonmark.node.Node; @@ -9,12 +12,14 @@ abstract class TableNodeRenderer implements NodeRenderer { @Override public Set> getNodeTypes() { - return Set.of( - TableBlock.class, - TableHead.class, - TableBody.class, - TableRow.class, - TableCell.class); + return Collections.unmodifiableSet( + new HashSet<>( + Arrays.asList( + TableBlock.class, + TableHead.class, + TableBody.class, + TableRow.class, + TableCell.class))); } @Override diff --git a/commonmark-ext-image-attributes/src/main/java/org/commonmark/ext/image/attributes/internal/ImageAttributesDelimiterProcessor.java b/commonmark-ext-image-attributes/src/main/java/org/commonmark/ext/image/attributes/internal/ImageAttributesDelimiterProcessor.java index 53ba882c9..e7a3062e4 100644 --- a/commonmark-ext-image-attributes/src/main/java/org/commonmark/ext/image/attributes/internal/ImageAttributesDelimiterProcessor.java +++ b/commonmark-ext-image-attributes/src/main/java/org/commonmark/ext/image/attributes/internal/ImageAttributesDelimiterProcessor.java @@ -12,7 +12,8 @@ public class ImageAttributesDelimiterProcessor implements DelimiterProcessor { // Only allow a defined set of attributes to be used. - private static final Set SUPPORTED_ATTRIBUTES = Set.of("width", "height"); + private static final Set SUPPORTED_ATTRIBUTES = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("width", "height"))); @Override public char getOpeningCharacter() { diff --git a/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/InsExtension.java b/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/InsExtension.java index a39b77af8..b180e5db5 100644 --- a/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/InsExtension.java +++ b/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/InsExtension.java @@ -1,5 +1,6 @@ package org.commonmark.ext.ins; +import java.util.Collections; import java.util.Set; import org.commonmark.Extension; import org.commonmark.ext.ins.internal.InsDelimiterProcessor; @@ -64,7 +65,7 @@ public Set getSpecialCharacters() { // We technically don't need to escape single occurrences of +, but that's // all the extension API // exposes currently. - return Set.of('+'); + return Collections.singleton('+'); } }); } diff --git a/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/internal/InsHtmlNodeRenderer.java b/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/internal/InsHtmlNodeRenderer.java index d4defcbdc..c4e55dd9f 100644 --- a/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/internal/InsHtmlNodeRenderer.java +++ b/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/internal/InsHtmlNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.ins.internal; +import java.util.Collections; import java.util.Map; import org.commonmark.node.Node; import org.commonmark.renderer.html.HtmlNodeRendererContext; @@ -17,7 +18,8 @@ public InsHtmlNodeRenderer(HtmlNodeRendererContext context) { @Override public void render(Node node) { - Map attributes = context.extendAttributes(node, "ins", Map.of()); + Map attributes = + context.extendAttributes(node, "ins", Collections.emptyMap()); html.tag("ins", attributes); renderChildren(node); html.tag("/ins"); diff --git a/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/internal/InsNodeRenderer.java b/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/internal/InsNodeRenderer.java index 4e8e0283e..a31102f91 100644 --- a/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/internal/InsNodeRenderer.java +++ b/commonmark-ext-ins/src/main/java/org/commonmark/ext/ins/internal/InsNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.ins.internal; +import java.util.Collections; import java.util.Set; import org.commonmark.ext.ins.Ins; import org.commonmark.node.Node; @@ -9,6 +10,6 @@ abstract class InsNodeRenderer implements NodeRenderer { @Override public Set> getNodeTypes() { - return Set.of(Ins.class); + return Collections.singleton(Ins.class); } } diff --git a/commonmark-ext-task-list-items/src/main/java/org/commonmark/ext/task/list/items/TaskListItemsExtension.java b/commonmark-ext-task-list-items/src/main/java/org/commonmark/ext/task/list/items/TaskListItemsExtension.java index abddc519a..efbee4f15 100644 --- a/commonmark-ext-task-list-items/src/main/java/org/commonmark/ext/task/list/items/TaskListItemsExtension.java +++ b/commonmark-ext-task-list-items/src/main/java/org/commonmark/ext/task/list/items/TaskListItemsExtension.java @@ -1,5 +1,6 @@ package org.commonmark.ext.task.list.items; +import java.util.Collections; import java.util.Set; import org.commonmark.Extension; import org.commonmark.ext.task.list.items.internal.TaskListItemHtmlNodeRenderer; @@ -53,7 +54,7 @@ public NodeRenderer create(MarkdownNodeRendererContext context) { @Override public Set getSpecialCharacters() { - return Set.of(); + return Collections.emptySet(); } }); } diff --git a/commonmark-ext-task-list-items/src/main/java/org/commonmark/ext/task/list/items/internal/TaskListItemNodeRenderer.java b/commonmark-ext-task-list-items/src/main/java/org/commonmark/ext/task/list/items/internal/TaskListItemNodeRenderer.java index 24efd4e7d..087ab9d27 100644 --- a/commonmark-ext-task-list-items/src/main/java/org/commonmark/ext/task/list/items/internal/TaskListItemNodeRenderer.java +++ b/commonmark-ext-task-list-items/src/main/java/org/commonmark/ext/task/list/items/internal/TaskListItemNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.task.list.items.internal; +import java.util.Collections; import java.util.Set; import org.commonmark.ext.task.list.items.TaskListItemMarker; import org.commonmark.node.Node; @@ -8,6 +9,6 @@ public abstract class TaskListItemNodeRenderer implements NodeRenderer { @Override public Set> getNodeTypes() { - return Set.of(TaskListItemMarker.class); + return Collections.singleton(TaskListItemMarker.class); } } diff --git a/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/YamlFrontMatterExtension.java b/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/YamlFrontMatterExtension.java index 0617c8270..55234819d 100644 --- a/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/YamlFrontMatterExtension.java +++ b/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/YamlFrontMatterExtension.java @@ -1,5 +1,6 @@ package org.commonmark.ext.front.matter; +import java.util.Collections; import java.util.Objects; import java.util.Set; import org.commonmark.Extension; @@ -69,7 +70,7 @@ public NodeRenderer create(MarkdownNodeRendererContext context) { @Override public Set getSpecialCharacters() { - return Set.of(); + return Collections.emptySet(); } }); } diff --git a/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/internal/YamlFrontMatterNodeRenderer.java b/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/internal/YamlFrontMatterNodeRenderer.java index 607b621ec..53486d0c3 100644 --- a/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/internal/YamlFrontMatterNodeRenderer.java +++ b/commonmark-ext-yaml-front-matter/src/main/java/org/commonmark/ext/front/matter/internal/YamlFrontMatterNodeRenderer.java @@ -1,5 +1,6 @@ package org.commonmark.ext.front.matter.internal; +import java.util.Collections; import java.util.Set; import org.commonmark.ext.front.matter.YamlFrontMatterBlock; import org.commonmark.node.Node; @@ -8,6 +9,6 @@ abstract class YamlFrontMatterNodeRenderer implements NodeRenderer { @Override public Set> getNodeTypes() { - return Set.of(YamlFrontMatterBlock.class); + return Collections.singleton(YamlFrontMatterBlock.class); } } diff --git a/commonmark/src/main/java/org/commonmark/internal/DocumentParser.java b/commonmark/src/main/java/org/commonmark/internal/DocumentParser.java index 62b392b88..3724a8cf6 100644 --- a/commonmark/src/main/java/org/commonmark/internal/DocumentParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/DocumentParser.java @@ -20,7 +20,7 @@ public class DocumentParser implements ParserState { private static final Set> CORE_FACTORY_TYPES = new LinkedHashSet<>( - List.of( + Arrays.asList( BlockQuote.class, Heading.class, FencedCodeBlock.class, diff --git a/commonmark/src/main/java/org/commonmark/internal/InlineParserImpl.java b/commonmark/src/main/java/org/commonmark/internal/InlineParserImpl.java index e11e493f3..ffa2b51b4 100644 --- a/commonmark/src/main/java/org/commonmark/internal/InlineParserImpl.java +++ b/commonmark/src/main/java/org/commonmark/internal/InlineParserImpl.java @@ -90,7 +90,11 @@ private static Map calculateDelimiterProcessors( List delimiterProcessors) { var map = new HashMap(); addDelimiterProcessors( - List.of(new AsteriskDelimiterProcessor(), new UnderscoreDelimiterProcessor()), map); + Collections.unmodifiableList( + Arrays.asList( + new AsteriskDelimiterProcessor(), + new UnderscoreDelimiterProcessor())), + map); addDelimiterProcessors(delimiterProcessors, map); return map; } @@ -223,11 +227,11 @@ private List parseInline() { switch (c) { case '[': - return List.of(parseOpenBracket()); + return Collections.singletonList(parseOpenBracket()); case ']': - return List.of(parseCloseBracket()); + return Collections.singletonList(parseCloseBracket()); case '\n': - return List.of(parseLineBreak()); + return Collections.singletonList(parseLineBreak()); case Scanner.END: return null; } @@ -244,7 +248,7 @@ private List parseInline() { // No inline parser, delimiter or other special handling. if (!specialCharacters.get(c)) { - return List.of(parseText()); + return Collections.singletonList(parseText()); } List inlineParsers = this.inlineParsers.get(c); @@ -260,7 +264,7 @@ private List parseInline() { node.setSourceSpans( scanner.getSource(position, scanner.position()).getSourceSpans()); } - return List.of(node); + return Collections.singletonList(node); } else { // Reset position scanner.setPosition(position); @@ -277,7 +281,7 @@ private List parseInline() { } // If we get here, even for a special/delimiter character, we will just treat it as text. - return List.of(parseText()); + return Collections.singletonList(parseText()); } /** Attempt to parse delimiters like emphasis, strong emphasis or custom delimiters. */ @@ -334,7 +338,7 @@ private List parseLinkMarker() { contentPosition, lastBracket, lastDelimiter)); - return List.of(bangNode, bracketNode); + return Collections.unmodifiableList(Arrays.asList(bangNode, bracketNode)); } else { return null; } diff --git a/commonmark/src/main/java/org/commonmark/internal/ParagraphParser.java b/commonmark/src/main/java/org/commonmark/internal/ParagraphParser.java index 47f69b34a..9a1e5ec1a 100644 --- a/commonmark/src/main/java/org/commonmark/internal/ParagraphParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/ParagraphParser.java @@ -1,5 +1,6 @@ package org.commonmark.internal; +import java.util.Collections; import java.util.List; import org.commonmark.node.*; import org.commonmark.parser.InlineParser; @@ -52,7 +53,7 @@ public List> getDefinitions() { for (var def : linkReferenceDefinitionParser.getDefinitions()) { map.putIfAbsent(def.getLabel(), def); } - return List.of(map); + return Collections.singletonList(map); } @Override diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/AutolinkInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/AutolinkInlineParser.java index f84a62210..1bd631469 100644 --- a/commonmark/src/main/java/org/commonmark/internal/inline/AutolinkInlineParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/inline/AutolinkInlineParser.java @@ -1,5 +1,6 @@ package org.commonmark.internal.inline; +import java.util.Collections; import java.util.Set; import java.util.regex.Pattern; import org.commonmark.node.Link; @@ -56,7 +57,7 @@ public ParsedInline tryParse(InlineParserState inlineParserState) { public static class Factory implements InlineContentParserFactory { @Override public Set getTriggerCharacters() { - return Set.of('<'); + return Collections.singleton('<'); } @Override diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/BackslashInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/BackslashInlineParser.java index c4e8f3aff..c639606a0 100644 --- a/commonmark/src/main/java/org/commonmark/internal/inline/BackslashInlineParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/inline/BackslashInlineParser.java @@ -1,5 +1,6 @@ package org.commonmark.internal.inline; +import java.util.Collections; import java.util.Set; import java.util.regex.Pattern; import org.commonmark.internal.util.Escaping; @@ -37,7 +38,7 @@ public ParsedInline tryParse(InlineParserState inlineParserState) { public static class Factory implements InlineContentParserFactory { @Override public Set getTriggerCharacters() { - return Set.of('\\'); + return Collections.singleton('\\'); } @Override diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java index 73e5398bf..89b862571 100644 --- a/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/inline/BackticksInlineParser.java @@ -1,5 +1,6 @@ package org.commonmark.internal.inline; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -77,7 +78,7 @@ public ParsedInline tryParse(InlineParserState inlineParserState) { public static class Factory implements InlineContentParserFactory { @Override public Set getTriggerCharacters() { - return Set.of('`'); + return Collections.singleton('`'); } @Override diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/EntityInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/EntityInlineParser.java index e3ed0c08b..a639fc832 100644 --- a/commonmark/src/main/java/org/commonmark/internal/inline/EntityInlineParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/inline/EntityInlineParser.java @@ -1,5 +1,6 @@ package org.commonmark.internal.inline; +import java.util.Collections; import java.util.Set; import org.commonmark.internal.util.Html5Entities; import org.commonmark.node.Text; @@ -58,7 +59,7 @@ public static class Factory implements InlineContentParserFactory { @Override public Set getTriggerCharacters() { - return Set.of('&'); + return Collections.singleton('&'); } @Override diff --git a/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java b/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java index a34346da0..babcb90fb 100644 --- a/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/inline/HtmlInlineParser.java @@ -1,5 +1,6 @@ package org.commonmark.internal.inline; +import java.util.Collections; import java.util.Set; import org.commonmark.node.HtmlInline; import org.commonmark.parser.beta.*; @@ -260,7 +261,7 @@ public static class Factory implements InlineContentParserFactory { @Override public Set getTriggerCharacters() { - return Set.of('<'); + return Collections.singleton('<'); } @Override diff --git a/commonmark/src/main/java/org/commonmark/node/Node.java b/commonmark/src/main/java/org/commonmark/node/Node.java index adc64838c..06804bc3e 100644 --- a/commonmark/src/main/java/org/commonmark/node/Node.java +++ b/commonmark/src/main/java/org/commonmark/node/Node.java @@ -120,7 +120,9 @@ public void insertBefore(Node sibling) { * @since 0.16.0 */ public List getSourceSpans() { - return sourceSpans != null ? Collections.unmodifiableList(sourceSpans) : List.of(); + return sourceSpans != null + ? Collections.unmodifiableList(sourceSpans) + : Collections.emptyList(); } /** diff --git a/commonmark/src/main/java/org/commonmark/node/SourceSpans.java b/commonmark/src/main/java/org/commonmark/node/SourceSpans.java index 945f1c19a..a13053606 100644 --- a/commonmark/src/main/java/org/commonmark/node/SourceSpans.java +++ b/commonmark/src/main/java/org/commonmark/node/SourceSpans.java @@ -1,6 +1,7 @@ package org.commonmark.node; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -17,7 +18,7 @@ public static SourceSpans empty() { } public List getSourceSpans() { - return sourceSpans != null ? sourceSpans : List.of(); + return sourceSpans != null ? sourceSpans : Collections.emptyList(); } public void addAllFrom(Iterable nodes) { diff --git a/commonmark/src/main/java/org/commonmark/parser/block/AbstractBlockParser.java b/commonmark/src/main/java/org/commonmark/parser/block/AbstractBlockParser.java index 69610a664..9e6861dee 100644 --- a/commonmark/src/main/java/org/commonmark/parser/block/AbstractBlockParser.java +++ b/commonmark/src/main/java/org/commonmark/parser/block/AbstractBlockParser.java @@ -1,5 +1,6 @@ package org.commonmark.parser.block; +import java.util.Collections; import java.util.List; import org.commonmark.node.Block; import org.commonmark.node.DefinitionMap; @@ -34,7 +35,7 @@ public void addSourceSpan(SourceSpan sourceSpan) { @Override public List> getDefinitions() { - return List.of(); + return Collections.emptyList(); } @Override diff --git a/commonmark/src/main/java/org/commonmark/renderer/html/CoreHtmlNodeRenderer.java b/commonmark/src/main/java/org/commonmark/renderer/html/CoreHtmlNodeRenderer.java index d5e0d8afc..418bf606d 100644 --- a/commonmark/src/main/java/org/commonmark/renderer/html/CoreHtmlNodeRenderer.java +++ b/commonmark/src/main/java/org/commonmark/renderer/html/CoreHtmlNodeRenderer.java @@ -1,5 +1,8 @@ package org.commonmark.renderer.html; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -21,27 +24,29 @@ public CoreHtmlNodeRenderer(HtmlNodeRendererContext context) { @Override public Set> getNodeTypes() { - return Set.of( - Document.class, - Heading.class, - Paragraph.class, - BlockQuote.class, - BulletList.class, - FencedCodeBlock.class, - HtmlBlock.class, - ThematicBreak.class, - IndentedCodeBlock.class, - Link.class, - ListItem.class, - OrderedList.class, - Image.class, - Emphasis.class, - StrongEmphasis.class, - Text.class, - Code.class, - HtmlInline.class, - SoftLineBreak.class, - HardLineBreak.class); + return Collections.unmodifiableSet( + new HashSet<>( + Arrays.asList( + Document.class, + Heading.class, + Paragraph.class, + BlockQuote.class, + BulletList.class, + FencedCodeBlock.class, + HtmlBlock.class, + ThematicBreak.class, + IndentedCodeBlock.class, + Link.class, + ListItem.class, + OrderedList.class, + Image.class, + Emphasis.class, + StrongEmphasis.class, + Text.class, + Code.class, + HtmlInline.class, + SoftLineBreak.class, + HardLineBreak.class))); } @Override @@ -140,7 +145,7 @@ public void visit(ThematicBreak thematicBreak) { @Override public void visit(IndentedCodeBlock indentedCodeBlock) { - renderCodeBlock(indentedCodeBlock.getLiteral(), indentedCodeBlock, Map.of()); + renderCodeBlock(indentedCodeBlock.getLiteral(), indentedCodeBlock, Collections.emptyMap()); } @Override @@ -294,7 +299,7 @@ private boolean isInTightList(Paragraph paragraph) { } private Map getAttrs(Node node, String tagName) { - return getAttrs(node, tagName, Map.of()); + return getAttrs(node, tagName, Collections.emptyMap()); } private Map getAttrs( diff --git a/commonmark/src/main/java/org/commonmark/renderer/html/DefaultUrlSanitizer.java b/commonmark/src/main/java/org/commonmark/renderer/html/DefaultUrlSanitizer.java index bdf59e809..a0a439b63 100644 --- a/commonmark/src/main/java/org/commonmark/renderer/html/DefaultUrlSanitizer.java +++ b/commonmark/src/main/java/org/commonmark/renderer/html/DefaultUrlSanitizer.java @@ -11,7 +11,7 @@ public class DefaultUrlSanitizer implements UrlSanitizer { private Set protocols; public DefaultUrlSanitizer() { - this(List.of("http", "https", "mailto", "data")); + this(Collections.unmodifiableList(Arrays.asList("http", "https", "mailto", "data"))); } public DefaultUrlSanitizer(Collection protocols) { diff --git a/commonmark/src/main/java/org/commonmark/renderer/html/HtmlWriter.java b/commonmark/src/main/java/org/commonmark/renderer/html/HtmlWriter.java index ebe638dc3..0b3255c9c 100644 --- a/commonmark/src/main/java/org/commonmark/renderer/html/HtmlWriter.java +++ b/commonmark/src/main/java/org/commonmark/renderer/html/HtmlWriter.java @@ -1,13 +1,14 @@ package org.commonmark.renderer.html; import java.io.IOException; +import java.util.Collections; import java.util.Map; import java.util.Objects; import org.commonmark.internal.util.Escaping; public class HtmlWriter { - private static final Map NO_ATTRIBUTES = Map.of(); + private static final Map NO_ATTRIBUTES = Collections.emptyMap(); private final Appendable buffer; private char lastChar = 0; diff --git a/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java b/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java index d4025128b..1c6ee2572 100644 --- a/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java +++ b/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java @@ -1,5 +1,8 @@ package org.commonmark.renderer.markdown; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.regex.Matcher; @@ -54,27 +57,29 @@ public CoreMarkdownNodeRenderer(MarkdownNodeRendererContext context) { @Override public Set> getNodeTypes() { - return Set.of( - BlockQuote.class, - BulletList.class, - Code.class, - Document.class, - Emphasis.class, - FencedCodeBlock.class, - HardLineBreak.class, - Heading.class, - HtmlBlock.class, - HtmlInline.class, - Image.class, - IndentedCodeBlock.class, - Link.class, - ListItem.class, - OrderedList.class, - Paragraph.class, - SoftLineBreak.class, - StrongEmphasis.class, - Text.class, - ThematicBreak.class); + return Collections.unmodifiableSet( + new HashSet<>( + Arrays.asList( + BlockQuote.class, + BulletList.class, + Code.class, + Document.class, + Emphasis.class, + FencedCodeBlock.class, + HardLineBreak.class, + Heading.class, + HtmlBlock.class, + HtmlInline.class, + Image.class, + IndentedCodeBlock.class, + Link.class, + ListItem.class, + OrderedList.class, + Paragraph.class, + SoftLineBreak.class, + StrongEmphasis.class, + Text.class, + ThematicBreak.class))); } @Override @@ -505,9 +510,9 @@ private static List getLines(String literal) { if (parts[parts.length - 1].isEmpty()) { // But we don't want the last empty string, as "\n" is used as a line terminator (not a // separator), so return without the last element. - return List.of(parts).subList(0, parts.length - 1); + return Collections.unmodifiableList(Arrays.asList(parts)).subList(0, parts.length - 1); } else { - return List.of(parts); + return Collections.unmodifiableList(Arrays.asList(parts)); } } diff --git a/commonmark/src/main/java/org/commonmark/renderer/markdown/MarkdownRenderer.java b/commonmark/src/main/java/org/commonmark/renderer/markdown/MarkdownRenderer.java index edef645a4..d31a261da 100644 --- a/commonmark/src/main/java/org/commonmark/renderer/markdown/MarkdownRenderer.java +++ b/commonmark/src/main/java/org/commonmark/renderer/markdown/MarkdownRenderer.java @@ -44,7 +44,7 @@ public NodeRenderer create(MarkdownNodeRendererContext context) { @Override public Set getSpecialCharacters() { - return Set.of(); + return Collections.emptySet(); } }); } diff --git a/commonmark/src/main/java/org/commonmark/renderer/text/CoreTextContentNodeRenderer.java b/commonmark/src/main/java/org/commonmark/renderer/text/CoreTextContentNodeRenderer.java index 22718d088..a20eac7c1 100644 --- a/commonmark/src/main/java/org/commonmark/renderer/text/CoreTextContentNodeRenderer.java +++ b/commonmark/src/main/java/org/commonmark/renderer/text/CoreTextContentNodeRenderer.java @@ -1,5 +1,8 @@ package org.commonmark.renderer.text; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.Set; import org.commonmark.node.*; import org.commonmark.renderer.NodeRenderer; @@ -21,27 +24,29 @@ public CoreTextContentNodeRenderer(TextContentNodeRendererContext context) { @Override public Set> getNodeTypes() { - return Set.of( - Document.class, - Heading.class, - Paragraph.class, - BlockQuote.class, - BulletList.class, - FencedCodeBlock.class, - HtmlBlock.class, - ThematicBreak.class, - IndentedCodeBlock.class, - Link.class, - ListItem.class, - OrderedList.class, - Image.class, - Emphasis.class, - StrongEmphasis.class, - Text.class, - Code.class, - HtmlInline.class, - SoftLineBreak.class, - HardLineBreak.class); + return Collections.unmodifiableSet( + new HashSet<>( + Arrays.asList( + Document.class, + Heading.class, + Paragraph.class, + BlockQuote.class, + BulletList.class, + FencedCodeBlock.class, + HtmlBlock.class, + ThematicBreak.class, + IndentedCodeBlock.class, + Link.class, + ListItem.class, + OrderedList.class, + Image.class, + Emphasis.class, + StrongEmphasis.class, + Text.class, + Code.class, + HtmlInline.class, + SoftLineBreak.class, + HardLineBreak.class))); } @Override