/// <summary>
        ///     This method is redefined in order to get rid of the IsKindAllowed() check at the end.
        /// </summary>
        public override bool IsAvailable(IDataContext dataContext)
        {
            ISolution solution = dataContext.GetData(DataConstants.SOLUTION);

            if (solution == null)
            {
                return(false);
            }

            GeneratorManager generatorManager = GeneratorManager.GetInstance(solution);

            if (generatorManager == null)
            {
                return(false);
            }

            PsiLanguageType languageType = generatorManager.GetPsiLanguageFromContext(dataContext);

            if (languageType == null)
            {
                return(false);
            }

            var generatorContextFactory = LanguageManager.Instance.TryGetService <IGeneratorContextFactory>(languageType);

            return(generatorContextFactory != null);
        }