org.sonarsource.sonarlint.core.serverconnection.events.taint.UpdateStorageOnTaintVulnerabilityRaised Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sonarlint-server-connection Show documentation
Show all versions of sonarlint-server-connection Show documentation
Manage connections with SonarQube or SonarCloud
/*
* SonarLint Core - Server Connection
* Copyright (C) 2016-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.serverconnection.events.taint;
import java.util.List;
import java.util.stream.Collectors;
import org.sonarsource.sonarlint.core.commons.TextRangeWithHash;
import org.sonarsource.sonarlint.core.serverapi.push.TaintVulnerabilityRaisedEvent;
import org.sonarsource.sonarlint.core.serverconnection.ConnectionStorage;
import org.sonarsource.sonarlint.core.serverconnection.events.ServerEventHandler;
import org.sonarsource.sonarlint.core.serverconnection.issues.ServerTaintIssue;
public class UpdateStorageOnTaintVulnerabilityRaised implements ServerEventHandler {
private final ConnectionStorage storage;
public UpdateStorageOnTaintVulnerabilityRaised(ConnectionStorage storage) {
this.storage = storage;
}
@Override
public void handle(TaintVulnerabilityRaisedEvent event) {
var issue = new ServerTaintIssue(
event.getKey(),
false,
event.getRuleKey(),
event.getMainLocation().getMessage(),
event.getMainLocation().getFilePath(),
event.getCreationDate(),
event.getSeverity(),
event.getType(),
adapt(event.getMainLocation().getTextRange()), event.getRuleDescriptionContextKey(),
event.getCleanCodeAttribute().orElse(null), event.getImpacts())
.setFlows(adapt(event.getFlows()));
storage.project(event.getProjectKey()).findings().insert(event.getBranchName(), issue);
}
private static List adapt(List flows) {
return flows.stream().map(UpdateStorageOnTaintVulnerabilityRaised::adapt).collect(Collectors.toList());
}
private static ServerTaintIssue.Flow adapt(TaintVulnerabilityRaisedEvent.Flow flow) {
return new ServerTaintIssue.Flow(flow.getLocations().stream().map(UpdateStorageOnTaintVulnerabilityRaised::adapt).collect(Collectors.toList()));
}
private static ServerTaintIssue.ServerIssueLocation adapt(TaintVulnerabilityRaisedEvent.Location location) {
return new ServerTaintIssue.ServerIssueLocation(
location.getFilePath(),
adapt(location.getTextRange()),
location.getMessage());
}
public static TextRangeWithHash adapt(TaintVulnerabilityRaisedEvent.Location.TextRange range) {
return new TextRangeWithHash(range.getStartLine(), range.getStartLineOffset(), range.getEndLine(), range.getEndLineOffset(), range.getHash());
}
}