From fc15ac737fe198a0f815afd527648aed7055b9ac Mon Sep 17 00:00:00 2001
From: vbaggiol <vbaggiol@cern.ch>
Date: Mon, 5 Dec 2022 17:37:58 +0100
Subject: [PATCH] generate stubs for java methods that are reserved python
 keywords

---
 stubgenj/_stubgenj.py                             |  2 +-
 .../test-data/unit/mangled_python_keywords.test   | 15 +++++++++++++++
 stubgenj/tests/test_stubtest.py                   |  1 +
 3 files changed, 17 insertions(+), 1 deletion(-)
 create mode 100644 stubgenj/tests/stubtest/test-data/unit/mangled_python_keywords.test

diff --git a/stubgenj/_stubgenj.py b/stubgenj/_stubgenj.py
index dde8912..e23e0d3 100644
--- a/stubgenj/_stubgenj.py
+++ b/stubgenj/_stubgenj.py
@@ -1129,7 +1129,7 @@ def generateJavaClassStub(package: jpype.JPackage,
     jOverloads = jClass.class_.getMethods()
     for attr, value in items:
         if isinstance(value, jpype.JMethod):
-            matchingOverloads = [o for o in jOverloads if str(o.getName()) == attr and not o.isSynthetic()]
+            matchingOverloads = [o for o in jOverloads if pysafe(str(o.getName())) == attr and not o.isSynthetic()]
             generateJavaMethodStub(packageName, attr, matchingOverloads, javadoc.methods, classesDone=classesDone,
                                    classesUsed=classesUsed, classTypeVars=usableTypeVars, output=methodsOutput,
                                    importsOutput=importsOutput)
diff --git a/stubgenj/tests/stubtest/test-data/unit/mangled_python_keywords.test b/stubgenj/tests/stubtest/test-data/unit/mangled_python_keywords.test
new file mode 100644
index 0000000..1f33c74
--- /dev/null
+++ b/stubgenj/tests/stubtest/test-data/unit/mangled_python_keywords.test
@@ -0,0 +1,15 @@
+[case testBitArrayStubIsValid]
+from java.util import BitSet
+
+[case testMangledMethodsAreGenerated]
+from java.util import BitSet
+BitSet(1).and_(BitSet(2))
+BitSet(1).or_(BitSet(2))
+
+[case testNoUnmangledMethodsAreGenerated_and]
+from java.util import BitSet
+BitSet(1).and(BitSet(2))  # E: invalid syntax
+
+[case testNoUnmangledMethodsAreGenerated_or]
+BitSet(1).or(BitSet(2))   # E: invalid syntax
+
diff --git a/stubgenj/tests/test_stubtest.py b/stubgenj/tests/test_stubtest.py
index bcd5ac9..420cde0 100644
--- a/stubgenj/tests/test_stubtest.py
+++ b/stubgenj/tests/test_stubtest.py
@@ -58,5 +58,6 @@ class StubTestSuite(mypy.test.testcheck.TypeCheckSuite):
         'forward_declaration.test',
         'hashmap.test',
         'jpype_jpackage.test',
+        'mangled_python_keywords.test',
         'varargs.test',
     ]
-- 
GitLab