From 4be29a97e44cd2458924c3c26f93b1d36ef22c67 Mon Sep 17 00:00:00 2001 From: pasindufernando1 Date: Thu, 2 Oct 2025 16:10:37 +0530 Subject: [PATCH 1/3] Introduce new API to handle cache refresh (cherry picked from commit ffe796653b6e20836c307869594636e619cb490a) --- .../extension/DataMapperService.java | 24 +++++++++++++++++++ .../models/connector/ReferenceType.java | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/DataMapperService.java b/flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/DataMapperService.java index a75306fa7c..8f8cabb03a 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/DataMapperService.java +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/DataMapperService.java @@ -37,6 +37,7 @@ import io.ballerina.flowmodelgenerator.extension.request.DataMapperTypesRequest; import io.ballerina.flowmodelgenerator.extension.request.DataMapperVisualizeRequest; import io.ballerina.flowmodelgenerator.extension.request.DataMappingDeleteRequest; +import io.ballerina.flowmodelgenerator.extension.response.DataMapperClearCacheResponse; import io.ballerina.flowmodelgenerator.extension.response.DataMapperFieldPositionResponse; import io.ballerina.flowmodelgenerator.extension.response.DataMapperModelResponse; import io.ballerina.flowmodelgenerator.extension.response.DataMapperNodePositionResponse; @@ -47,6 +48,7 @@ import io.ballerina.flowmodelgenerator.extension.response.DataMappingDeleteResponse; import io.ballerina.projects.Document; import org.ballerinalang.annotation.JavaSPIService; +import org.ballerinalang.diagramutil.connector.models.connector.ReferenceType; import org.ballerinalang.langserver.commons.LanguageServerContext; import org.ballerinalang.langserver.commons.service.spi.ExtendedLanguageServerService; import org.ballerinalang.langserver.commons.workspace.WorkspaceManager; @@ -442,6 +444,28 @@ public CompletableFuture transformationFunction( }); } + /** + * Clears the visited type map cache in ReferenceType. + * This API can be used to reset the type cache when needed. + * + * @return Response indicating whether the cache was successfully cleared + * @since 1.2.0 + */ + @JsonRequest + public CompletableFuture clearTypeCache() { + return CompletableFuture.supplyAsync(() -> { + DataMapperClearCacheResponse response = new DataMapperClearCacheResponse(); + try { + ReferenceType.clearVisitedTypeMap(); + response.setSuccess(true); + } catch (Throwable e) { + response.setError(e); + response.setSuccess(false); + } + return response; + }); + } + private Optional getDocumentFromFile(Path projectPath, String fileName) { try { return this.workspaceManagerProxy.get().document(projectPath.resolve(fileName)); diff --git a/misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java b/misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java index 40e8acba2e..5a9ebdc5fb 100644 --- a/misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java +++ b/misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java @@ -469,4 +469,8 @@ private static void validateDependentTypes(RefType type, List typeDefSym } } + public static void clearVisitedTypeMap() { + visitedTypeMap.clear(); + } + } From ee6d84648f2bf40c29bc354200dcbf898bbad186 Mon Sep 17 00:00:00 2001 From: pasindufernando1 Date: Thu, 2 Oct 2025 16:11:09 +0530 Subject: [PATCH 2/3] Introduce new API to handle cache refresh (cherry picked from commit eaddfdb0ef0a37d96a63e63c77a82eda67ea6952) --- .../DataMapperClearCacheResponse.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/response/DataMapperClearCacheResponse.java diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/response/DataMapperClearCacheResponse.java b/flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/response/DataMapperClearCacheResponse.java new file mode 100644 index 0000000000..75bdd4bbfd --- /dev/null +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/response/DataMapperClearCacheResponse.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2025, WSO2 LLC. (http://www.wso2.com) + * + * WSO2 LLC. licenses this file to you 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 io.ballerina.flowmodelgenerator.extension.response; + +/** + * Represents the response for clearing the data mapper type cache. + * + * @since 1.2.0 + */ +public class DataMapperClearCacheResponse extends AbstractFlowModelResponse { + + private boolean success; + + public DataMapperClearCacheResponse() { + this.success = false; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} From 18a241ab8dbd028793c397e3b2c4ef73346a62de Mon Sep 17 00:00:00 2001 From: pasindufernando1 Date: Mon, 13 Oct 2025 09:01:54 +0530 Subject: [PATCH 3/3] Make visitedTYpeMap thread safe (cherry picked from commit ffe22a13293183e33c7830cb2b1d7c911c2d3b68) --- .../diagramutil/connector/models/connector/ReferenceType.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java b/misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java index 5a9ebdc5fb..5ca65a51be 100644 --- a/misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java +++ b/misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java @@ -48,9 +48,10 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; public class ReferenceType { - private static final Map visitedTypeMap = new HashMap<>(); + private static final Map visitedTypeMap = new ConcurrentHashMap<>(); public record Field(String fieldName, RefType type, boolean optional, String defaultValue) { }