void (@NotNull RefMethod method) { if (!myProcessedMethods.contains(method)) { // Process class's static initializers RefClass methodOwnerClass = method.getOwnerClass(); boolean canBeOverridden = !method.isStatic() && !method.isConstructor(); if (!canBeOverridden || method.isEntry()) { if (method.isStatic()) { RefElementImpl owner = (RefElementImpl)method.getOwner(); if (owner != null) { owner.setReachable(true); } } else if (methodOwnerClass != null) { addInstantiatedClass(methodOwnerClass); } myProcessedMethods.add(method); makeContentReachable((RefJavaElementImpl)method); makeReachable(methodOwnerClass); } else { if (methodOwnerClass == null || isClassInstantiated(methodOwnerClass)) { myProcessedMethods.add(method); makeContentReachable((RefJavaElementImpl)method); } else { addDelayedMethod(method, methodOwnerClass); } } if (canBeOverridden) { for (RefOverridable reference : method.getDerivedReferences()) { if (reference instanceof RefMethod) { visitMethod(((RefMethod)reference)); } else if (reference instanceof RefFunctionalExpression) { visitFunctionalExpression(((RefFunctionalExpression)reference)); } } } } }