PsiElement (@NotNull PsiFile file, @NotNull Editor editor, int offset, int flags, @Nullable PsiElement refElement) { PsiReference ref = null; if (refElement == null) { ref = TargetElementUtil.findReference(editor, offset); if (ref instanceof PsiJavaReference) { refElement = ((PsiJavaReference)ref).advancedResolve(true).getElement(); } else if (ref == null) { final PsiElement element = file.findElementAt(offset); if (element != null) { final PsiElement parent = element.getParent(); if (parent instanceof PsiFunctionalExpression && (PsiUtil.isJavaToken(element, JavaTokenType.ARROW) || PsiUtil.isJavaToken(element, JavaTokenType.DOUBLE_COLON))) { refElement = LambdaUtil.resolveFunctionalInterfaceClass((PsiFunctionalExpression)parent); } else if (element instanceof PsiKeyword && parent instanceof PsiTypeElement && ((PsiTypeElement)parent).isInferredType()) { refElement = PsiUtil.resolveClassInType(((PsiTypeElement)parent).getType()); } } } } if (refElement != null) { if (BitUtil.isSet(flags, NEW_AS_CONSTRUCTOR)) { if (ref == null) { ref = TargetElementUtil.findReference(editor, offset); } if (ref != null) { PsiElement element = ref.getElement(); PsiElement parent = element.getParent(); if (parent instanceof PsiAnonymousClass) { parent = parent.getParent(); } if (parent instanceof PsiNewExpression && element != ((PsiNewExpression)parent).getQualifier()) { PsiMethod constructor = ((PsiNewExpression)parent).resolveConstructor(); if (constructor != null) { refElement = constructor; } else if (refElement instanceof PsiClass && ((PsiClass)refElement).getConstructors().length > 0) { return null; } } } } if (refElement instanceof PsiMirrorElement) { return ((PsiMirrorElement)refElement).getPrototype(); } if (refElement instanceof PsiClass) { final PsiFile containingFile = refElement.getContainingFile(); if (containingFile != null && containingFile.getVirtualFile() == null) { // in mirror file of compiled class String qualifiedName = ((PsiClass)refElement).getQualifiedName(); if (qualifiedName == null) return null; return JavaPsiFacade.getInstance(refElement.getProject()).findClass(qualifiedName, refElement.getResolveScope()); } } if (refElement instanceof PsiExtensionMethod) { refElement = ((PsiExtensionMethod)refElement).getTargetMethod(); } if (refElement instanceof LightRecordMember) { return ((LightRecordMember)refElement).getRecordComponent(); } if (refElement instanceof LightRecordCanonicalConstructor) { return ((LightRecordCanonicalConstructor)refElement).getContainingClass(); } } return super.adjustReferenceOrReferencedElement(file, editor, offset, flags, refElement); }