override fun getInfo()

in src/com/intellij/idea/plugin/hybris/execution/lineMarker/RefreshProjectRunLineMarkerContributor.kt [39:64]


    override fun getInfo(element: PsiElement): Info? {
        if (element !is XmlToken || element.tokenType != XmlTokenType.XML_ATTRIBUTE_VALUE_TOKEN) return null
        val xmlAttributeValue = PsiTreeUtil.getParentOfType(element, XmlAttributeValue::class.java) ?: return null
        val xmlFile = element.containingFile as? XmlFile ?: return null
        if (xmlAttributeValue.value == HybrisConstants.EXTENSION_NAME_PLATFORM) return null
        val descriptor = ProjectSettingsComponent.getInstance(xmlFile.project).getAvailableExtensions()[xmlAttributeValue.value]
            ?: return null
        if (descriptor.type != ModuleDescriptorType.OOTB && descriptor.type != ModuleDescriptorType.CUSTOM) return null
        val parentTagName = PsiTreeUtil.getParentOfType(xmlAttributeValue, XmlTag::class.java)?.localName
            ?: return null

        val domManager = DomManager.getDomManager(xmlFile.project)
        val module = xmlFile.project.modules
            .find { it.yExtensionName() == xmlAttributeValue.value }

        if (module != null) return null

        if ((parentTagName == Extension.REQUIRES_EXTENSION && domManager.getFileElement(xmlFile, ExtensionInfo::class.java) != null)
            || (parentTagName == Extensions.EXTENSION && domManager.getFileElement(xmlFile, Hybrisconfig::class.java) != null)) {

            val action = ActionManager.getInstance().getAction("File.yRefresh") ?: return null
            return Info(HybrisIcons.Actions.FORCE_REFRESH, arrayOf(action)) { action.templateText }
        }

        return null
    }