From 13adc46f5a2e0205394a9b4640a908e74d66b9d6 Mon Sep 17 00:00:00 2001 From: kireetivar Date: Fri, 3 Jul 2026 11:59:46 +0530 Subject: [PATCH 1/4] chore: align prompt line-numbering behavior and init comment mapping --- .../_common/config/AviatorConfigManager.java | 19 +++++++++++++ .../aviator/fpr/processor/FVDLProcessor.java | 4 ++- .../cli/aviator/fpr/utils/FileUtils.java | 4 +-- .../aviator/fpr/utils/SourceCodeEnricher.java | 4 ++- .../config/AviatorConfigManagerTest.java | 28 +++++++++++++++++++ .../cli/aviator/fpr/utils/FileUtilsTest.java | 11 ++++++++ 6 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/_common/config/AviatorConfigManagerTest.java diff --git a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/_common/config/AviatorConfigManager.java b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/_common/config/AviatorConfigManager.java index eacf747a5b5..6787f8a4d0f 100644 --- a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/_common/config/AviatorConfigManager.java +++ b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/_common/config/AviatorConfigManager.java @@ -17,24 +17,29 @@ import com.fortify.cli.aviator._common.exception.AviatorBugException; import com.fortify.cli.aviator.config.ExtensionsConfig; +import com.fortify.cli.aviator.config.LanguagesCommentConfig; import com.fortify.cli.aviator.config.TagMappingConfig; import com.fortify.cli.aviator.util.FileTypeLanguageMapperUtil; +import com.fortify.cli.aviator.util.LanguageCommentMapperUtil; import com.fortify.cli.aviator.util.ResourceUtil; public class AviatorConfigManager { private static final Logger LOG = LoggerFactory.getLogger(AviatorConfigManager.class); private static final String EXTENSIONS_CONFIG_RESOURCE = "extensions_config.yaml"; + private static final String LANGUAGES_COMMENT_CONFIG_RESOURCE = "languages_comment_config.yaml"; private static final String DEFAULT_TAG_MAPPING_RESOURCE = "default_tag_mapping.yaml"; private static volatile AviatorConfigManager instance; private static final Object lock = new Object(); private final ExtensionsConfig extensionsConfig; + private final LanguagesCommentConfig languagesCommentConfig; private final TagMappingConfig defaultTagMappingConfig; private AviatorConfigManager() { LOG.debug("Initializing AviatorConfigManager..."); this.extensionsConfig = ResourceUtil.loadYamlResource(EXTENSIONS_CONFIG_RESOURCE, ExtensionsConfig.class); + this.languagesCommentConfig = ResourceUtil.loadYamlResource(LANGUAGES_COMMENT_CONFIG_RESOURCE, LanguagesCommentConfig.class); this.defaultTagMappingConfig = ResourceUtil.loadYamlResource(DEFAULT_TAG_MAPPING_RESOURCE, TagMappingConfig.class); if (this.extensionsConfig != null) { @@ -43,6 +48,12 @@ private AviatorConfigManager() { } else { LOG.error("ExtensionsConfig is null, FileTypeLanguageMapperUtil cannot be initialized properly."); } + if (this.languagesCommentConfig != null) { + LanguageCommentMapperUtil.initializeConfig(this.languagesCommentConfig); + LOG.debug("LanguageCommentMapperUtil initialized."); + } else { + LOG.error("LanguagesCommentConfig is null, LanguageCommentMapperUtil cannot be initialized properly."); + } LOG.debug("AviatorConfigManager initialized successfully."); } @@ -65,6 +76,14 @@ public ExtensionsConfig getExtensionsConfig() { return extensionsConfig; } + public LanguagesCommentConfig getLanguagesCommentConfig() { + if (languagesCommentConfig == null) { + LOG.error("LanguagesCommentConfig was not loaded. This indicates a bug."); + throw new AviatorBugException("Critical: LanguagesCommentConfig not loaded."); + } + return languagesCommentConfig; + } + public TagMappingConfig getDefaultTagMappingConfig() { if (defaultTagMappingConfig == null) { LOG.error("DefaultTagMappingConfig was not loaded. This indicates a bug."); diff --git a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/processor/FVDLProcessor.java b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/processor/FVDLProcessor.java index 8c567530e75..b1a41b2728c 100644 --- a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/processor/FVDLProcessor.java +++ b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/processor/FVDLProcessor.java @@ -272,7 +272,9 @@ private void processFileForElement(StackTraceElement element, Map try { if (Files.exists(actualSourcePath)) { byte[] encodedBytes = Files.readAllBytes(actualSourcePath); - file.setContent(new String(encodedBytes)); + String content = new String(encodedBytes); + // Preserve numbered source lines for prompt fidelity; content is later forwarded as-is. + file.setContent(fileUtils.appendLineNumbers(content, filename, 0)); file.setEndLine(fileUtils.countLines(actualSourcePath)); } else { // This warning is now more accurate. diff --git a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/utils/FileUtils.java b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/utils/FileUtils.java index aaf1d276015..6ecd49aed6c 100644 --- a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/utils/FileUtils.java +++ b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/utils/FileUtils.java @@ -82,7 +82,7 @@ public String getLineFromFile(FprHandle fprHandle, String relativePath, int line List lines = readFileWithFallback(fullSourcePath); if (lineNumber > 0 && lines.size() >= lineNumber) { - return lines.get(lineNumber - 1); + return appendLineNumbers(lines.get(lineNumber - 1), relativePath, lineNumber - 1); } logger.info("Could not get line {} from file {} (total lines: {})", lineNumber, fullSourcePath, lines.size()); return ""; @@ -110,7 +110,7 @@ public Fragment getFragmentFromFile(FprHandle fprHandle, String relativePath, in sb.append(lines.get(i)).append(System.lineSeparator()); } - return new Fragment(sb.toString(), startLine, endLine); + return new Fragment(appendLineNumbers(sb.toString(), relativePath, startLine - 1), startLine, endLine); } /** diff --git a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/utils/SourceCodeEnricher.java b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/utils/SourceCodeEnricher.java index bbc0688ec73..57e28043765 100644 --- a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/utils/SourceCodeEnricher.java +++ b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/fpr/utils/SourceCodeEnricher.java @@ -135,7 +135,9 @@ private void processFileForElement(StackTraceElement element, Map try { if (Files.exists(actualSourcePath)) { byte[] encodedBytes = Files.readAllBytes(actualSourcePath); - file.setContent(new String(encodedBytes)); + String content = new String(encodedBytes); + // Keep line markers in prompt file content; downstream gRPC/template rendering is pass-through. + file.setContent(fileUtils.appendLineNumbers(content, filename, 0)); file.setEndLine(fileUtils.countLines(actualSourcePath)); } else { // This warning is now more accurate. diff --git a/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/_common/config/AviatorConfigManagerTest.java b/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/_common/config/AviatorConfigManagerTest.java new file mode 100644 index 00000000000..c51ec3eb3b1 --- /dev/null +++ b/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/_common/config/AviatorConfigManagerTest.java @@ -0,0 +1,28 @@ +/* + * Copyright 2021-2026 Open Text. + * + * The only warranties for products and services of Open Text + * and its affiliates and licensors ("Open Text") are as may + * be set forth in the express warranty statements accompanying + * such products and services. Nothing herein should be construed + * as constituting an additional warranty. Open Text shall not be + * liable for technical or editorial errors or omissions contained + * herein. The information contained herein is subject to change + * without notice. + */ +package com.fortify.cli.aviator._common.config; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.fortify.cli.aviator.util.LanguageCommentMapperUtil; + +class AviatorConfigManagerTest { + @Test + void shouldInitializeLanguageCommentMapping() { + AviatorConfigManager.getInstance(); + + assertEquals("//", LanguageCommentMapperUtil.getProgrammingLanguageComment("JAVA")); + } +} \ No newline at end of file diff --git a/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/fpr/utils/FileUtilsTest.java b/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/fpr/utils/FileUtilsTest.java index 9b26796a4d5..49fe77546d1 100644 --- a/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/fpr/utils/FileUtilsTest.java +++ b/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/fpr/utils/FileUtilsTest.java @@ -19,6 +19,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import com.fortify.cli.aviator._common.config.AviatorConfigManager; import com.fortify.cli.aviator.config.LanguagesCommentConfig; import com.fortify.cli.aviator.util.LanguageCommentMapperUtil; @@ -53,4 +54,14 @@ void shouldUseResolvedLanguageForBlockCommentSyntax() { assertEquals("
", result); } + + @Test + void shouldUseConfiguredLanguageAndCommentMappingForFileExtension() { + AviatorConfigManager.getInstance(); + FileUtils fileUtils = new FileUtils(); + + String result = fileUtils.appendLineNumbers("package com.example;", "src/main/java/com/example/HomeController.java", 0); + + assertEquals("package com.example; // L1", result); + } } \ No newline at end of file From 7f36617edc7ecf4dfe0f7e3cca466354d7896db6 Mon Sep 17 00:00:00 2001 From: kireetivar Date: Fri, 3 Jul 2026 12:06:27 +0530 Subject: [PATCH 2/4] chore; remove redudant AviatorConfigManager test --- .../config/AviatorConfigManagerTest.java | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/_common/config/AviatorConfigManagerTest.java diff --git a/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/_common/config/AviatorConfigManagerTest.java b/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/_common/config/AviatorConfigManagerTest.java deleted file mode 100644 index c51ec3eb3b1..00000000000 --- a/fcli-core/fcli-aviator-common/src/test/java/com/fortify/cli/aviator/_common/config/AviatorConfigManagerTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2021-2026 Open Text. - * - * The only warranties for products and services of Open Text - * and its affiliates and licensors ("Open Text") are as may - * be set forth in the express warranty statements accompanying - * such products and services. Nothing herein should be construed - * as constituting an additional warranty. Open Text shall not be - * liable for technical or editorial errors or omissions contained - * herein. The information contained herein is subject to change - * without notice. - */ -package com.fortify.cli.aviator._common.config; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -import com.fortify.cli.aviator.util.LanguageCommentMapperUtil; - -class AviatorConfigManagerTest { - @Test - void shouldInitializeLanguageCommentMapping() { - AviatorConfigManager.getInstance(); - - assertEquals("//", LanguageCommentMapperUtil.getProgrammingLanguageComment("JAVA")); - } -} \ No newline at end of file From 5029edc8c02975a44f4c97851316bd22d30d9c8a Mon Sep 17 00:00:00 2001 From: kireetivar Date: Fri, 3 Jul 2026 14:38:17 +0530 Subject: [PATCH 3/4] chore: add resource configuration for Aviator includes --- .../fcli-app/aviator/resource-config.json | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 fcli-core/fcli-app/src/main/resources/META-INF/native-image/fcli/fcli-app/aviator/resource-config.json diff --git a/fcli-core/fcli-app/src/main/resources/META-INF/native-image/fcli/fcli-app/aviator/resource-config.json b/fcli-core/fcli-app/src/main/resources/META-INF/native-image/fcli/fcli-app/aviator/resource-config.json new file mode 100644 index 00000000000..5d73d4c3157 --- /dev/null +++ b/fcli-core/fcli-app/src/main/resources/META-INF/native-image/fcli/fcli-app/aviator/resource-config.json @@ -0,0 +1,21 @@ +{ + "resources": { + "includes": [ + { + "pattern": "extensions_config.yaml" + }, + { + "pattern": "languages_comment_config.yaml" + }, + { + "pattern": "default_tag_mapping.yaml" + }, + { + "pattern": "remediations.xsd" + }, + { + "pattern": "webinspect.xsd" + } + ] + } +} \ No newline at end of file From 1698011be9e7ad530b6a6ddd4b5a198215f102e3 Mon Sep 17 00:00:00 2001 From: kireetivar Date: Fri, 3 Jul 2026 15:58:37 +0530 Subject: [PATCH 4/4] chore: add reflection configuration for LanguagesCommentConfig --- .../fcli/fcli-app/yaml/reflect-config.json | 10 ++++++++++ .../cli/aviator/config/LanguagesCommentConfig.java | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/fcli-core/fcli-app/src/main/resources/META-INF/native-image/fcli/fcli-app/yaml/reflect-config.json b/fcli-core/fcli-app/src/main/resources/META-INF/native-image/fcli/fcli-app/yaml/reflect-config.json index 7da7e37c00f..d42d5a366a6 100644 --- a/fcli-core/fcli-app/src/main/resources/META-INF/native-image/fcli/fcli-app/yaml/reflect-config.json +++ b/fcli-core/fcli-app/src/main/resources/META-INF/native-image/fcli/fcli-app/yaml/reflect-config.json @@ -29,6 +29,16 @@ "allDeclaredMethods": true, "allPublicMethods": true, "allDeclaredFields": true, "allPublicFields": true }, + { + "name":"com.fortify.cli.aviator.config.LanguagesCommentConfig", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"setLineCommentSymbols","parameterTypes":["java.util.Map"] }] + }, { "name":"com.fortify.cli.aviator.config.TagMappingConfig", "allDeclaredFields":true, diff --git a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/config/LanguagesCommentConfig.java b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/config/LanguagesCommentConfig.java index 75538f793a0..55edb7eeccc 100644 --- a/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/config/LanguagesCommentConfig.java +++ b/fcli-core/fcli-aviator-common/src/main/java/com/fortify/cli/aviator/config/LanguagesCommentConfig.java @@ -15,8 +15,12 @@ import java.util.HashMap; import java.util.Map; +import com.formkiq.graalvm.annotations.Reflectable; import com.fortify.cli.aviator.util.StringUtil; +import lombok.NoArgsConstructor; + +@NoArgsConstructor @Reflectable public class LanguagesCommentConfig { private Map lineCommentSymbols = new HashMap<>();