public NodeSourcePosition addCaller(SourceLanguagePosition newSourceLanguagePosition, NodeSourcePosition link, boolean isSubstitution) {
if (getCaller() == null) {
if (isPlaceholder()) {
return new NodeSourcePosition(newSourceLanguagePosition, link, getMethod(), 0);
}
assert link == null || isSubstitution || verifyCaller(this, link) : link;
assert !isSubstitution || marker == None;
return new NodeSourcePosition(newSourceLanguagePosition, link, getMethod(), getBCI(), isSubstitution ? Substitution : None);
} else {
return new NodeSourcePosition(getCaller().addCaller(newSourceLanguagePosition, link, isSubstitution), getMethod(), getBCI(), marker);
}
}