Eclipse: SourceType to Class (or get current parameters of the Class)
Eclipse: SourceType to Class (or get current parameters of the Class)
我正在尝试搜索扩展特定接口的 IJavaProject 中的所有 classes。这个接口是Generic的,我想获取每个实现的当前类型参数。
现在我有了代表每个实现的 SourceType,但我无法获取此 class 的当前参数。这是我的 classes 的示例:
public class PersonDaoImpl extends AbstractDao<PersonPk, Person> {
...
}
我的目标是获取PersonPk和Person这两个参数。
如果可以将此SourceType转换为class,最好管理一下。
谢谢!
要获取类型的超类型参数class (IType sourceType)
使用
String superSignature = sourceType.getSuperclassTypeSignature();
for (String typeArgument : Signature.getTypeArguments(superSignature))
System.out.println(Signature.getSignatureSimpleName(typeArgument));
效用 Signature
是 org.eclipse.jdt.core.Signature
。
要从其完全限定名称中获取下一个 IType
,请使用:
IJavaProject project = sourceType.getJavaProject();
IType type = project.findType(qualifiedTypeName);
如果你有一个未解析的类型签名(以Q
开头),那么首先使用它来获取限定名称:
String[] qualifiedNames = sourceType.resolveType(typeSignature);
有关详细信息,请参阅 javadoc。
在 IDE 中,您工作区中的 classes 未 作为 Class
加载到当前 JVM(运行IDE),因为工作区中文件的每次更改都需要将新的 class 加载到 JVM 中,从而导致巨大的内存问题,因此即使某些 hack 可以做到这一点,我们也强烈建议不要这样做!现有的表示(Java 模型和 AST)应该足以满足您的所有处理需求。
我正在尝试搜索扩展特定接口的 IJavaProject 中的所有 classes。这个接口是Generic的,我想获取每个实现的当前类型参数。
现在我有了代表每个实现的 SourceType,但我无法获取此 class 的当前参数。这是我的 classes 的示例:
public class PersonDaoImpl extends AbstractDao<PersonPk, Person> {
...
}
我的目标是获取PersonPk和Person这两个参数。
如果可以将此SourceType转换为class,最好管理一下。
谢谢!
要获取类型的超类型参数class (IType sourceType)
使用
String superSignature = sourceType.getSuperclassTypeSignature();
for (String typeArgument : Signature.getTypeArguments(superSignature))
System.out.println(Signature.getSignatureSimpleName(typeArgument));
效用 Signature
是 org.eclipse.jdt.core.Signature
。
要从其完全限定名称中获取下一个 IType
,请使用:
IJavaProject project = sourceType.getJavaProject();
IType type = project.findType(qualifiedTypeName);
如果你有一个未解析的类型签名(以Q
开头),那么首先使用它来获取限定名称:
String[] qualifiedNames = sourceType.resolveType(typeSignature);
有关详细信息,请参阅 javadoc。
在 IDE 中,您工作区中的 classes 未 作为 Class
加载到当前 JVM(运行IDE),因为工作区中文件的每次更改都需要将新的 class 加载到 JVM 中,从而导致巨大的内存问题,因此即使某些 hack 可以做到这一点,我们也强烈建议不要这样做!现有的表示(Java 模型和 AST)应该足以满足您的所有处理需求。