All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.buschmais.jqassistant.plugin.common.api.report.FileSourceHelper Maven / Gradle / Ivy

package com.buschmais.jqassistant.plugin.common.api.report;

import java.util.Optional;

import com.buschmais.jqassistant.core.report.api.model.source.ArtifactLocation;
import com.buschmais.jqassistant.core.report.api.model.source.FileLocation;
import com.buschmais.jqassistant.plugin.common.api.model.ArtifactFileDescriptor;
import com.buschmais.jqassistant.plugin.common.api.model.FileDescriptor;

import lombok.NoArgsConstructor;

import static java.util.Optional.*;
import static lombok.AccessLevel.PRIVATE;

/**
 * Provides utility functions for resolving source locations
 * {@link FileDescriptor}s.
 */
@NoArgsConstructor(access = PRIVATE)
public class FileSourceHelper {

    public static Optional getSourceLocation(FileDescriptor descriptor, Optional startLine, Optional endLine) {
        String fileName = descriptor.getFileName();
        if (fileName != null) {
            FileLocation.FileLocationBuilder fileLocationBuilder = FileLocation.builder().fileName(fileName);
            fileLocationBuilder.startLine(startLine);
            fileLocationBuilder.endLine(endLine);
            fileLocationBuilder.parent(getParentLocation(descriptor));
            return of(fileLocationBuilder.build());
        }
        return empty();
    }

    public static Optional getParentLocation(FileDescriptor descriptor) {
        for (FileDescriptor parentDescriptor : descriptor.getParents()) {
            if (parentDescriptor instanceof ArtifactFileDescriptor) {
                ArtifactFileDescriptor parentArtifactFileDescriptor = (ArtifactFileDescriptor) parentDescriptor;
                // fileName
                ArtifactLocation.ArtifactLocationBuilder artifactLocationBuilder = ArtifactLocation.builder()
                        .fileName(parentArtifactFileDescriptor.getFileName());
                // optional Maven coordinates
                artifactLocationBuilder.group(ofNullable(parentArtifactFileDescriptor.getGroup())).name(ofNullable(parentArtifactFileDescriptor.getName()))
                        .version(ofNullable(parentArtifactFileDescriptor.getVersion())).type(ofNullable(parentArtifactFileDescriptor.getType()))
                        .classifier(ofNullable(parentArtifactFileDescriptor.getClassifier()));
                // optional parent(s)
                artifactLocationBuilder.parent(getParentLocation(parentArtifactFileDescriptor));
                return of(artifactLocationBuilder.build());
            }
        }
        return empty();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy