LookupElementWeigher (PsiElement position, final ExpectedTypeInfo[] infos) { if (PsiTreeUtil.getParentOfType(position, PsiDocComment.class) != null) { return null; } if (position.getParent() instanceof PsiReferenceExpression refExpr) { final PsiElement qualifier = refExpr.getQualifier(); if (qualifier == null) { return null; } if (!(qualifier instanceof PsiJavaCodeReferenceElement) || !(((PsiJavaCodeReferenceElement)qualifier).resolve() instanceof PsiClass)) { return null; } } return new LookupElementWeigher("statics") { @NotNull @Override public Integer weigh(@NotNull LookupElement element) { JavaConstructorCallElement call = element.as(JavaConstructorCallElement.class); Object o = call != null ? call.getConstructedClass() : element.getObject(); if (o instanceof PsiKeyword) return -3; if (!(o instanceof PsiMember) || element.getUserData(JavaGenerateMemberCompletionContributor.GENERATE_ELEMENT) != null) { return 0; } if (((PsiMember)o).hasModifierProperty(PsiModifier.STATIC) && !hasNonVoid(infos)) { if (o instanceof PsiMethod) return -5; if (o instanceof PsiField) return -4; } if (o instanceof PsiClass) return -3; //instance method or field return -5; } }; }