Skip to content

blindspot on RemoveUnusedImportsStep #1261

Description

@Pankraz76

Only PMD found the unused stuff, spot missed:

[WARNING] PMD Failure: io.quarkus.test.ExportUtil:3 Rule:UnnecessaryImport Priority:4 Unused static import 'io.quarkus.test.ExportUtil.APPLICATION_PROPERTIES'.

Image
package io.quarkus.test;

import static io.quarkus.test.ExportUtil.APPLICATION_PROPERTIES;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.Properties;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.jboss.shrinkwrap.api.Node;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.exporter.ZipExporter;
import org.jboss.shrinkwrap.api.spec.JavaArchive;

final class ExportUtil {

    static final String APPLICATION_PROPERTIES = "application.properties";

    private ExportUtil() {
    }

    static void exportToQuarkusDeploymentPath(JavaArchive archive) throws IOException {
        String exportPath = System.getProperty("quarkus.deploymentExportPath");
        if (exportPath == null) {
            return;
        }
        File exportDir = new File(exportPath);
        if (exportDir.exists()) {
            if (!exportDir.isDirectory()) {
                throw new IllegalStateException("Export path is not a directory: " + exportPath);
            }
            try (Stream<Path> stream = Files.walk(exportDir.toPath())) {
                stream.sorted(Comparator.reverseOrder()).map(Path::toFile)
                        .forEach(File::delete);
            }
        } else if (!exportDir.mkdirs()) {
            throw new IllegalStateException("Export path could not be created: " + exportPath);
        }
        File exportFile = new File(exportDir, archive.getName());
        archive.as(ZipExporter.class).exportTo(exportFile);
    }

    static void mergeCustomApplicationProperties(JavaArchive archive, Properties customApplicationProperties)
            throws IOException {
        Node applicationProperties = archive.get(APPLICATION_PROPERTIES);
        if (applicationProperties != null) {
            // Merge the existing "application.properties" asset and overriden config properties
            // Overriden properties take precedence
            Properties mergedProperties = new Properties();
            Asset asset = applicationProperties.getAsset();
            if (asset instanceof StringAsset strAsset) {
                mergedProperties.load(new StringReader(strAsset.getSource()));
            } else {
                try (InputStream in = asset.openStream()) {
                    mergedProperties.load(in);
                }
            }
            customApplicationProperties.forEach(mergedProperties::put);

            if (Boolean.parseBoolean(System.getProperty("quarkus.test.log-merged-properties"))) {
                System.out.println("Merged config properties:\n"
                        + mergedProperties.keySet().stream().map(Object::toString).collect(Collectors.joining("\n")));
            } else {
                System.out.println(
                        "NOTE: overrideConfigKey() and application.properties were merged; use quarkus.test.log-merged-properties=true to list the specific values");
            }
            deleteApplicationProperties(archive);
            archive.add(new PropertiesAsset(mergedProperties), APPLICATION_PROPERTIES);
        } else {
            archive.add(new PropertiesAsset(customApplicationProperties), APPLICATION_PROPERTIES);
        }
    }

    static void deleteApplicationProperties(JavaArchive archive) {
        // MemoryMapArchiveBase#addAsset(ArchivePath,Asset) does not overwrite the existing node correctly
        // https://github.com/shrinkwrap/shrinkwrap/issues/179
        archive.delete(APPLICATION_PROPERTIES);
    }
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions