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));
});
}