@@ -2,6 +2,7 @@ package parser
22
33import com.github.javaparser.JavaParser
44import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration
5+ import com.github.javaparser.ast.body.ConstructorDeclaration
56import com.github.javaparser.ast.body.EnumDeclaration
67import com.github.javaparser.ast.body.FieldDeclaration
78import com.github.javaparser.ast.body.MethodDeclaration
@@ -14,9 +15,7 @@ import java.util.jar.JarEntry
1415import java.util.jar.JarFile
1516
1617class JavaSourceParser : ClassParser {
17-
1818 private val parser = JavaParser ()
19- private val combinedTypeSolver = CombinedTypeSolver () // Ensure this is properly initialized
2019
2120 override fun parse (jar : JarFile ): List <ParsedClass > {
2221 val parsedClasses = mutableListOf<ParsedClass >()
@@ -60,31 +59,45 @@ class JavaSourceParser : ClassParser {
6059 val methods = cls.methods.map { parseMethod(it, cls.nameAsString) }
6160 val fields = cls.fields.flatMap { parseField(it) }
6261
63- // Resolve extended types and their methods
64- val extendedTypes = cls.extendedTypes.mapNotNull { type ->
65- val resolvedType = type.resolveOrNull()
66- resolvedType?.qualifiedName
67- }
68-
69- /* val extendedMethods = extendedTypes.flatMap { qualifiedName ->
70- val resolvedClass = combinedTypeSolver.tryToSolveType(qualifiedName).orElse(null)
71- resolvedClass?.methods?.map { parseMethod(it.declaration, resolvedClass.name) } ?: emptyList()
72- }*/
62+ // Gather all constructors and parse them
7363
7464 parsedClass = ParsedClass (
7565 name = cls.nameAsString,
7666 packageName = pkgName,
7767 fields = fields,
7868 methods = methods, // Combine methods
7969 classComment = cls.comment.map { extractJavaDocInfo(it.content).mainComment }.orElse(null ),
80- // extendedTypes = extendedTypes, // Broken at the moment
70+ extendedTypes = cls.extendedTypes.map { it.asString() },
71+ implementedTypes = cls.implementedTypes.map { it.asString() },
72+ constructors = cls.constructors.map { parseConstructor(it, cls.nameAsString) },
8173 isEnum = false
8274 )
8375 }
8476
8577 return parsedClass
8678 }
8779
80+ private fun parseConstructor (constructor : ConstructorDeclaration , className : String ): ParsedMethod {
81+ return ParsedMethod (
82+ name = constructor .nameAsString,
83+ returnType = className,
84+ parameters = constructor .parameters.map { param ->
85+ // Check for nullability in the parameter type. Not sure why but it seems to include annotations in the type string
86+ val isNullableComment = param.type.toString()?.contains(" @Nullable" ) ? : false
87+
88+ ParsedParameter (
89+ name = param.nameAsString,
90+ type = param.type.toString().replace(" @Nullable " , " " ),
91+ required = ! isNullableComment,
92+ )
93+ },
94+ comment = constructor .comment.map { extractJavaDocInfo(it.content).mainComment }.orElse(null ),
95+ isDeprecated = constructor .annotations.any { it.nameAsString == " Deprecated" },
96+ isAsync = false , // Constructors are not async
97+ isConstructor = true
98+ )
99+ }
100+
88101 private fun parseMethod (method : MethodDeclaration , className : String ): ParsedMethod {
89102 return ParsedMethod (
90103 name = method.nameAsString,
@@ -101,7 +114,10 @@ class JavaSourceParser : ClassParser {
101114 },
102115 comment = method.comment.map { extractJavaDocInfo(it.content).mainComment }.orElse(null ),
103116 isDeprecated = method.annotations.any { it.nameAsString == " Deprecated" },
104- isAsync = method.nameAsString.contains(" Async" , ignoreCase = true ) // Most Bukkit methods that are async have "Async" in their name
117+ isAsync = method.nameAsString.contains(
118+ " Async" ,
119+ ignoreCase = true
120+ ) // Most Bukkit methods that are async have "Async" in their name
105121 )
106122 }
107123
0 commit comments