Browse Source

NO-JIRA Make Gson usage more type-safe

Uses `Gson.fromJson(..., TypeToken<T>)` instead of `fromJson(..., Type)`

Also replaces some usage of the deprecated `JsonParser()` constructor.
tags/10.4.0.87286
Marcono1234 3 months ago
parent
commit
29994d2a4f

+ 6
- 3
server/sonar-alm-client/src/main/java/org/sonar/alm/client/github/GithubApplicationClientImpl.java View File

@@ -73,9 +73,12 @@ public class GithubApplicationClientImpl implements GithubApplicationClient {
protected static final String WRITE_PERMISSION_NAME = "write";
protected static final String READ_PERMISSION_NAME = "read";
protected static final String FAILED_TO_REQUEST_BEGIN_MSG = "Failed to request ";
private static final Type REPOSITORY_TEAM_LIST_TYPE = TypeToken.getParameterized(List.class, GsonRepositoryTeam.class).getType();
private static final Type REPOSITORY_COLLABORATORS_LIST_TYPE = TypeToken.getParameterized(List.class, GsonRepositoryCollaborator.class).getType();
private static final Type ORGANIZATION_LIST_TYPE = TypeToken.getParameterized(List.class, GithubBinding.GsonInstallation.class).getType();
private static final TypeToken<List<GsonRepositoryTeam>> REPOSITORY_TEAM_LIST_TYPE = new TypeToken<>() {
};
private static final TypeToken<List<GsonRepositoryCollaborator>> REPOSITORY_COLLABORATORS_LIST_TYPE = new TypeToken<>() {
};
private static final TypeToken<List<GithubBinding.GsonInstallation>> ORGANIZATION_LIST_TYPE = new TypeToken<>() {
};
protected final GithubApplicationHttpClient githubApplicationHttpClient;
protected final GithubAppSecurity appSecurity;
private final GitHubSettings gitHubSettings;

+ 4
- 2
server/sonar-alm-client/src/main/java/org/sonar/alm/client/gitlab/GitlabApplicationClient.java View File

@@ -58,8 +58,10 @@ import static java.nio.charset.StandardCharsets.UTF_8;
public class GitlabApplicationClient {
private static final Logger LOG = LoggerFactory.getLogger(GitlabApplicationClient.class);
private static final Gson GSON = new Gson();
private static final Type GITLAB_GROUP = TypeToken.getParameterized(List.class, GsonGroup.class).getType();
private static final Type GITLAB_USER = TypeToken.getParameterized(List.class, GsonUser.class).getType();
private static final TypeToken<List<GsonGroup>> GITLAB_GROUP = new TypeToken<>() {
};
private static final TypeToken<List<GsonUser>> GITLAB_USER = new TypeToken<>() {
};

protected static final String PRIVATE_TOKEN = "Private-Token";
private static final String GITLAB_GROUPS_MEMBERS_ENDPOINT = "/groups/%s/members";

+ 1
- 1
server/sonar-alm-client/src/main/java/org/sonar/alm/client/gitlab/Project.java View File

@@ -75,7 +75,7 @@ public class Project {
public static List<Project> parseJsonArray(String json) {
Gson gson = new Gson();
return gson.fromJson(json, new TypeToken<LinkedList<Project>>() {
}.getType());
});
}

public long getId() {

+ 2
- 1
server/sonar-alm-client/src/test/java/org/sonar/alm/client/GenericPaginatedHttpClientImplTest.java View File

@@ -54,7 +54,8 @@ public class GenericPaginatedHttpClientImplTest {

private static final String ENDPOINT = "/test-endpoint";

private static final Type STRING_LIST_TYPE = TypeToken.getParameterized(List.class, String.class).getType();
private static final TypeToken<List<String>> STRING_LIST_TYPE = new TypeToken<>() {
};

private Gson gson = new Gson();


+ 2
- 3
server/sonar-auth-github/src/main/java/org/sonar/auth/github/GsonEmail.java View File

@@ -58,9 +58,8 @@ public class GsonEmail {
}

public static List<GsonEmail> parse(String json) {
Type collectionType = new TypeToken<Collection<GsonEmail>>() {
}.getType();
Gson gson = new Gson();
return gson.fromJson(json, collectionType);
return gson.fromJson(json, new TypeToken<List<GsonEmail>>() {
});
}
}

+ 2
- 3
server/sonar-auth-github/src/main/java/org/sonar/auth/github/GsonTeam.java View File

@@ -52,10 +52,9 @@ public class GsonTeam {
}

public static List<GsonTeam> parse(String json) {
Type collectionType = new TypeToken<Collection<GsonTeam>>() {
}.getType();
Gson gson = new Gson();
return gson.fromJson(json, collectionType);
return gson.fromJson(json, new TypeToken<List<GsonTeam>>() {
});
}

public static class GsonOrganization {

+ 2
- 2
server/sonar-auth-gitlab/src/main/java/org/sonar/auth/gitlab/GsonGroup.java View File

@@ -55,9 +55,9 @@ public class GsonGroup {
}

static List<GsonGroup> parse(String json) {
Type collectionType = new TypeToken<Collection<GsonGroup>>() {}.getType();
Gson gson = new Gson();
return gson.fromJson(json, collectionType);
return gson.fromJson(json, new TypeToken<List<GsonGroup>>() {
});
}

}

+ 1
- 1
server/sonar-server-common/src/main/java/org/sonar/server/qualityprofile/QPMeasureData.java View File

@@ -48,7 +48,7 @@ public class QPMeasureData {
}

public static QPMeasureData fromJson(String json) {
return new QPMeasureData(StreamSupport.stream(new JsonParser().parse(json).getAsJsonArray().spliterator(), false)
return new QPMeasureData(StreamSupport.stream(JsonParser.parseString(json).getAsJsonArray().spliterator(), false)
.map(jsonElement -> {
JsonObject jsonProfile = jsonElement.getAsJsonObject();
return new QualityProfile(

+ 3
- 4
server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/OAuth2AuthenticationParametersImpl.java View File

@@ -20,11 +20,10 @@
package org.sonar.server.authentication;

import com.google.common.base.Strings;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@@ -53,8 +52,8 @@ public class OAuth2AuthenticationParametersImpl implements OAuth2AuthenticationP
*/
private static final String RETURN_TO_PARAMETER = "return_to";

private static final Type JSON_MAP_TYPE = new TypeToken<HashMap<String, String>>() {
}.getType();
private static final TypeToken<Map<String, String>> JSON_MAP_TYPE = new TypeToken<>() {
};

@Override
public void init(HttpRequest request, HttpResponse response) {

+ 1
- 2
server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/TreeActionIT.java View File

@@ -565,8 +565,7 @@ public class TreeActionIT {
db.components().insertSnapshot(projectData.getMainBranchComponent());

Date now = new Date();
JsonParser jsonParser = new JsonParser();
JsonElement jsonTree = jsonParser.parseString(IOUtils.toString(getClass().getResource("tree-example.json"), UTF_8));
JsonElement jsonTree = JsonParser.parseString(IOUtils.toString(getClass().getResource("tree-example.json"), UTF_8));
JsonArray components = jsonTree.getAsJsonObject().getAsJsonArray("components");
for (int i = 0; i < components.size(); i++) {
JsonElement componentAsJsonElement = components.get(i);

+ 1
- 1
server/sonar-webserver-webapi/src/it/java/org/sonar/server/issue/ws/SearchActionIT.java View File

@@ -1358,7 +1358,7 @@ public class SearchActionIT {
.setParam("asc", "false")
.execute();

JsonElement parse = new JsonParser().parse(response.getInput());
JsonElement parse = JsonParser.parseString(response.getInput());

assertThat(parse.getAsJsonObject().get("issues").getAsJsonArray())
.extracting(o -> o.getAsJsonObject().get("key").getAsString())

+ 3
- 4
server/sonar-webserver-webapi/src/main/java/org/sonar/server/setting/ws/SetAction.java View File

@@ -24,7 +24,6 @@ import com.google.common.collect.ListMultimap;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -70,6 +69,8 @@ public class SetAction implements SettingsWsAction {
private static final Collector<CharSequence, ?, String> COMMA_JOINER = Collectors.joining(",");
private static final String MSG_NO_EMPTY_VALUE = "A non empty value must be provided";
private static final int VALUE_MAXIMUM_LENGTH = 4000;
private static final TypeToken<Map<String, String>> MAP_TYPE_TOKEN = new TypeToken<>() {
};

private final PropertyDefinitions propertyDefinitions;
private final DbClient dbClient;
@@ -305,11 +306,9 @@ public class SetAction implements SettingsWsAction {
}

private static Map<String, String> readOneFieldValues(String json, String key) {
Type type = new TypeToken<Map<String, String>>() {
}.getType();
Gson gson = GsonHelper.create();
try {
return gson.fromJson(json, type);
return gson.fromJson(json, MAP_TYPE_TOKEN);
} catch (JsonSyntaxException e) {
throw BadRequestException.create(format("JSON '%s' does not respect expected format for setting '%s'. Ex: {\"field1\":\"value1\", \"field2\":\"value2\"}", json, key));
}

+ 1
- 2
sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/DefaultScannerWsClient.java View File

@@ -189,8 +189,7 @@ public class DefaultScannerWsClient implements ScannerWsClient {
@CheckForNull
private static String tryParseAsJsonError(String responseContent) {
try {
JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(responseContent).getAsJsonObject();
JsonObject obj = JsonParser.parseString(responseContent).getAsJsonObject();
JsonArray errors = obj.getAsJsonArray("errors");
List<String> errorMessages = new ArrayList<>();
for (JsonElement e : errors) {

+ 1
- 1
sonar-testing-harness/src/main/java/org/sonar/test/JsonAssert.java View File

@@ -123,7 +123,7 @@ public class JsonAssert {
}

private static String pretty(String json) {
JsonElement gson = new JsonParser().parse(json);
JsonElement gson = JsonParser.parseString(json);
return new GsonBuilder().setPrettyPrinting().serializeNulls().create().toJson(gson);
}
}

Loading…
Cancel
Save