@@ -0,0 +1,1395 @@
+package com.btkelly.gnag.utils;%0A%0Aimport org.gradle.api.Project;%0Aimport org.jetbrains.annotations.NotNull;%0Aimport org.jetbrains.annotations.Nullable;%0A%0Apublic interface DefaultRelativeFilePathComputer %7B%0A%0A    /**%0A     * @param absoluteFilePath the absolute path to a target file. Should be trimmed of all excess whitespace and%0A     *                         newlines.%0A     * @param project the current project%0A     * @return the path to the target file, relative to the root directory of the current project, iff the target file%0A     *         is contained within that directory; null otherwise%0A     */%0A    @Nullable%0A    default String computeFilePathRelativeToProjectRoot(%0A            @NotNull final String absoluteFilePath, @NotNull final Project project) %7B%0A        %0A        final String expectedFilePathPrefix = project.getRootDir().getAbsolutePath() + %22/%22;%0A        %0A        if (!absoluteFilePath.startsWith(expectedFilePathPrefix)) %7B%0A            // The target file _is not_ contained within the root directory of the current project. Return null.%0A            return null;%0A        %7D else %7B%0A            /*%0A             * The target file _is_ contained within the root directory of the current project. Return the path to the%0A             * target file relative to the root directory.%0A             */%0A            return absoluteFilePath.replace(expectedFilePathPrefix, %22%22);%0A        %7D%0A    %7D%0A    %0A%7D%0A

Add interface that handles default absolute -> relative file path conversions