This is an automated email from the ASF dual-hosted git repository.

rpuch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 13e5e63b874 IGNITE-25972 Support error code aliases and deprecation 
(#6299)
13e5e63b874 is described below

commit 13e5e63b87413254143cd06462392c3accd861df
Author: Aditya Mukhopadhyay <[email protected]>
AuthorDate: Fri Jul 25 17:56:26 2025 +0530

    IGNITE-25972 Support error code aliases and deprecation (#6299)
---
 .../error/code/generators/CppGenerator.java        | 16 ++++++++-
 .../error/code/generators/CsharpGenerator.java     | 16 +++++++++
 .../code/processor/ErrorCodeGroupDescriptor.java   | 14 ++++++++
 .../code/processor/ErrorCodeGroupProcessor.java    | 42 +++++++++++++++-------
 .../dotnet/Apache.Ignite.Tests/ErrorGroupTests.cs  |  3 +-
 5 files changed, 77 insertions(+), 14 deletions(-)

diff --git 
a/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/generators/CppGenerator.java
 
b/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/generators/CppGenerator.java
index bc251ea5bc7..4ad106cdc70 100644
--- 
a/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/generators/CppGenerator.java
+++ 
b/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/generators/CppGenerator.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 import javax.annotation.processing.ProcessingEnvironment;
 import 
org.apache.ignite.internal.error.code.processor.ErrorCodeGroupDescriptor;
+import 
org.apache.ignite.internal.error.code.processor.ErrorCodeGroupDescriptor.DeprecatedAlias;
 import 
org.apache.ignite.internal.error.code.processor.ErrorCodeGroupProcessorException;
 
 /**
@@ -63,7 +64,7 @@ public class CppGenerator extends GenericGenerator {
         line("    // " + descriptor.className + " group. Group code: " + 
descriptor.groupCode);
 
         for (int i = 0; i < descriptor.errorCodes.size(); i++) {
-            var lastInGroup = i == descriptor.errorCodes.size() - 1;
+            var lastInGroup = (i == descriptor.errorCodes.size() - 1) && 
descriptor.deprecatedAliases.isEmpty();
             var ec = descriptor.errorCodes.get(i);
             var name = composeName(ec.name);
             var code = Integer.toHexString(composeCode(groupCode, ec.code));
@@ -72,6 +73,19 @@ public class CppGenerator extends GenericGenerator {
                 line();
             }
         }
+
+        for (int i = 0; i < descriptor.deprecatedAliases.size(); i++) {
+            var lastInGroup = i == descriptor.deprecatedAliases.size() - 1;
+            DeprecatedAlias deprecatedAlias = 
descriptor.deprecatedAliases.get(i);
+            String composedName = composeName(deprecatedAlias.alias);
+            String composedIdentifier = composeName(deprecatedAlias.target);
+
+            line(String.format("    %s [[deprecated(\"%s is deprecated. Use %s 
instead.\")]] = %s%s", composedName,
+                    composedName, composedIdentifier, composedIdentifier, 
lastGroup && lastInGroup ? "" : ","));
+            if (lastInGroup && !lastGroup) {
+                line();
+            }
+        }
     }
 
     private void generateErrorCodeEnumStart() throws IOException {
diff --git 
a/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/generators/CsharpGenerator.java
 
b/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/generators/CsharpGenerator.java
index 480b9e2aa83..ce8e2f12604 100644
--- 
a/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/generators/CsharpGenerator.java
+++ 
b/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/generators/CsharpGenerator.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.util.List;
 import javax.annotation.processing.ProcessingEnvironment;
 import 
org.apache.ignite.internal.error.code.processor.ErrorCodeGroupDescriptor;
+import 
org.apache.ignite.internal.error.code.processor.ErrorCodeGroupDescriptor.DeprecatedAlias;
 
 /**
  * C# generator for Error Codes.
@@ -113,6 +114,10 @@ public class CsharpGenerator extends GenericGenerator {
             }
         }
 
+        for (DeprecatedAlias deprecatedAlias : descriptor.deprecatedAliases) {
+            generateDeprecatedAlias(deprecatedAlias);
+        }
+
         line("        }");
     }
 
@@ -121,4 +126,15 @@ public class CsharpGenerator extends GenericGenerator {
         line(String.format("            public const int %s = (GroupCode << 
%d) | (%d & 0xFFFF);", transfromErrorCodeName(name), groupShift,
                 code));
     }
+
+    private void generateDeprecatedAlias(DeprecatedAlias deprecatedAlias) 
throws IOException {
+        String transformedAlias = 
transfromErrorCodeName(deprecatedAlias.alias);
+        String transformedTarget = 
transfromErrorCodeName(deprecatedAlias.target);
+
+        line();
+        line(String.format("            /// <summary> %s is obsolete. Use %s 
instead. </summary>", transformedAlias,
+                transformedTarget));
+        line("            [Obsolete]");
+        line(String.format("            public const int %s = %s;", 
transformedAlias, transformedTarget));
+    }
 }
diff --git 
a/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/processor/ErrorCodeGroupDescriptor.java
 
b/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/processor/ErrorCodeGroupDescriptor.java
index 26f9c4389b2..be8c8a798b0 100644
--- 
a/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/processor/ErrorCodeGroupDescriptor.java
+++ 
b/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/processor/ErrorCodeGroupDescriptor.java
@@ -45,5 +45,19 @@ public class ErrorCodeGroupDescriptor {
         public String name;
     }
 
+    /**
+     * Class that holds info about one (deprecated) alias for an error code .
+     */
+    public static class DeprecatedAlias {
+        public final String alias;
+        public final String target;
+
+        DeprecatedAlias(String alias, String target) {
+            this.alias = alias;
+            this.target = target;
+        }
+    }
+
     public List<ErrorCode> errorCodes = new ArrayList<>();
+    public List<DeprecatedAlias> deprecatedAliases = new ArrayList<>();
 }
diff --git 
a/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/processor/ErrorCodeGroupProcessor.java
 
b/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/processor/ErrorCodeGroupProcessor.java
index 5dfd7de2780..f7373e6d052 100644
--- 
a/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/processor/ErrorCodeGroupProcessor.java
+++ 
b/modules/error-code-annotation-processor/src/main/java/org/apache/ignite/internal/error/code/processor/ErrorCodeGroupProcessor.java
@@ -21,6 +21,7 @@ import static java.util.stream.Collectors.toSet;
 
 import com.google.auto.service.AutoService;
 import com.sun.source.tree.ExpressionTree;
+import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.LiteralTree;
 import com.sun.source.tree.MethodInvocationTree;
 import com.sun.source.tree.ParenthesizedTree;
@@ -43,13 +44,14 @@ import 
org.apache.ignite.error.code.annotations.ErrorCodeGroup;
 import org.apache.ignite.internal.error.code.generators.AbstractCodeGenerator;
 import org.apache.ignite.internal.error.code.generators.CppGenerator;
 import org.apache.ignite.internal.error.code.generators.CsharpGenerator;
+import 
org.apache.ignite.internal.error.code.processor.ErrorCodeGroupDescriptor.DeprecatedAlias;
 import 
org.apache.ignite.internal.error.code.processor.ErrorCodeGroupDescriptor.ErrorCode;
 
 /**
  * Annotation processor that process @{@link ErrorCodeGroup} annotation.
  *
  * <p>
- *     Collects all error groups and generates C++ and C# files with 
corresponding error codes groups.
+ * Collects all error groups and generates C++ and C# files with corresponding 
error codes groups.
  * </p>
  */
 @AutoService(Processor.class)
@@ -109,8 +111,8 @@ public class ErrorCodeGroupProcessor extends 
AbstractProcessor {
         }
 
         List<AbstractCodeGenerator> generators = List.of(
-            new CppGenerator(processingEnv, "cpp/ignite/common/error_codes.h"),
-            new CsharpGenerator(processingEnv, 
"dotnet/Apache.Ignite/ErrorCodes.g.cs")
+                new CppGenerator(processingEnv, 
"cpp/ignite/common/error_codes.h"),
+                new CsharpGenerator(processingEnv, 
"dotnet/Apache.Ignite/ErrorCodes.g.cs")
         );
 
         for (var generator : generators) {
@@ -140,16 +142,32 @@ public class ErrorCodeGroupProcessor extends 
AbstractProcessor {
             var initializer = variableTree.getInitializer();
             var name = variableTree.getName().toString();
             try {
-                // example: args = {"(short) 1"} as List<ExpressionTree>.
-                var args = ((MethodInvocationTree) initializer).getArguments();
-                // example: expr = "(short) 1" as TypeCastTree.
-                var expr = ((TypeCastTree) args.get(0)).getExpression();
-                // example: if expr is "(short) (1)" we should remove 
parentheses
-                if (expr instanceof ParenthesizedTree) {
-                    expr = ((ParenthesizedTree) expr).getExpression();
+                if 
(MethodInvocationTree.class.isAssignableFrom(initializer.getClass())) {
+                    // example: args = {"(short) 1"} as List<ExpressionTree>.
+                    var args = ((MethodInvocationTree) 
initializer).getArguments();
+                    // example: expr = "(short) 1" as TypeCastTree.
+                    var expr = ((TypeCastTree) args.get(0)).getExpression();
+                    // example: if expr is "(short) (1)" we should remove 
parentheses
+                    if (expr instanceof ParenthesizedTree) {
+                        expr = ((ParenthesizedTree) expr).getExpression();
+                    }
+                    // example: extract 1 from "(short) 1" expression.
+                    this.descriptor.errorCodes.add(new ErrorCode((Integer) 
((LiteralTree) expr).getValue(), name));
+                } else if 
(IdentifierTree.class.isAssignableFrom(initializer.getClass())) {
+                    boolean hasDeprecated = 
variableTree.getModifiers().getAnnotations().stream()
+                            .anyMatch(annotation -> 
"Deprecated".contentEquals(annotation.getAnnotationType().toString()));
+                    if (!hasDeprecated) {
+                        ex = new 
ErrorCodeGroupProcessorException(String.format("Alias %s must be marked as 
@Deprecated", name));
+                    } else {
+                        var identifier = ((IdentifierTree) 
initializer).getName().toString();
+
+                        descriptor.deprecatedAliases.add(new 
DeprecatedAlias(name, identifier));
+                    }
+                } else {
+                    ex = new ErrorCodeGroupProcessorException(
+                            String.format("AST parsing error: Expected 
MethodInvocationTree or IdentifierTree in initializer, but got %s",
+                                    initializer.getClass().getSimpleName()));
                 }
-                // example: extract 1 from "(short) 1" expression.
-                this.descriptor.errorCodes.add(new ErrorCode((Integer) 
((LiteralTree) expr).getValue(), name));
             } catch (Exception e) {
                 ex = new ErrorCodeGroupProcessorException("AST parsing error", 
e);
             }
diff --git a/modules/platforms/dotnet/Apache.Ignite.Tests/ErrorGroupTests.cs 
b/modules/platforms/dotnet/Apache.Ignite.Tests/ErrorGroupTests.cs
index 68e9ee53f27..e085219155e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Tests/ErrorGroupTests.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Tests/ErrorGroupTests.cs
@@ -212,7 +212,8 @@ namespace Apache.Ignite.Tests
 
                     return groupClass
                         .GetFields()
-                        .Where(x => x.Name != "GroupCode" && x.Name != 
"GroupName" && x.Name !="ErrorPrefix")
+                        .Where(x => x.Name != "GroupCode" && x.Name != 
"GroupName" && x.Name != "ErrorPrefix" &&
+                                    
x.GetCustomAttributes(typeof(ObsoleteAttribute), false).Length == 0)
                         .Select(errCode => ((int)errCode.GetValue(null)!, 
groupCode, errCode.Name));
                 });
     }

Reply via email to