PsiMethod (@NotNull PsiMethod constructor, @NotNull Set<? super PsiMethod> visited) { if (!visited.add(constructor)) return null; PsiMethodCallExpression call = findThisOrSuperCallInConstructor(constructor); if (isSuperConstructorCall(call)) { PsiMethod superConstructor = call.resolveMethod(); if (superConstructor != null) { return superConstructor; } } else if (isChainedConstructorCall(call)) { PsiMethod chainedConstructor = call.resolveMethod(); if (chainedConstructor != null) { return findConstructorInSuper(chainedConstructor, visited); } return null; } PsiClass containingClass = constructor.getContainingClass(); if (containingClass != null) { PsiClass superClass = containingClass.getSuperClass(); if (superClass != null && superClass.getName() != null) { MethodSignature defConstructor = MethodSignatureUtil.createMethodSignature(superClass.getName(), PsiType.EMPTY_ARRAY, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY, true); return MethodSignatureUtil.findMethodBySignature(superClass, defConstructor, false); } } return null; }