Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,12 @@ trait AstForDeclarationsCreator(implicit withSchemaValidation: ValidationMode) {
val node = annotationNode(decorator, decorator.code, name, fullName)
val assignmentAsts = exprNode.json("arguments").arr.toList.map { arg =>
createBabelNodeInfo(arg).node match {
case AssignmentExpression =>
annotationAssignmentAst(code(arg("left")), code(arg), astForNodeWithFunctionReference(arg("right")))
case AssignmentExpression if !createBabelNodeInfo(arg("right")).node.isInstanceOf[FunctionLike] =>
annotationAssignmentAst(code(arg("left")), code(arg), astForNode(arg("right")))
case n if n.isInstanceOf[FunctionLike] =>
Ast()
case _ =>
annotationAssignmentAst("value", code(arg), astForNodeWithFunctionReference(arg))
annotationAssignmentAst("value", code(arg), astForNode(arg))
}
}
annotationAst(node, assignmentAsts)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.joern.jssrc2cpg.passes.ast

import io.joern.jssrc2cpg.testfixtures.AstJsSrc2CpgSuite
import io.joern.x2cpg.passes.base.ContainsEdgePass
import io.shiftleft.codepropertygraph.generated.nodes.{Method, TypeDecl, _containsIn}
import io.shiftleft.semanticcpg.language.*

class TsDecoratorAstCreationPassTests extends AstJsSrc2CpgSuite(".ts") {
Expand Down Expand Up @@ -323,6 +325,17 @@ class TsDecoratorAstCreationPassTests extends AstJsSrc2CpgSuite(".ts") {
annotationD.parameterAssign.l shouldBe empty
}
}

"create annotations correctly with lambda function as annotation argument" in {
val cpg = code("""
|import { NgModule } from '@angular/core';
|
|@NgModule(() => { })
|export class MyClass { }
|""".stripMargin)
ContainsEdgePass(cpg).createAndApply()
cpg.methodRef.where(_._containsIn.collectAll[TypeDecl]) shouldBe empty
}
}

}
Loading