下面列出了怎么用com.intellij.psi.PsiSubstitutor的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void visitMethod(@NotNull JavaContext context,
@NotNull UCallExpression call,
@NotNull PsiMethod method) {
JavaEvaluator evaluator = context.getEvaluator();
//check Folivora.applyDrawableToView() call
String methodName = method.getName();
if (!methodName.equals(APPLY_METHOD) || !evaluator.isMemberInClass(method, FOLIVORA_CLASS)) return;
PsiClass viewClass = evaluator.findClass(VIEW_CLASS);
PsiClass currentClass = UastUtils.getContainingClass(call);
if(currentClass == null || viewClass == null) return;
if (!currentClass.isInheritor(viewClass, true/*deep check*/)) {
report(context, call);
return;
}
UMethod uMethod = UastUtils.getParentOfType(call, UMethod.class, false);
if(uMethod == null) return;
//check it is a view's constructor
if (!uMethod.isConstructor()) {
report(context, call);
return;
}
MethodSignature signature = uMethod.getSignature(PsiSubstitutor.EMPTY);
PsiType[] types = signature.getParameterTypes();
if (types.length != 2) {
report(context, call);
return;
}
if (!types[0].equalsToText(CONTEXT_CLASS)
|| !types[1].equalsToText(ATTRS_CLASS)) {
report(context, call);
}
}
@NotNull
@Override public PsiSubstitutor getSubstitutor() { return PsiSubstitutor.EMPTY; }
private static PsiFieldMember buildFieldMember(final PsiField field, final PsiClass containingClass,
final PsiClass clazz) {
return new PsiFieldMember(field,
TypeConversionUtil.getSuperClassSubstitutor(containingClass, clazz, PsiSubstitutor.EMPTY));
}