Java 类com.intellij.psi.PsiThisExpression 实例源码
项目:consulo-java
文件:RecursiveCallLineMarkerProvider.java
public static boolean isRecursiveMethodCall(@NotNull PsiMethodCallExpression methodCall)
{
final PsiExpression qualifier = methodCall.getMethodExpression().getQualifierExpression();
if(qualifier != null && !(qualifier instanceof PsiThisExpression))
{
return false;
}
final PsiMethod method = PsiTreeUtil.getParentOfType(methodCall, PsiMethod.class, true, PsiLambdaExpression.class, PsiClass.class);
if(method == null || !method.getName().equals(methodCall.getMethodExpression().getReferenceName()))
{
return false;
}
return Comparing.equal(method, methodCall.resolveMethod());
}
项目:Android_Lint_SRP_Practice_Example
文件:ElementUtil.java
/**
* 識別子の this 式判定
* @param id 識別子ノード
* @return 識別子ノードが、this式の名称か否か (true:this式の識別子、false:this式の識別子でない)
*/
public static boolean isThisExpression(@NonNull PsiIdentifier id) {
// 名称がthis式の識別名か否かをチェック
List<PsiElement> elderBrothers = ElementUtil.getElderBrother(id);
boolean isThisExpr = false;
for (PsiElement brother : elderBrothers) {
isThisExpr = isThisExpr ||
(brother instanceof PsiThisExpression) ||
(brother instanceof PsiParenthesizedExpression);
}
return isThisExpr;
}
项目:intellij-ce-playground
文件:RecursionVisitor.java
@Override
public void visitMethodCallExpression(
@NotNull GrMethodCallExpression call) {
if (recursive) {
return;
}
super.visitMethodCallExpression(call);
final GrExpression methodExpression =
call.getInvokedExpression();
if (!(methodExpression instanceof GrReferenceExpression)) {
return;
}
final GrReferenceExpression referenceExpression = (GrReferenceExpression) methodExpression;
final String calledMethodName = referenceExpression.getReferenceName();
if (calledMethodName == null) {
return;
}
if (!calledMethodName.equals(methodName)) {
return;
}
final PsiMethod calledMethod = call.resolveMethod();
if (!method.equals(calledMethod)) {
return;
}
if (method.hasModifierProperty(PsiModifier.STATIC) ||
method.hasModifierProperty(PsiModifier.PRIVATE)) {
recursive = true;
return;
}
final GrExpression qualifier = referenceExpression.getQualifierExpression();
if (qualifier == null || qualifier instanceof PsiThisExpression) {
recursive = true;
}
}
项目:tools-idea
文件:RecursionVisitor.java
public void visitMethodCallExpression(
@NotNull GrMethodCallExpression call) {
if (recursive) {
return;
}
super.visitMethodCallExpression(call);
final GrExpression methodExpression =
call.getInvokedExpression();
if (!(methodExpression instanceof GrReferenceExpression)) {
return;
}
final GrReferenceExpression referenceExpression = (GrReferenceExpression) methodExpression;
final String calledMethodName = referenceExpression.getReferenceName();
if (calledMethodName == null) {
return;
}
if (!calledMethodName.equals(methodName)) {
return;
}
final PsiMethod calledMethod = call.resolveMethod();
if (!method.equals(calledMethod)) {
return;
}
if (method.hasModifierProperty(PsiModifier.STATIC) ||
method.hasModifierProperty(PsiModifier.PRIVATE)) {
recursive = true;
return;
}
final GrExpression qualifier = referenceExpression.getQualifierExpression();
if (qualifier == null || qualifier instanceof PsiThisExpression) {
recursive = true;
}
}
项目:Android_Lint_SRP_Practice_Example
文件:PsiClassStructureDetector.java
@Override
public void visitThisExpression(PsiThisExpression expression) {
mVisitor.report("PsiThisExpression", expression.getText(), expression);
super.visitExpression(expression);
}
项目:CopyConstructorPlugin
文件:IncompleteCopyConstructorInspection.java
private boolean qualifierReferencesThis(@Nullable PsiExpression qualifier) {
return qualifier == null || qualifier instanceof PsiThisExpression;
}
项目:consulo-java
文件:QualifyWithThisFix.java
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
final PsiThisExpression thisExpression =
RefactoringChangeUtil.createThisExpression(PsiManager.getInstance(project), myContainingClass);
((PsiReferenceExpression)myExpression).setQualifierExpression(thisExpression);
}
项目:consulo-java
文件:JavaCompletionStatistician.java
@Override
public StatisticsInfo serialize(final LookupElement element, final CompletionLocation location)
{
Object o = element.getObject();
if(o instanceof PsiLocalVariable || o instanceof PsiParameter || o instanceof PsiThisExpression || o instanceof PsiKeyword)
{
return StatisticsInfo.EMPTY;
}
LookupItem item = element.as(LookupItem.CLASS_CONDITION_KEY);
if(item == null)
{
return null;
}
PsiType qualifierType = JavaCompletionUtil.getQualifierType(item);
if(o instanceof PsiMember)
{
final ExpectedTypeInfo[] infos = JavaCompletionUtil.EXPECTED_TYPES.getValue(location);
final ExpectedTypeInfo firstInfo = infos != null && infos.length > 0 ? infos[0] : null;
String key2 = JavaStatisticsManager.getMemberUseKey2((PsiMember) o);
if(o instanceof PsiClass)
{
PsiType expectedType = firstInfo != null ? firstInfo.getDefaultType() : null;
return new StatisticsInfo(JavaStatisticsManager.getAfterNewKey(expectedType), key2);
}
PsiClass containingClass = ((PsiMember) o).getContainingClass();
if(containingClass != null)
{
String expectedName = firstInfo instanceof ExpectedTypeInfoImpl ? ((ExpectedTypeInfoImpl) firstInfo).getExpectedName() : null;
String contextPrefix = expectedName == null ? "" : "expectedName=" + expectedName + "###";
String context = contextPrefix + JavaStatisticsManager.getMemberUseKey2(containingClass);
if(o instanceof PsiMethod)
{
String memberValue = JavaStatisticsManager.getMemberUseKey2(RecursionWeigher.findDeepestSuper((PsiMethod) o));
List<StatisticsInfo> superMethodInfos = ContainerUtil.newArrayList(new StatisticsInfo(contextPrefix + context, memberValue));
for(PsiClass superClass : InheritanceUtil.getSuperClasses(containingClass))
{
superMethodInfos.add(new StatisticsInfo(contextPrefix + JavaStatisticsManager.getMemberUseKey2(superClass), memberValue));
}
return StatisticsInfo.createComposite(superMethodInfos);
}
return new StatisticsInfo(context, key2);
}
}
if(qualifierType != null)
{
return StatisticsInfo.EMPTY;
}
return null;
}