PsiElement (@NotNull PsiClass aClass, @NotNull PsiMethod baseMethod, @NotNull PsiSubstitutor substitutor) { PsiMethod prevBaseMethod = PsiTreeUtil.getPrevSiblingOfType(baseMethod, PsiMethod.class); while(prevBaseMethod != null) { String name = prevBaseMethod.isConstructor() ? aClass.getName() : prevBaseMethod.getName(); //Happens when aClass instanceof PsiAnonymousClass if (name != null) { MethodSignature signature = MethodSignatureUtil.createMethodSignature(name, prevBaseMethod.getParameterList(), prevBaseMethod.getTypeParameterList(), substitutor, prevBaseMethod.isConstructor()); PsiMethod prevMethod = MethodSignatureUtil.findMethodBySignature(aClass, signature, false); if (prevMethod != null && prevMethod.isPhysical()){ return prevMethod.getNextSibling(); } } prevBaseMethod = PsiTreeUtil.getPrevSiblingOfType(prevBaseMethod, PsiMethod.class); } PsiMethod nextBaseMethod = PsiTreeUtil.getNextSiblingOfType(baseMethod, PsiMethod.class); while(nextBaseMethod != null) { String name = nextBaseMethod.isConstructor() ? aClass.getName() : nextBaseMethod.getName(); if (name != null) { MethodSignature signature = MethodSignatureUtil.createMethodSignature(name, nextBaseMethod.getParameterList(), nextBaseMethod.getTypeParameterList(), substitutor, nextBaseMethod.isConstructor()); PsiMethod nextMethod = MethodSignatureUtil.findMethodBySignature(aClass, signature, false); if (nextMethod != null && nextMethod.isPhysical()){ return nextMethod; } } nextBaseMethod = PsiTreeUtil.getNextSiblingOfType(nextBaseMethod, PsiMethod.class); } return null; }