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

org.conqat.engine.index.shared.PreCommit3Result Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) CQSE GmbH
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.conqat.engine.index.shared;

import java.util.List;
import java.util.Objects;

import org.checkerframework.checker.nullness.qual.Nullable;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.teamscale.commons.lang.ToStringHelpers;

/**
 * Result from a pre-commit 3.0 analysis.
 */
public class PreCommit3Result {

	/**
	 * The token to poll for final results. If this is provided, you should poll for finished results
	 * later on. If this is null, the returned results are final and not further analysis will happen.
	 */
	@JsonProperty("token")
	@Nullable
	private final String token;

	/**
	 * Detailed descriptions/classifications of error that occurred (may be null if there were no
	 * errors).
	 * 

* The list can contain multiple entries with the same type (e.g., multiple "file is excluded" * errors for different paths). */ @JsonProperty("detailedErrors") @Nullable public final List detailedErrors; /** * The findings. This may contain data even in case of errors. Additionally, this may be null to * indicate that the findings information is not valid (i.e. during intermediate polling). */ @JsonProperty("findings") @Nullable public final List findings; @JsonCreator public PreCommit3Result(@JsonProperty("token") @Nullable String token, @JsonProperty("detailedErrors") @Nullable List detailedErrors, @JsonProperty("findings") @Nullable List findings) { this.token = token; this.detailedErrors = detailedErrors; this.findings = findings; } public @Nullable String getToken() { return token; } /** * Types of errors that can occur in the pre-commit analysis. Some error types are for the entire * analysis (e.g., "pre-commit is disabled"), some are file-specific (e.g., "file is excluded"). *

* Even if there are errors in a {@link PreCommit3Result}, it may still contain meaningful results * (for other files). */ public enum EPrecommit3ErrorType { /** * This server is configured to discard any pre-commit3 requests. The configuration may change of * course. *

* This is a global error (file independent). */ PRECOMMIT_COMMIT_ANALYSIS_DISABLED_ON_SERVER, /** * The precommit3 request was aborted because it contained too many files. *

* This is a global error (file independent). */ FILE_COUNT_LIMIT, /** * The precommit3 request was aborted because it contained too large files. *

* This is a file-specific error. However, at the moment, the entire pre-commit3 request will be * rejected if one file is above the limit. */ FILE_SIZE_LIMIT, /** * The pre-commit3 request was aborted because the user sent this request too soon after the * previous precommit3 request (load limiting). *

* This is a global error (file independent). */ USER_TIME_LIMIT, /** * The pre-commit3 request was aborted because the Teamscale license on the server is not valid. *

* This is a global error (file independent). */ TEAMSCALE_LICENSE_ERROR, /** * The pre-commit request was aborted because the server was polled for a pre-commit result but the * respective pre-commit branch did not exist anymore. */ PRECOMMIT_BRANCH_NOT_AVAILABLE_DURING_POLL, /** * The reported file was not analyzed because it was excluded by the project configuration. *

* This is a file-specific error.However, at the moment, the entire pre-commit3 request will be * rejected if one file is excluded. */ FILE_EXCLUDED_BY_PROJECT_CONFIGURATION, /** * The pre-commit3 request was aborted because the project has no connector which accepts * pre-commits. */ NO_VALID_CONNECTOR, /** * The branch analysis is not on head or close enough. *

* This is a file independent error. */ ANALYSIS_NOT_LIVE, /** * The branch used in the local repository is not known in Teamscale. *

* This is a file independent error. */ BRANCH_UNKNOWN } /** * Detailed information on one error that occurred during pre-commit analysis. Depending on the * information in this object clients (IDE plugins) may decide to display the error more or less * visible or hide it completely. */ public static final class PreCommit3ErrorDetail { /** * The type of this error. *

* Should be {@link EPrecommit3ErrorType#toString()} of one of {@link EPrecommit3ErrorType}, but if * this object was loaded in a plugin and comes from a server that is newer than the plugin, the * {@link EPrecommit3ErrorType} item might not be known to the code in the plugin yet. To ensure * that we can still deserialize the object, we store the type as string. */ @JsonProperty("type") public final String type; /** * The message of this error. Intended for display to the user. */ @JsonProperty("message") public final String message; /** * Uniform path that is affected by this error (or null if it is an error that affects the entire * pre-commit analysis). */ @JsonProperty("affectedUniformPath") public final @Nullable String affectedUniformPath; /** * If true this error causes results in this pre-commit-result object to be invalid, for example * because the analysis was aborted. *

* If {@link #affectedUniformPath} is non-null, this could abort only the analysis of that file. * Other files might still be analyzed. *

* If {@link #affectedUniformPath} is null (i.e., this is a file-independent problem such as * "pre-commit analysis is disabled on server"), then the entire analysis request is aborted. */ @JsonProperty("resultsInvalid") public final boolean resultsInvalid; @JsonCreator private PreCommit3ErrorDetail(@JsonProperty("type") String type, @JsonProperty("message") String message, @JsonProperty("affectedUniformPath") @Nullable String affectedUniformPath, @JsonProperty("resultsInvalid") boolean resultsInvalid) { this.type = Objects.requireNonNull(type); this.message = Objects.requireNonNull(message); this.affectedUniformPath = affectedUniformPath; this.resultsInvalid = resultsInvalid; } /** * Returns whether this error invalidates all results. */ public boolean isFileIndependentAbortionError() { return resultsInvalid && affectedUniformPath == null; } /** * Creates an error detail that affects the entire pre-commit request (instead of only a single * file). */ public static PreCommit3ErrorDetail createFileIndependentError(EPrecommit3ErrorType type, String message, boolean analysisAborted) { return new PreCommit3ErrorDetail(type.toString(), message, null, analysisAborted); } /** * Creates an error detail that affects only one file of the pre-commit request. */ public static PreCommit3ErrorDetail createErrorForFile(EPrecommit3ErrorType type, String message, String affectedUniformPath, boolean analysisAborted) { return new PreCommit3ErrorDetail(type.toString(), message, affectedUniformPath, analysisAborted); } @Override public boolean equals(Object other) { if (this == other) { return true; } if (other == null || getClass() != other.getClass()) { return false; } PreCommit3ErrorDetail that = (PreCommit3ErrorDetail) other; return resultsInvalid == that.resultsInvalid && Objects.equals(type, that.type) && Objects.equals(message, that.message) && Objects.equals(affectedUniformPath, that.affectedUniformPath); } @Override public int hashCode() { return Objects.hash(type, message, affectedUniformPath, resultsInvalid); } @Override public String toString() { return ToStringHelpers.toReflectiveStringHelper(this).toString(); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy