protected void createFollowElementBasedProposals(
     final CompletionParameters parameters, final CompletionResultSet result) {
   boolean _or = false;
   boolean _isEmpty = this.myFollowElementBasedContributors.isEmpty();
   if (_isEmpty) {
     _or = true;
   } else {
     CompletionType _completionType = parameters.getCompletionType();
     boolean _containsKey = this.myFollowElementBasedContributors.containsKey(_completionType);
     boolean _not = (!_containsKey);
     _or = _not;
   }
   if (_or) {
     return;
   }
   Editor _editor = parameters.getEditor();
   int _offset = parameters.getOffset();
   final TokenSet tokenSet = this._tokenSetProvider.getTokenSet(((EditorEx) _editor), _offset);
   CompletionType _completionType_1 = parameters.getCompletionType();
   Map<TokenSet, Multimap<AbstractElement, CompletionProvider<CompletionParameters>>> _get =
       this.myFollowElementBasedContributors.get(_completionType_1);
   final Multimap<AbstractElement, CompletionProvider<CompletionParameters>> element2provider =
       _get.get(tokenSet);
   boolean _equals = Objects.equal(element2provider, null);
   if (_equals) {
     return;
   }
   final Set<AbstractElement> followElements = this.computeFollowElements(parameters);
   final HashSet<CompletionProvider<CompletionParameters>> calledProviders =
       CollectionLiterals.<CompletionProvider<CompletionParameters>>newHashSet();
   Set<AbstractElement> _keySet = element2provider.keySet();
   for (final AbstractElement followElement : _keySet) {
     {
       final ProcessingContext context = new ProcessingContext();
       boolean _contains = followElements.contains(followElement);
       if (_contains) {
         final Collection<CompletionProvider<CompletionParameters>> providers =
             element2provider.get(followElement);
         for (final CompletionProvider<CompletionParameters> provider : providers) {
           boolean _add = calledProviders.add(provider);
           if (_add) {
             provider.addCompletionVariants(parameters, context, result);
             boolean _isStopped = result.isStopped();
             if (_isStopped) {
               return;
             }
           }
         }
       }
     }
   }
 }