diff --git a/GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/GhidraBuiltinsBuilder.java b/GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/GhidraBuiltinsBuilder.java index fe8555e482..48e7cd344f 100644 --- a/GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/GhidraBuiltinsBuilder.java +++ b/GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/GhidraBuiltinsBuilder.java @@ -15,20 +15,10 @@ */ package ghidra.doclets.typestubs; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.ListIterator; -import java.util.Set; +import java.io.*; +import java.util.*; -import javax.lang.model.element.PackageElement; -import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; +import javax.lang.model.element.*; import javax.lang.model.util.Elements; /** @@ -143,8 +133,8 @@ class GhidraBuiltinsBuilder { */ private void printMethods(PrintWriter printer, Set exports) { // methods must be sorted by name for typing.overload - List apiMethods = api.getMethods(true, true); - List scriptMethods = script.getMethods(true, true); + List apiMethods = filter(api.getMethods(true, true)); + List scriptMethods = filter(script.getMethods(true, true)); int length = apiMethods.size() + scriptMethods.size(); List methods = new ArrayList<>(length); @@ -233,4 +223,18 @@ class GhidraBuiltinsBuilder { PackageElement pkg = (PackageElement) type.getEnclosingElement(); return new PythonTypeStubType(new PythonTypeStubPackage(doclet, pkg), type); } + + /** + * Filters out methods that should not be considered for type generation. + *

+ * One use case of this is to prevent Ghidra methods from overriding built-in Python methods + * that have a higher precedence. + * + * @param methods The methods to filter + * @return A new {@link List} of filtered methods + */ + private List filter(List methods) { + final Set EXCLUDES = Set.of("set"); + return methods.stream().filter(m -> !EXCLUDES.contains(m.getName())).toList(); + } }