Я не думаю, что это возможно, это работает для одной локальной переменной, объявленной в любом методе, и первого параметра в любом классе. Большая проблема здесь заключается в том, что как только вы находитесь внутри предиката и указываете путь, который будет возвращать несколько узлов, предикат применяется только к первому узлу.
Например, в вашем коде ниже //LocalVariableDeclaration/.../VariableDeclaratorId должен сравниваться со всеми локальными переменными, но он сопоставляется только с первой LocalVariable, которая соответствует предикату буфера String. В XPath 2.0 есть конструкция for, которая поддерживает такие запросы, но пока не поддерживается PMD.
... and contains(@Image,
//LocalVariableDeclaration[descendant::ClassOrInterfaceType[@Image='StringBuffer']]
/VariableDeclarator/VariableDeclaratorId/@Image)]