Вы могли использовать
(?:F|f)(?:O|o)(?:O|o)
?: в скобках в средствах.Net это не получает, и просто используемое для группировки условий | (или) оператор.
Благодаря iain и дополнительным исследованиям я нашел это решение. Похоже, что-то подобное должно быть встроено в JDT ....
import org.eclipse.jdt.core.Signature;
private static String getMethodFullName(IMethod iMethod)
{
StringBuilder name = new StringBuilder();
name.append(iMethod.getDeclaringType().getFullyQualifiedName());
name.append(".");
name.append(iMethod.getElementName());
name.append("(");
String comma = "";
String[] parameterTypes = iMethod.getParameterTypes();
try {
String[] parameterNames = iMethod.getParameterNames();
for (int i=0; i<iMethod.getParameterTypes().length; ++i) {
name.append(comma);
name.append(Signature.toString(parameterTypes[i]));
name.append(" ");
name.append(parameterNames[i]);
comma = ", ";
}
} catch (JavaModelException e) {
}
name.append(")");
return name.toString();
}
Полное имя типа можно получить с помощью
method.getDeclaringType().getFullyQualifiedName();
. Это, вероятно, проще, чем доступ к пакету из модуля компиляции. Остальная часть вашей функции выглядит правильно.
Один небольшой момент: вы должны использовать StringBuilder для построения строки вместо добавления к стандартной String. Строки неизменяемы, поэтому сложение создает множество ненужных временных объектов.
private static String getMethodFullName(IMethod iMethod)
{
StringBuilder name = new StringBuilder();
name.append(iMethod.getDeclaringType().getFullyQualifiedName());
name.append(".");
name.append(iMethod.getElementName());
name.append("(");
String comma = "";
for (String type : iMethod.getParameterTypes()) {
name.append(comma);
comma = ", ";
name.append(type);
}
name.append(")");
return name.toString();
}
Я не уверен, что он будет учитывать все случаи (метод внутри внутреннего класса, анонимный класс, с общими параметрами ...)
Когда дело доходит до сигнатур методов, следующие классы:
org.eclipse.jdt.internal.corext.codemanipulation.AddUnimplementedMethodsOperation
org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2
Вам необходимо получить jdt .core.dom.IMethodBinding
, из которого вы можете извлечь все, что вам нужно.
Если у вас есть MethodInvocation
, вы можете:
//MethodInvocation node
ITypeBinding type = node.getExpression().resolveTypeBinding();
IMethodBinding method=node.resolveMethodBinding();