AlexanderAshitkin commented on code in PR #389:
URL: 
https://github.com/apache/maven-build-cache-extension/pull/389#discussion_r2479942442


##########
src/main/java/org/apache/maven/buildcache/xml/CacheConfigImpl.java:
##########
@@ -248,27 +249,167 @@ public boolean isLogAllProperties(MojoExecution 
mojoExecution) {
     }
 
     private GoalReconciliation findReconciliationConfig(MojoExecution 
mojoExecution) {
-        if (cacheConfig.getExecutionControl() == null) {
+        if (mojoExecution == null) {
             return null;
         }
 
-        final ExecutionControl executionControl = 
cacheConfig.getExecutionControl();
-        if (executionControl.getReconcile() == null) {
+        final String goal = mojoExecution.getGoal();
+        final Plugin plugin = mojoExecution.getPlugin();
+
+        if (plugin == null) {
             return null;
         }
 
-        final List<GoalReconciliation> reconciliation =
-                executionControl.getReconcile().getPlugins();
+        // First check explicit configuration
+        if (cacheConfig.getExecutionControl() != null
+                && cacheConfig.getExecutionControl().getReconcile() != null) {
+            List<GoalReconciliation> explicitConfigs =
+                    
cacheConfig.getExecutionControl().getReconcile().getPlugins();
+            for (GoalReconciliation config : explicitConfigs) {
+                if (isPluginMatch(plugin, config) && Strings.CS.equals(goal, 
config.getGoal())) {
+                    // Validate explicit config against parameter definitions 
(with version)
+                    validateReconciliationConfig(config, plugin);
+                    return config;
+                }
+            }
+        }
+
+        // Auto-generate from parameter definitions (track all functional 
parameters)
+        GoalReconciliation autoGenerated = 
generateReconciliationFromParameters(plugin, goal);
+        if (autoGenerated != null) {
+            LOGGER.debug(
+                    "Auto-generated reconciliation config for {}:{} with {} 
functional parameters",
+                    plugin.getArtifactId(),
+                    goal,
+                    autoGenerated.getReconciles() != null
+                            ? autoGenerated.getReconciles().size()
+                            : 0);
+        }
+        return autoGenerated;
+    }
+
+    /**
+     * Validates a single reconciliation config against plugin parameter 
definitions.
+     * Uses plugin version to load the appropriate parameter definition.
+     */
+    private void validateReconciliationConfig(GoalReconciliation config, 
Plugin plugin) {
+        String artifactId = config.getArtifactId();
+        String goal = config.getGoal();
+        String pluginVersion = plugin.getVersion();
+
+        // Load parameter definition for this plugin with version
+        PluginParameterDefinition pluginDef = parameterLoader.load(artifactId, 
pluginVersion);
+
+        if (pluginDef == null) {
+            LOGGER.warn(
+                    "No parameter definition found for plugin {}:{} version 
{}. "
+                            + "Cannot validate reconciliation configuration. "
+                            + "Consider adding a parameter definition file to 
plugin-parameters/{}.xml",
+                    artifactId,
+                    goal,
+                    pluginVersion != null ? pluginVersion : "unknown",
+                    artifactId);
+            return;
+        }
+
+        // Get goal definition
+        PluginParameterDefinition.GoalParameterDefinition goalDef = 
pluginDef.getGoal(goal);
+        if (goalDef == null) {
+            LOGGER.warn(
+                    "Goal '{}' not found in parameter definition for plugin {} 
version {}. "
+                            + "Cannot validate reconciliation configuration.",
+                    goal,
+                    artifactId,
+                    pluginVersion != null ? pluginVersion : "unknown");
+            return;
+        }
 
-        for (GoalReconciliation goalReconciliationConfig : reconciliation) {
-            final String goal = mojoExecution.getGoal();
+        // Validate each tracked property
+        List<TrackedProperty> properties = config.getReconciles();
+        if (properties == null) {
+            return;
+        }
 
-            if (isPluginMatch(mojoExecution.getPlugin(), 
goalReconciliationConfig)
-                    && Strings.CS.equals(goal, 
goalReconciliationConfig.getGoal())) {
-                return goalReconciliationConfig;
+        for (TrackedProperty property : properties) {
+            String propertyName = property.getPropertyName();
+
+            if (!goalDef.hasParameter(propertyName)) {
+                LOGGER.error(

Review Comment:
   it looks like a warn as well. there might be an outdated config bundled in 
the extension which was manually corrected by user. might be an error, might be 
not.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to