Unexpected “METHOD_PARAMETER_IN/OUT” Nodes in PDG Export
When I try to use joern-export command
subprocess.run(
["joern-export", "--repr", "pdg", "--out", os.path.abspath(pdg_dir)],
cwd=output_path,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
to generate a PDG of the java example below
public class PolymorphismDemo {
public static void main(String[] args) {
Animal animal = new Dog();
animal.speak();
}
}
class Animal {
public void speak() {
System.out.println("Animal speaks");
}
}
class Dog extends Animal {
@Override
public void speak() {
System.out.println("Dog barks");
}
}
I found the label of METHOD_PARAMETER_IN and METHOD_PARAMETER_OUT generated an unexpected result for node ID 111669149702 through 111669149708 and 115964116998 through 115964117004 that includes additional parameter nodes (e.g., p0, p1, p2, type ANY) whose origin and meaning are unclear.
All label of generated METHOD_PARAMETER_IN and METHOD_PARAMETER_OUT nodes are posted below
"111669149696" [label="METHOD_PARAMETER_IN" CODE="String[] args" COLUMN_NUMBER="29" EVALUATION_STRATEGY="BY_SHARING" INDEX="1" IS_VARIADIC="false" LINE_NUMBER="2" NAME="args" ORDER="1" TYPE_FULL_NAME="java.lang.String[]"];
"111669149697" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="1" DYNAMIC_TYPE_HINT_FULL_NAME="PolymorphismDemo" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="1" NAME="this" ORDER="0" TYPE_FULL_NAME="PolymorphismDemo"];
"111669149698" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="5" DYNAMIC_TYPE_HINT_FULL_NAME="Animal" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="9" NAME="this" ORDER="0" TYPE_FULL_NAME="Animal"];
"111669149699" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="1" DYNAMIC_TYPE_HINT_FULL_NAME="Animal" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="8" NAME="this" ORDER="0" TYPE_FULL_NAME="Animal"];
"111669149700" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="5" DYNAMIC_TYPE_HINT_FULL_NAME="Dog" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="15" NAME="this" ORDER="0" TYPE_FULL_NAME="Dog"];
"111669149701" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="1" DYNAMIC_TYPE_HINT_FULL_NAME="Dog" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="14" NAME="this" ORDER="0" TYPE_FULL_NAME="Dog"];
"111669149702" [label="METHOD_PARAMETER_IN" CODE="p0" EVALUATION_STRATEGY="BY_VALUE" INDEX="0" IS_VARIADIC="false" NAME="p0" ORDER="0" TYPE_FULL_NAME="ANY"];
"111669149703" [label="METHOD_PARAMETER_IN" CODE="p0" EVALUATION_STRATEGY="BY_VALUE" INDEX="0" IS_VARIADIC="false" NAME="p0" ORDER="0" TYPE_FULL_NAME="ANY"];
"111669149704" [label="METHOD_PARAMETER_IN" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
"111669149705" [label="METHOD_PARAMETER_IN" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
"111669149706" [label="METHOD_PARAMETER_IN" CODE="p2" EVALUATION_STRATEGY="BY_VALUE" INDEX="2" IS_VARIADIC="false" NAME="p2" ORDER="2" TYPE_FULL_NAME="ANY"];
"111669149707" [label="METHOD_PARAMETER_IN" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
"111669149708" [label="METHOD_PARAMETER_IN" CODE="p2" EVALUATION_STRATEGY="BY_VALUE" INDEX="2" IS_VARIADIC="false" NAME="p2" ORDER="2" TYPE_FULL_NAME="ANY"];
"115964116992" [label="METHOD_PARAMETER_OUT" CODE="String[] args" COLUMN_NUMBER="29" EVALUATION_STRATEGY="BY_SHARING" INDEX="1" IS_VARIADIC="false" LINE_NUMBER="2" NAME="args" ORDER="1" TYPE_FULL_NAME="java.lang.String[]"];
"115964116993" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="1" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="1" NAME="this" ORDER="0" TYPE_FULL_NAME="PolymorphismDemo"];
"115964116994" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="5" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="9" NAME="this" ORDER="0" TYPE_FULL_NAME="Animal"];
"115964116995" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="1" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="8" NAME="this" ORDER="0" TYPE_FULL_NAME="Animal"];
"115964116996" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="5" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="15" NAME="this" ORDER="0" TYPE_FULL_NAME="Dog"];
"115964116997" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="1" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="14" NAME="this" ORDER="0" TYPE_FULL_NAME="Dog"];
"115964116998" [label="METHOD_PARAMETER_OUT" CODE="p0" EVALUATION_STRATEGY="BY_VALUE" INDEX="0" IS_VARIADIC="false" NAME="p0" ORDER="0" TYPE_FULL_NAME="ANY"];
"115964116999" [label="METHOD_PARAMETER_OUT" CODE="p0" EVALUATION_STRATEGY="BY_VALUE" INDEX="0" IS_VARIADIC="false" NAME="p0" ORDER="0" TYPE_FULL_NAME="ANY"];
"115964117000" [label="METHOD_PARAMETER_OUT" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
"115964117001" [label="METHOD_PARAMETER_OUT" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
"115964117002" [label="METHOD_PARAMETER_OUT" CODE="p2" EVALUATION_STRATEGY="BY_VALUE" INDEX="2" IS_VARIADIC="false" NAME="p2" ORDER="2" TYPE_FULL_NAME="ANY"];
"115964117003" [label="METHOD_PARAMETER_OUT" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
"115964117004" [label="METHOD_PARAMETER_OUT" CODE="p2" EVALUATION_STRATEGY="BY_VALUE" INDEX="2" IS_VARIADIC="false" NAME="p2" ORDER="2" TYPE_FULL_NAME="ANY"];
I tried to trace the origin but couldn't find a reasonable explanation. I wonder if it is available for you to instruct me:
- Where these
METHOD_PARAMETER_INandMETHOD_PARAMETER_OUTnodes generated from? - Is this expected behavior, or possibly a bug in the export or CPG generation process?
Thanks in advance for your help!
Joern version: 4.0.402 OS: Ubuntu 24.04 Java version: openjdk 17.0.15 2025-04-15
@johannescoetzee looks like a javasrc frontend issue - can you please take a look?