@Override
             public void addCompletions(@NotNull CompletionParameters parameters,
                                        @NotNull ProcessingContext context,
                                        @NotNull CompletionResultSet resultSet) {
               int offset = parameters.getOffset() - 1;
               if (isInvalidOffset(parameters.getOriginalFile(), offset)) return;
               TemplateActionContext templateActionContext = TemplateActionContext.create(parameters.getOriginalFile(),
                                                                                          parameters.getEditor(),
                                                                                          offset,
                                                                                          offset, false);
               JavaCodeContextType declaration = TemplateContextTypes.getByClass(JavaCodeContextType.Declaration.class);
               if (!declaration.isInContext(templateActionContext)) return;

               PsiElement element = parameters.getPosition();
               PsiClass targetClass = PsiTreeUtil.getParentOfType(element, PsiClass.class);

               if (!JigsawUtil.checkProviderMethodAccessible(targetClass)) return;

               String className = targetClass.getName();
               if (className == null) return;

               resultSet.addElement(new JigsawProviderLookupElement(targetClass));
             }
@Override
             public void addCompletions(@NotNull CompletionParameters parameters,
                                        @NotNull ProcessingContext context,
                                        @NotNull CompletionResultSet resultSet)