Skip to content
This repository has been archived by the owner on Nov 11, 2021. It is now read-only.

Commit

Permalink
Merge pull request #28 from joernio/johannes/basic-support-3
Browse files Browse the repository at this point in the history
Johannes/basic support 3
  • Loading branch information
Johannes Coetzee authored Sep 27, 2021
2 parents 51db25a + 093d031 commit a121204
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
25 changes: 18 additions & 7 deletions src/main/scala/io/joern/javasrc2cpg/passes/AstCreator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,9 @@ import com.github.javaparser.ast.stmt.{
WhileStmt,
YieldStmt
}
import com.github.javaparser.resolution.Resolvable
import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration
import com.github.javaparser.resolution.types.ResolvedType
import io.shiftleft.codepropertygraph.generated.{
ControlStructureTypes,
DispatchTypes,
Expand Down Expand Up @@ -232,7 +234,7 @@ class AstCreator(filename: String, global: Global) {
}

private def astForVariableDeclarator(v: VariableDeclarator, order: Int): Ast = {
val typeFullName = registerType(v.getType.resolve().describe())
val typeFullName = registerType(tryResolveType(v))
val name = v.getName.toString
Ast(
NewMember()
Expand Down Expand Up @@ -260,7 +262,7 @@ class AstCreator(filename: String, global: Global) {
}

private def astForMethodReturn(methodDeclaration: MethodDeclaration): Ast = {
val typeFullName = registerType(methodDeclaration.getType.resolve().describe())
val typeFullName = registerType(tryResolveType(methodDeclaration))
val methodReturnNode =
NewMethodReturn()
.order(methodDeclaration.getParameters.size + 2)
Expand Down Expand Up @@ -340,7 +342,7 @@ class AstCreator(filename: String, global: Global) {
case x: SynchronizedStmt => Seq()
case x: ThrowStmt => Seq()
case x: TryStmt => Seq(astForTry(x, order))
case x: UnparsableStmt => Seq()
case x: UnparsableStmt => Seq() // TODO: log a warning
case x: WhileStmt => Seq(astForWhile(x, order))
case x: YieldStmt => Seq()
case _ => Seq()
Expand Down Expand Up @@ -675,7 +677,7 @@ class AstCreator(filename: String, global: Global) {
val code = v.getType + " " + v.getName.toString
val typeFullName =
try {
registerType(v.getType.resolve().describe())
registerType(tryResolveType(v))
} catch {
case _: Throwable => registerType("<empty>")
}
Expand All @@ -688,7 +690,7 @@ class AstCreator(filename: String, global: Global) {
} catch {
case _: Throwable =>
try {
registerType(v.getType.resolve().describe())
registerType(tryResolveType(v))
} catch {
case _: Throwable => registerType("<empty>")
}
Expand Down Expand Up @@ -950,8 +952,17 @@ class AstCreator(filename: String, global: Global) {
.withArgEdges(callNode, argAsts.flatMap(_.root))
}

private def tryResolveType(node: NodeWithType[_, _ <: Resolvable[ResolvedType]]): String = {
try {
node.getType.resolve().describe()
} catch {
case _: Throwable =>
s"<unresolved>.${node.getType}"
}
}

private def astForParameter(parameter: Parameter, childNum: Int): Ast = {
val typeFullName = registerType(parameter.getType.resolve().describe())
val typeFullName = registerType(tryResolveType(parameter))
val parameterNode = NewMethodParameterIn()
.name(parameter.getName.toString)
.code(parameter.toString)
Expand All @@ -973,7 +984,7 @@ class AstCreator(filename: String, global: Global) {
}

private def paramListSignature(methodDeclaration: MethodDeclaration) = {
val paramTypes = methodDeclaration.getParameters.asScala.map(_.getType.resolve().describe())
val paramTypes = methodDeclaration.getParameters.asScala.map(tryResolveType)
"(" + paramTypes.mkString(",") + ")"
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class ObjectInstantiationTests extends JavaSrcCodeToCpgFixture {

withClue("assignee should be created correctly") {
assignee.name shouldBe "f"
assignee.typeFullName shouldBe "<empty>"
assignee.typeFullName shouldBe "<unresolved>.Foo"
}

withClue("initializer should be created correctly") {
Expand Down

0 comments on commit a121204

Please sign in to comment.