GP-5171: Generating pypredef files for PyDev. Fixing PyDev

errors/warnings in PyGhidra.
This commit is contained in:
Ryan Kurtz 2024-11-27 09:38:51 -05:00
parent e66bbc5231
commit 56d6af4531
16 changed files with 108 additions and 92 deletions

View file

@ -56,6 +56,16 @@ class GhidraBuiltinsBuilder {
catch (IOException e) {
e.printStackTrace();
}
File pypredefDir = new File(doclet.getDestDir().getParentFile(), "pypredef");
File pypredefFile = new File(pypredefDir, "ghidra.ghidra_builtins.pypredef");
pypredefDir.mkdirs();
try (PrintWriter printer = new PrintWriter(new FileWriter(pypredefFile))) {
process(printer);
}
catch (IOException e) {
e.printStackTrace();
}
}
/**

View file

@ -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.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.io.*;
import java.util.*;
import javax.lang.model.element.Element;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.*;
/**
* {@link PythonTypeStubElement} for a package<p/>
@ -105,6 +95,16 @@ final class PythonTypeStubPackage extends PythonTypeStubElement<PackageElement>
catch (IOException e) {
e.printStackTrace();
}
File pypredefDir = new File(doclet.getDestDir().getParentFile(), "pypredef");
File pypredefFile = new File(pypredefDir, packageName + ".pypredef");
pypredefDir.mkdirs();
try (PrintWriter printer = new PrintWriter(new FileWriter(pypredefFile))) {
process(printer, "");
}
catch (IOException e) {
e.printStackTrace();
}
}
/**

View file

@ -16,27 +16,12 @@
package ghidra.doclets.typestubs;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.TypeParameterElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.element.*;
import javax.lang.model.type.*;
import com.sun.source.doctree.DocTree;
@ -278,12 +263,11 @@ class PythonTypeStubType extends PythonTypeStubElement<TypeElement> {
for (PythonTypeStubNestedType nested : getNestedTypes()) {
nested.process(printer, indent);
}
printClassLiteralField(printer, indent);
for (VariableElement field : getFields()) {
printField(field, printer, indent, isStatic(field));
}
if (!getFields().isEmpty()) {
printer.println();
}
printer.println();
ListIterator<PythonTypeStubMethod> methodIterator = getMethods().listIterator();
while (methodIterator.hasNext()) {
PythonTypeStubMethod method = methodIterator.next();
@ -342,6 +326,17 @@ class PythonTypeStubType extends PythonTypeStubElement<TypeElement> {
}
}
/**
* Prints the class literal field to the provided printer
*
* @param printer the printer
* @param indent the indentation
*/
void printClassLiteralField(PrintWriter printer, String indent) {
printer.print(indent);
printer.println("class_: " + applyClassVar(Class.class.getName()));
}
/**
* Wraps the provided type in typing.ClassVar
*