Jam*_*tel 5 java eclipse-plugin eclipse-jdt
我是eclipse插件开发的新手,我正在尝试将IMethod转换为完整方法名称的字符串表示形式.IE
my.full.package.ClassName.methodName(int param, String string)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我不得不亲自推出自己的解决方案.有没有更好的办法?
private static String getMethodFullName(IMethod iMethod)
{
String packageString = "[Default Package]";
try {
IPackageDeclaration[] declarations = iMethod.getCompilationUnit().getPackageDeclarations();
if(declarations.length > 0)
{
packageString = declarations[0].getElementName();
}
} catch (JavaModelException e) {
}
String classString = iMethod.getCompilationUnit().getElementName();
classString = classString.replaceAll(".java", "");
String methodString = iMethod.getElementName() + "(";
for (String type : iMethod.getParameterTypes()) {
methodString += type + ",";
}
methodString += ")";
return packageString + "." + classString + "." + methodString;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用获取类型的完全限定名称
method.getDeclaringType().getFullyQualifiedName();
Run Code Online (Sandbox Code Playgroud)
这可能比从编译单元访问包更容易。其余的功能看起来是正确的。
一个小问题:您应该使用 StringBuilder 来构建字符串,而不是添加到标准字符串中。字符串是不可变的,因此加法会产生大量非隐性临时对象。
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();
}
Run Code Online (Sandbox Code Playgroud)
感谢 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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3099 次 |
| 最近记录: |