public void processVariants(final PsiScopeProcessor processor) {
    if (processor instanceof JavaCompletionProcessor) {
      final Map<CustomizableReferenceProvider.CustomizationKey, Object> options = getOptions();
      if (options != null
              && (JavaClassReferenceProvider.EXTEND_CLASS_NAMES.getValue(options) != null
                  || JavaClassReferenceProvider.NOT_INTERFACE.getBooleanValue(options)
                  || JavaClassReferenceProvider.CONCRETE.getBooleanValue(options))
          || JavaClassReferenceProvider.CLASS_KIND.getValue(options) != null) {
        ((JavaCompletionProcessor) processor).setCompletionElements(getVariants());
        return;
      }
    }

    PsiScopeProcessor processorToUse = processor;
    if (myInStaticImport) {
      // allows to complete members
      processor.handleEvent(JavaScopeProcessorEvent.CHANGE_LEVEL, null);
    } else {
      if (isDefinitelyStatic()) {
        processor.handleEvent(JavaScopeProcessorEvent.START_STATIC, null);
      }
      processorToUse =
          new PsiScopeProcessor() {
            public boolean execute(PsiElement element, ResolveState state) {
              return !(element instanceof PsiClass || element instanceof PsiPackage)
                  || processor.execute(element, state);
            }

            public <V> V getHint(Key<V> hintKey) {
              return processor.getHint(hintKey);
            }

            public void handleEvent(Event event, Object associated) {
              processor.handleEvent(event, associated);
            }
          };
    }
    super.processVariants(processorToUse);
  }
 @Nullable
 public ClassKind getClassKind() {
   return JavaClassReferenceProvider.CLASS_KIND.getValue(getOptions());
 }