@NotNull
  @Override
  public ExtensionPoint.Status getExtensionPointStatus() {
    return new Status() {

      @Override
      public Kind getKind() {
        final PsiClass effectiveClass = getEffectiveClass();
        if (effectiveClass == null) {
          return Kind.UNRESOLVED_CLASS;
        }

        if (ADDITIONAL_DEPRECATED_EP.containsKey(getEffectiveQualifiedName())) {
          return Kind.ADDITIONAL_DEPRECATED;
        }

        if (effectiveClass.hasAnnotation(ApiStatus.Internal.class.getCanonicalName())) {
          return Kind.INTERNAL_API;
        }

        if (effectiveClass.hasAnnotation(ApiStatus.ScheduledForRemoval.class.getCanonicalName())) {
          return Kind.SCHEDULED_FOR_REMOVAL_API;
        }

        if (effectiveClass.hasAnnotation(ApiStatus.Experimental.class.getCanonicalName())) {
          return Kind.EXPERIMENTAL_API;
        }

        if (effectiveClass.hasAnnotation(ApiStatus.Obsolete.class.getCanonicalName())) {
          return Kind.OBSOLETE;
        }

        if (effectiveClass.isDeprecated()) {
          PsiAnnotation deprecatedAnno = effectiveClass.getAnnotation(CommonClassNames.JAVA_LANG_DEPRECATED);
          if (deprecatedAnno != null &&
              AnnotationUtil.getBooleanAttributeValue(deprecatedAnno, "forRemoval") == Boolean.TRUE) {
            return Kind.SCHEDULED_FOR_REMOVAL_API;
          }

          return Kind.DEPRECATED;
        }

        return Kind.DEFAULT;
      }

      @Nullable
      @Override
      public String getAdditionalData() {
        final Kind kind = getKind();
        if (kind == Kind.ADDITIONAL_DEPRECATED) {
          return StringUtil.nullize(ADDITIONAL_DEPRECATED_EP.get(getEffectiveQualifiedName()));
        }

        if (kind == Kind.SCHEDULED_FOR_REMOVAL_API) {
          final PsiClass effectiveClass = getEffectiveClass();
          assert effectiveClass != null;
          final PsiAnnotation scheduledAnno = effectiveClass.getAnnotation(ApiStatus.ScheduledForRemoval.class.getCanonicalName());
          if (scheduledAnno == null) return null;
          return AnnotationUtil.getDeclaredStringAttributeValue(scheduledAnno, "inVersion");
        }

        return null;
      }
    };
  }
@NotNull
  @Override
  public ExtensionPoint.Status getExtensionPointStatus()