From c17276feb3e79b0b3f2b3b542045fce423bcae08 Mon Sep 17 00:00:00 2001
From: Jonathan Lermitage
Date: Mon, 8 Jan 2024 18:44:25 +0100
Subject: [PATCH] well played...
---
CHANGELOG.md | 956 -----------
CONTRIBUTION.md | 36 -
KNOWN_ISSUES.md | 1 -
Makefile | 123 --
README.md | 47 +-
build.gradle.kts | 537 -------
docs/DEV_FAQ.md | 17 -
docs/LICENSE_FAQ.md | 3 +
gradle.properties | 42 -
gradlew | 249 ---
gradlew.bat | 92 --
misc/pluginIcon.free.svg | 1 -
misc/pluginIcon.lifetime.svg | 1 -
settings.gradle.kts | 10 -
.../extra/icons/BaseIconProvider.java | 383 -----
.../extra/icons/ExtraIconPatcher.java | 133 --
.../extra/icons/ExtraIconProvider.java | 1401 -----------------
.../intellij/extra/icons/Globals.java | 14 -
.../intellij/extra/icons/IconType.java | 13 -
.../lermitage/intellij/extra/icons/Model.java | 418 -----
.../intellij/extra/icons/ModelCondition.java | 400 -----
.../intellij/extra/icons/ModelTag.java | 39 -
.../intellij/extra/icons/ModelType.java | 47 -
.../intellij/extra/icons/UIType.java | 8 -
.../extra/icons/UITypeIconsPreference.java | 9 -
.../EnablerServicesProjectActivity.java | 25 -
.../ExtraIconsLicenseCheckIDEActivity.java | 130 --
.../HintNotificationsProjectActivity.java | 124 --
.../RefreshIconsListenerProjectActivity.java | 128 --
.../VFSChangesListenersProjectActivity.java | 64 -
.../intellij/extra/icons/cfg/IconPack.java | 48 -
.../extra/icons/cfg/SettingsForm.form | 639 --------
.../extra/icons/cfg/SettingsForm.java | 871 ----------
.../cfg/dialogs/AskSingleTextDialog.form | 54 -
.../cfg/dialogs/AskSingleTextDialog.java | 41 -
.../dialogs/IconPackUninstallerDialog.form | 57 -
.../dialogs/IconPackUninstallerDialog.java | 59 -
.../cfg/dialogs/ModelConditionDialog.form | 167 --
.../cfg/dialogs/ModelConditionDialog.java | 284 ----
.../extra/icons/cfg/dialogs/ModelDialog.form | 181 ---
.../extra/icons/cfg/dialogs/ModelDialog.java | 497 ------
.../models/PluginIconsSettingsTableModel.java | 52 -
.../models/UserIconsSettingsTableModel.java | 45 -
.../providers/IDEConfigurableProvider.java | 18 -
.../ProjectConfigurableProvider.java | 25 -
.../cfg/services/SettingsIDEService.java | 112 --
.../cfg/services/SettingsProjectService.java | 52 -
.../icons/cfg/services/SettingsService.java | 122 --
.../icons/enablers/AbstractFolderEnabler.java | 28 -
.../enablers/AbstractInFolderEnabler.java | 186 ---
.../extra/icons/enablers/IconEnabler.java | 15 -
.../icons/enablers/IconEnablerProvider.java | 33 -
.../extra/icons/enablers/IconEnablerType.java | 27 -
.../GitSubmoduleFolderEnablerService.java | 137 --
.../services/HelmFolderEnablerService.java | 28 -
.../InAngularFolderEnablerService.java | 28 -
.../InFlutterFolderEnablerService.java | 48 -
.../InGraphQLFolderEnablerService.java | 34 -
.../services/InHelmFolderEnablerService.java | 28 -
.../InWritersideFolderEnablerService.java | 28 -
.../icons/lic/ExtraIconsLicenseCheck.java | 324 ----
.../icons/lic/ExtraIconsLicenseStatus.java | 17 -
.../extra/icons/lic/ExtraIconsPluginType.java | 59 -
.../icons/messaging/RefreshIconsNotifier.java | 31 -
.../RefreshIconsNotifierService.java | 55 -
.../icons/services/FacetsFinderService.java | 58 -
.../extra/icons/utils/Base64Utils.java | 14 -
.../extra/icons/utils/BundledIcon.java | 9 -
.../icons/utils/ComboBoxWithImageItem.java | 41 -
.../utils/ComboBoxWithImageRenderer.java | 77 -
.../utils/ExtraIconsErrorReportSubmitter.java | 176 ---
.../extra/icons/utils/FileChooserUtils.java | 77 -
.../intellij/extra/icons/utils/I18nUtils.java | 59 -
.../intellij/extra/icons/utils/IJUtils.java | 101 --
.../extra/icons/utils/IconPackUtils.java | 44 -
.../intellij/extra/icons/utils/IconUtils.java | 218 ---
.../intellij/extra/icons/utils/OS.java | 26 -
.../extra/icons/utils/ProjectUtils.java | 37 -
src/main/resources/ExtraIconsI18n.properties | 160 --
.../resources/ExtraIconsI18n_zh.properties | 163 --
src/main/resources/META-INF/plugin.xml | 125 --
src/main/resources/META-INF/pluginIcon.svg | 1 -
src/main/resources/extra-icons/7zip.svg | 1 -
src/main/resources/extra-icons/aac.svg | 1 -
src/main/resources/extra-icons/aac_dark.svg | 1 -
.../resources/extra-icons/allcontributors.svg | 1 -
.../extra-icons/allcontributors_dark.svg | 1 -
src/main/resources/extra-icons/android.svg | 1 -
.../resources/extra-icons/android_alt.svg | 1 -
.../extra-icons/angular-component-test.svg | 1 -
.../extra-icons/angular-component.svg | 1 -
.../extra-icons/angular-controller-test.svg | 1 -
.../extra-icons/angular-controller.svg | 1 -
.../extra-icons/angular-directive-test.svg | 1 -
.../extra-icons/angular-directive.svg | 1 -
.../extra-icons/angular-guard-test.svg | 1 -
.../resources/extra-icons/angular-guard.svg | 1 -
.../extra-icons/angular-module-test.svg | 1 -
.../resources/extra-icons/angular-module.svg | 1 -
.../extra-icons/angular-pipe-test.svg | 1 -
.../resources/extra-icons/angular-pipe.svg | 1 -
.../extra-icons/angular-resolver-test.svg | 1 -
.../extra-icons/angular-resolver.svg | 1 -
.../extra-icons/angular-service-test.svg | 1 -
.../resources/extra-icons/angular-service.svg | 1 -
src/main/resources/extra-icons/angular2.svg | 1 -
.../extra-icons/angular_renaissance.svg | 1 -
src/main/resources/extra-icons/apk.svg | 1 -
src/main/resources/extra-icons/apple.svg | 1 -
src/main/resources/extra-icons/appveyor.svg | 1 -
src/main/resources/extra-icons/archive.svg | 1 -
src/main/resources/extra-icons/archunit.svg | 1 -
src/main/resources/extra-icons/asciidoc.svg | 1 -
.../resources/extra-icons/asciidoc_alt.svg | 1 -
src/main/resources/extra-icons/authors.svg | 1 -
.../resources/extra-icons/authors_alt.svg | 1 -
.../resources/extra-icons/authors_alt2.svg | 1 -
.../resources/extra-icons/authors_alt3.svg | 1 -
.../resources/extra-icons/authors_alt4.svg | 1 -
src/main/resources/extra-icons/avro.svg | 1 -
src/main/resources/extra-icons/avro_dark.svg | 1 -
src/main/resources/extra-icons/babel.svg | 1 -
src/main/resources/extra-icons/babel_alt.svg | 1 -
src/main/resources/extra-icons/babel_dark.svg | 1 -
src/main/resources/extra-icons/backup.svg | 1 -
src/main/resources/extra-icons/bamboo.svg | 1 -
src/main/resources/extra-icons/bash.svg | 1 -
src/main/resources/extra-icons/bash_dark.svg | 1 -
src/main/resources/extra-icons/berkshelf.svg | 1 -
.../resources/extra-icons/berkshelflock.svg | 1 -
src/main/resources/extra-icons/bicep.svg | 1 -
src/main/resources/extra-icons/bicep_alt.svg | 1 -
src/main/resources/extra-icons/bicep_alt2.svg | 1 -
src/main/resources/extra-icons/binary.svg | 1 -
src/main/resources/extra-icons/binary_alt.svg | 1 -
.../resources/extra-icons/binary_alt2.svg | 1 -
.../extra-icons/binary_alt2_dark.svg | 1 -
src/main/resources/extra-icons/bitbucket.svg | 1 -
src/main/resources/extra-icons/bitnami.svg | 1 -
.../resources/extra-icons/bitnami_dark.svg | 1 -
src/main/resources/extra-icons/bower.svg | 1 -
.../resources/extra-icons/browserslist.svg | 1 -
.../extra-icons/browserslist_dark.svg | 1 -
src/main/resources/extra-icons/bug.svg | 1 -
src/main/resources/extra-icons/build.svg | 1 -
src/main/resources/extra-icons/c.svg | 1 -
src/main/resources/extra-icons/cache2k.svg | 17 -
src/main/resources/extra-icons/caddy.svg | 1 -
src/main/resources/extra-icons/cargo.svg | 1 -
src/main/resources/extra-icons/cassandra.svg | 1 -
.../resources/extra-icons/cassandra_dark.svg | 1 -
.../resources/extra-icons/certificate.svg | 1 -
.../resources/extra-icons/certificate_alt.svg | 1 -
.../extra-icons/certificate_alt_dark.svg | 1 -
src/main/resources/extra-icons/changelog.svg | 1 -
.../resources/extra-icons/changelog_dark.svg | 1 -
src/main/resources/extra-icons/circleci.svg | 1 -
.../resources/extra-icons/circleci_dark.svg | 1 -
src/main/resources/extra-icons/cirrus.svg | 1 -
.../resources/extra-icons/cirrus_dark.svg | 1 -
src/main/resources/extra-icons/cmd.svg | 1 -
src/main/resources/extra-icons/cmd_dark.svg | 1 -
src/main/resources/extra-icons/codacy.svg | 1 -
.../resources/extra-icons/codacy_dark.svg | 1 -
.../resources/extra-icons/codeception.svg | 1 -
.../extra-icons/codeception_dark.svg | 1 -
src/main/resources/extra-icons/codecov.svg | 1 -
src/main/resources/extra-icons/codefresh.svg | 1 -
.../resources/extra-icons/codefresh_dark.svg | 1 -
src/main/resources/extra-icons/codeship.svg | 1 -
.../resources/extra-icons/codeship_alt.png | Bin 667 -> 0 bytes
.../resources/extra-icons/codeship_alt@2x.png | Bin 1439 -> 0 bytes
.../extra-icons/codeship_alt@2x_dark.png | Bin 1500 -> 0 bytes
.../extra-icons/codeship_alt_dark.png | Bin 574 -> 0 bytes
.../resources/extra-icons/codeship_dark.svg | 1 -
src/main/resources/extra-icons/commitlint.svg | 1 -
src/main/resources/extra-icons/composer.svg | 1 -
.../resources/extra-icons/composer_alt.svg | 1 -
src/main/resources/extra-icons/config.svg | 1 -
src/main/resources/extra-icons/contact.svg | 1 -
.../resources/extra-icons/contributing.svg | 1 -
.../extra-icons/contributing_alt.png | Bin 543 -> 0 bytes
.../extra-icons/contributing_alt2.svg | 1 -
.../extra-icons/contributing_alt@2x.png | Bin 1150 -> 0 bytes
src/main/resources/extra-icons/cookie.svg | 1 -
.../resources/extra-icons/cookie_dark.svg | 1 -
src/main/resources/extra-icons/coveragerc.svg | 1 -
src/main/resources/extra-icons/coveralls.svg | 1 -
src/main/resources/extra-icons/cpp.svg | 1 -
src/main/resources/extra-icons/crowdin.svg | 1 -
src/main/resources/extra-icons/css-map.svg | 1 -
src/main/resources/extra-icons/css.svg | 1 -
src/main/resources/extra-icons/csv_alt.svg | 1 -
src/main/resources/extra-icons/cypress.svg | 1 -
src/main/resources/extra-icons/deb.svg | 1 -
src/main/resources/extra-icons/deb_dark.svg | 1 -
src/main/resources/extra-icons/deno.svg | 1 -
src/main/resources/extra-icons/dependabot.svg | 1 -
.../resources/extra-icons/dependabot_alt.svg | 1 -
.../extra-icons/dependabot_alt_dark.svg | 1 -
src/main/resources/extra-icons/deptective.svg | 1 -
src/main/resources/extra-icons/detekt.svg | 1 -
src/main/resources/extra-icons/docker_.svg | 1 -
src/main/resources/extra-icons/docker_alt.svg | 1 -
.../resources/extra-icons/docker_alt2.svg | 1 -
.../resources/extra-icons/dockercompose_.svg | 1 -
.../extra-icons/dockercompose_alt.svg | 1 -
.../extra-icons/dockercompose_alt2.svg | 1 -
.../resources/extra-icons/dockerignore.svg | 1 -
.../extra-icons/dockerignore_alt.svg | 1 -
.../extra-icons/dockerignore_alt2.svg | 1 -
.../extra-icons/dockerignore_alt2_dark.svg | 1 -
.../extra-icons/dockerignore_dark.svg | 1 -
src/main/resources/extra-icons/drawio.svg | 1 -
src/main/resources/extra-icons/drawio_alt.svg | 1 -
.../resources/extra-icons/drawio_alt2.png | Bin 591 -> 0 bytes
.../resources/extra-icons/drawio_alt2@2x.png | Bin 1216 -> 0 bytes
.../resources/extra-icons/editorconfig.svg | 1 -
.../extra-icons/editorconfig_alt.svg | 1 -
.../extra-icons/editorconfig_alt2.svg | 1 -
.../extra-icons/editorconfig_alt2_dark.svg | 1 -
.../resources/extra-icons/elastic-cerebro.svg | 1 -
.../extra-icons/elastic-cerebro_dark.svg | 1 -
.../resources/extra-icons/elasticsearch.svg | 1 -
.../extra-icons/elasticsearch_dark.svg | 1 -
src/main/resources/extra-icons/elixir.svg | 1 -
src/main/resources/extra-icons/email.svg | 1 -
src/main/resources/extra-icons/env.svg | 1 -
src/main/resources/extra-icons/env_alt.svg | 1 -
src/main/resources/extra-icons/env_alt2.svg | 1 -
src/main/resources/extra-icons/epub.svg | 1 -
src/main/resources/extra-icons/eslint.svg | 1 -
src/main/resources/extra-icons/expo.svg | 1 -
src/main/resources/extra-icons/expo_dark.svg | 1 -
.../resources/extra-icons/expo_folder.svg | 1 -
src/main/resources/extra-icons/faq.svg | 1 -
src/main/resources/extra-icons/faq_alt.svg | 1 -
src/main/resources/extra-icons/faq_alt2.svg | 1 -
src/main/resources/extra-icons/faq_alt3.svg | 1 -
.../resources/extra-icons/faq_alt3_dark.svg | 1 -
src/main/resources/extra-icons/faq_alt4.svg | 1 -
.../extra-icons/flutter-analysisoptions.svg | 1 -
.../extra-icons/flutter-metadata.svg | 1 -
src/main/resources/extra-icons/flutter.svg | 1 -
.../resources/extra-icons/flutterlock.svg | 1 -
.../extra-icons/flutterlock_dark.svg | 1 -
src/main/resources/extra-icons/flyway.svg | 1 -
src/main/resources/extra-icons/flyway_alt.svg | 1 -
.../resources/extra-icons/flyway_alt2.png | Bin 1302 -> 0 bytes
.../resources/extra-icons/flyway_alt2@2x.png | Bin 1483 -> 0 bytes
.../extra-icons/flyway_alt2@2x_dark.png | Bin 1497 -> 0 bytes
.../extra-icons/flyway_alt2_dark.png | Bin 1304 -> 0 bytes
.../resources/extra-icons/flyway_alt_dark.svg | 1 -
.../resources/extra-icons/flyway_dark.svg | 1 -
.../resources/extra-icons/folder_circleci.svg | 1 -
src/main/resources/extra-icons/folder_db2.svg | 1 -
.../extra-icons/folder_dependabot.svg | 1 -
.../extra-icons/folder_dependabot_alt.svg | 1 -
.../resources/extra-icons/folder_docker.svg | 1 -
.../resources/extra-icons/folder_fleet.svg | 1 -
.../resources/extra-icons/folder_flyway.svg | 1 -
.../resources/extra-icons/folder_github.svg | 1 -
.../resources/extra-icons/folder_gitlab.svg | 1 -
.../resources/extra-icons/folder_gradle.svg | 1 -
src/main/resources/extra-icons/folder_h2.svg | 1 -
.../resources/extra-icons/folder_hsqldb.svg | 1 -
.../resources/extra-icons/folder_idea.svg | 1 -
.../resources/extra-icons/folder_jpabuddy.svg | 1 -
.../extra-icons/folder_jpabuddy_alt.svg | 1 -
.../extra-icons/folder_jpabuddy_alt2.svg | 1 -
.../extra-icons/folder_jpabuddy_alt3.svg | 1 -
.../extra-icons/folder_liquibase.svg | 1 -
.../resources/extra-icons/folder_mariadb.svg | 1 -
.../extra-icons/folder_mariadb_dark.svg | 1 -
.../resources/extra-icons/folder_mergify.svg | 1 -
.../resources/extra-icons/folder_mvnw.svg | 1 -
.../resources/extra-icons/folder_mysql.svg | 1 -
.../extra-icons/folder_mysql_dark.svg | 1 -
.../extra-icons/folder_node_modules.svg | 1 -
.../extra-icons/folder_node_modules_alt.svg | 1 -
.../resources/extra-icons/folder_nuget.svg | 1 -
.../resources/extra-icons/folder_oracle.svg | 1 -
.../extra-icons/folder_os_android.svg | 1 -
.../extra-icons/folder_os_android_dark.svg | 1 -
.../resources/extra-icons/folder_os_ios.svg | 1 -
.../extra-icons/folder_os_ios_dark.svg | 1 -
.../resources/extra-icons/folder_os_linux.svg | 1 -
.../extra-icons/folder_os_linux_dark.svg | 1 -
.../resources/extra-icons/folder_os_macos.svg | 1 -
.../extra-icons/folder_os_macos_dark.svg | 1 -
.../resources/extra-icons/folder_os_web.svg | 1 -
.../extra-icons/folder_os_web_dark.svg | 1 -
.../extra-icons/folder_os_windows.svg | 1 -
.../extra-icons/folder_os_windows_dark.svg | 1 -
.../extra-icons/folder_postgresql.svg | 1 -
.../extra-icons/folder_pytest_cache.svg | 1 -
.../extra-icons/folder_python_venv.svg | 1 -
.../extra-icons/folder_semaphoreci.svg | 1 -
.../resources/extra-icons/folder_sqlite.svg | 1 -
.../extra-icons/folder_sqlserver.svg | 1 -
.../extra-icons/folder_storybook.svg | 1 -
.../resources/extra-icons/folder_teamcity.svg | 1 -
src/main/resources/extra-icons/folder_tmp.svg | 1 -
.../resources/extra-icons/folder_vscode.svg | 1 -
src/main/resources/extra-icons/form.svg | 1 -
src/main/resources/extra-icons/form_dark.svg | 1 -
src/main/resources/extra-icons/gatling.svg | 1 -
.../resources/extra-icons/generated_pom.svg | 1 -
.../extra-icons/generated_pom_alt.svg | 1 -
src/main/resources/extra-icons/git.svg | 1 -
.../resources/extra-icons/git_submodule.svg | 1 -
.../extra-icons/git_submodule_alt.svg | 1 -
.../resources/extra-icons/github_action.svg | 1 -
.../extra-icons/github_action_dark.svg | 1 -
src/main/resources/extra-icons/gitlab.svg | 1 -
src/main/resources/extra-icons/gitlab_alt.svg | 1 -
.../resources/extra-icons/gitlab_next.svg | 1 -
src/main/resources/extra-icons/gitpod.svg | 1 -
src/main/resources/extra-icons/glowroot.svg | 1 -
src/main/resources/extra-icons/gocd.svg | 1 -
src/main/resources/extra-icons/gocd_dark.svg | 1 -
.../extra-icons/golangarchlinter.svg | 1 -
src/main/resources/extra-icons/gomod.svg | 1 -
src/main/resources/extra-icons/gomod_alt.svg | 1 -
src/main/resources/extra-icons/goreleaser.svg | 1 -
.../resources/extra-icons/goreleaser_alt.svg | 1 -
src/main/resources/extra-icons/gradle.svg | 1 -
.../resources/extra-icons/gradle_dark.svg | 1 -
.../resources/extra-icons/gradle_kotlin.svg | 1 -
.../extra-icons/gradle_kotlin_colored.svg | 1 -
.../gradle_kotlin_colored_dark.svg | 1 -
.../extra-icons/gradle_kotlin_dark.svg | 1 -
.../resources/extra-icons/gradle_lock.svg | 1 -
.../extra-icons/gradle_lock_dark.svg | 1 -
src/main/resources/extra-icons/gradlew.svg | 1 -
.../resources/extra-icons/gradlew_dark.svg | 1 -
src/main/resources/extra-icons/grafana.svg | 1 -
src/main/resources/extra-icons/graphql.svg | 1 -
.../resources/extra-icons/graphql_config.svg | 1 -
.../extra-icons/graphql_config_dark.svg | 1 -
.../resources/extra-icons/graphql_dark.svg | 1 -
.../resources/extra-icons/graphql_schema.svg | 1 -
.../extra-icons/graphql_schema_dark.svg | 1 -
src/main/resources/extra-icons/grunt.svg | 1 -
src/main/resources/extra-icons/h.svg | 1 -
src/main/resources/extra-icons/hadolint.svg | 1 -
.../resources/extra-icons/hadolint_dark.svg | 1 -
src/main/resources/extra-icons/haxe.svg | 1 -
src/main/resources/extra-icons/haxehxml.svg | 1 -
src/main/resources/extra-icons/helm.svg | 1 -
src/main/resources/extra-icons/helmChart.svg | 1 -
.../extra-icons/helmChartsDirectory.svg | 1 -
.../resources/extra-icons/helmDirectory.svg | 1 -
src/main/resources/extra-icons/helmNotes.svg | 1 -
.../extra-icons/helmRequirementsYaml.svg | 1 -
.../extra-icons/helmTemplatesDirectory.svg | 1 -
.../helmTemplatesTestDirectory.svg | 1 -
.../extra-icons/helmUndeployable.svg | 1 -
src/main/resources/extra-icons/helmValues.svg | 1 -
src/main/resources/extra-icons/helmlogo.svg | 1 -
.../resources/extra-icons/helmlogo_alt.svg | 1 -
src/main/resources/extra-icons/hibernate.svg | 1 -
src/main/resources/extra-icons/htaccess.svg | 1 -
src/main/resources/extra-icons/html5.svg | 1 -
src/main/resources/extra-icons/html5_alt.svg | 1 -
src/main/resources/extra-icons/html5_alt2.svg | 1 -
.../resources/extra-icons/html5_alt2_dark.svg | 1 -
src/main/resources/extra-icons/http.png | Bin 454 -> 0 bytes
src/main/resources/extra-icons/http@2x.png | Bin 1179 -> 0 bytes
.../resources/extra-icons/http@2x_dark.png | Bin 1330 -> 0 bytes
src/main/resources/extra-icons/http_alt.svg | 1 -
src/main/resources/extra-icons/http_dark.png | Bin 513 -> 0 bytes
.../extra-icons/ide/abstractException_.svg | 1 -
src/main/resources/extra-icons/ide/canary.svg | 1 -
src/main/resources/extra-icons/ide/chrome.svg | 1 -
src/main/resources/extra-icons/ide/edge.svg | 1 -
.../resources/extra-icons/ide/enumKotlin_.svg | 1 -
.../extra-icons/ide/enumKotlin_alt.svg | 1 -
.../extra-icons/ide/enumKotlin_alt2.svg | 1 -
src/main/resources/extra-icons/ide/enum_.svg | 1 -
.../resources/extra-icons/ide/enum_alt.svg | 1 -
.../resources/extra-icons/ide/enum_alt2.svg | 1 -
.../extra-icons/ide/exceptionClass_.svg | 1 -
.../resources/extra-icons/ide/explorer.svg | 1 -
.../resources/extra-icons/ide/firefox.svg | 1 -
.../extra-icons/ide/firefoxDeveloper.svg | 1 -
src/main/resources/extra-icons/ide/opera.svg | 1 -
src/main/resources/extra-icons/ide/safari.svg | 1 -
.../resources/extra-icons/ide/vivaldi.svg | 1 -
src/main/resources/extra-icons/ide/yaml_.svg | 1 -
.../resources/extra-icons/ide/yaml__dark.svg | 1 -
.../resources/extra-icons/ide/yaml_alt.svg | 1 -
.../resources/extra-icons/ide/yaml_alt2.svg | 1 -
.../extra-icons/ide/yaml_alt2_dark.svg | 1 -
src/main/resources/extra-icons/imgbot.svg | 1 -
.../resources/extra-icons/imgbot_dark.svg | 1 -
src/main/resources/extra-icons/jar.svg | 1 -
src/main/resources/extra-icons/jar_dark.svg | 1 -
src/main/resources/extra-icons/java.svg | 1 -
src/main/resources/extra-icons/java_alt.png | Bin 655 -> 0 bytes
.../resources/extra-icons/java_alt@2x.png | Bin 1526 -> 0 bytes
.../extra-icons/java_alt@2x_dark.png | Bin 1337 -> 0 bytes
.../resources/extra-icons/java_alt_dark.png | Bin 645 -> 0 bytes
.../resources/extra-icons/javascript-map.svg | 1 -
.../extra-icons/javascript-map_dark.svg | 1 -
src/main/resources/extra-icons/javascript.svg | 1 -
.../resources/extra-icons/javascript_alt.svg | 1 -
.../extra-icons/javascript_alt_dark.svg | 1 -
.../resources/extra-icons/javascript_dark.svg | 1 -
src/main/resources/extra-icons/jenkins.svg | 1 -
.../resources/extra-icons/jenkins_alt.png | Bin 857 -> 0 bytes
.../resources/extra-icons/jenkins_alt@2x.png | Bin 2186 -> 0 bytes
src/main/resources/extra-icons/jest.svg | 1 -
src/main/resources/extra-icons/jest_dark.svg | 1 -
src/main/resources/extra-icons/jetbrains.svg | 1 -
src/main/resources/extra-icons/jfr.svg | 1 -
src/main/resources/extra-icons/jfr_dark.svg | 1 -
src/main/resources/extra-icons/jgitver.svg | 1 -
.../resources/extra-icons/jgitver_dark.svg | 1 -
src/main/resources/extra-icons/jinja.svg | 1 -
src/main/resources/extra-icons/jinja_dark.svg | 1 -
src/main/resources/extra-icons/jitpack.svg | 1 -
.../resources/extra-icons/jitpack_dark.svg | 1 -
src/main/resources/extra-icons/jsbeautify.svg | 1 -
.../resources/extra-icons/jsbeautify_alt.svg | 1 -
src/main/resources/extra-icons/jsconfig.svg | 1 -
src/main/resources/extra-icons/jshint.svg | 1 -
.../resources/extra-icons/jshint_dark.svg | 1 -
src/main/resources/extra-icons/json.svg | 1 -
src/main/resources/extra-icons/jsx.svg | 1 -
src/main/resources/extra-icons/junit5.png | Bin 728 -> 0 bytes
src/main/resources/extra-icons/junit5@2x.png | Bin 1783 -> 0 bytes
.../resources/extra-icons/junit5@2x_dark.png | Bin 1802 -> 0 bytes
.../resources/extra-icons/junit5_dark.png | Bin 725 -> 0 bytes
.../extra-icons/junit5_transparent.svg | 1 -
.../resources/extra-icons/junit5_white.svg | 1 -
src/main/resources/extra-icons/just.svg | 1 -
src/main/resources/extra-icons/just_alt.svg | 1 -
.../resources/extra-icons/just_alt_dark.svg | 1 -
src/main/resources/extra-icons/just_dark.svg | 1 -
src/main/resources/extra-icons/karate.svg | 1 -
.../resources/extra-icons/karate_dark.svg | 1 -
src/main/resources/extra-icons/karma.svg | 1 -
src/main/resources/extra-icons/keep.svg | 1 -
src/main/resources/extra-icons/keepass.svg | 1 -
.../resources/extra-icons/keepass_alt.png | Bin 639 -> 0 bytes
.../resources/extra-icons/keepass_alt2.svg | 1 -
.../resources/extra-icons/keepass_alt@2x.png | Bin 1589 -> 0 bytes
.../extra-icons/keepass_alt@2x_dark.png | Bin 1076 -> 0 bytes
.../extra-icons/keepass_alt_dark.png | Bin 622 -> 0 bytes
.../resources/extra-icons/keepass_dark.svg | 1 -
src/main/resources/extra-icons/kibana.svg | 1 -
src/main/resources/extra-icons/kubernetes.svg | 1 -
.../resources/extra-icons/kubernetes_alt.svg | 1 -
.../resources/extra-icons/kubernetes_alt2.svg | 1 -
.../extra-icons/kubernetes_alt2_dark.svg | 1 -
.../extra-icons/kubernetes_alt_dark.svg | 1 -
.../resources/extra-icons/kubernetes_dark.svg | 1 -
src/main/resources/extra-icons/kustomize.svg | 1 -
.../resources/extra-icons/kustomize_alt.svg | 1 -
src/main/resources/extra-icons/lerna.svg | 1 -
src/main/resources/extra-icons/lerna_dark.svg | 1 -
src/main/resources/extra-icons/less.svg | 1 -
src/main/resources/extra-icons/less_dark.svg | 1 -
src/main/resources/extra-icons/lgtm.svg | 1 -
src/main/resources/extra-icons/lgtm_alt.svg | 1 -
src/main/resources/extra-icons/license.svg | 1 -
.../resources/extra-icons/license_alt.png | Bin 707 -> 0 bytes
.../resources/extra-icons/license_alt@2x.png | Bin 1648 -> 0 bytes
.../extra-icons/license_alt@2x_dark.png | Bin 1569 -> 0 bytes
.../extra-icons/license_alt_dark.png | Bin 681 -> 0 bytes
.../resources/extra-icons/license_dark.svg | 1 -
src/main/resources/extra-icons/lighttpd.svg | 1 -
src/main/resources/extra-icons/liquibase.svg | 1 -
.../resources/extra-icons/liquibase_alt.svg | 1 -
.../extra-icons/liquibase_alt_dark.svg | 1 -
.../resources/extra-icons/liquibase_dark.svg | 1 -
src/main/resources/extra-icons/log4j.svg | 1 -
src/main/resources/extra-icons/log4j_dark.svg | 1 -
src/main/resources/extra-icons/logback.svg | 1 -
.../resources/extra-icons/logback_dark.svg | 1 -
src/main/resources/extra-icons/logstash.svg | 1 -
src/main/resources/extra-icons/lombok.svg | 1 -
src/main/resources/extra-icons/markdown.svg | 1 -
.../resources/extra-icons/markdown_alt.svg | 1 -
.../resources/extra-icons/markdown_alt2.svg | 1 -
.../resources/extra-icons/markdown_alt3.svg | 1 -
.../extra-icons/markdown_alt3_dark.svg | 1 -
src/main/resources/extra-icons/matroska.svg | 1 -
.../resources/extra-icons/matroska_dark.svg | 1 -
src/main/resources/extra-icons/mdx.svg | 1 -
src/main/resources/extra-icons/mdx_alt.svg | 1 -
src/main/resources/extra-icons/mdx_alt2.svg | 1 -
.../resources/extra-icons/mdx_alt_dark.svg | 1 -
src/main/resources/extra-icons/mdx_dark.svg | 1 -
src/main/resources/extra-icons/mergify.svg | 1 -
src/main/resources/extra-icons/mermaid.svg | 1 -
src/main/resources/extra-icons/metro.svg | 1 -
src/main/resources/extra-icons/mindmap.svg | 1 -
src/main/resources/extra-icons/mkdocs.svg | 1 -
.../resources/extra-icons/mkdocs_dark.svg | 1 -
src/main/resources/extra-icons/mockk.svg | 1 -
src/main/resources/extra-icons/moduleinfo.svg | 1 -
.../resources/extra-icons/moduleinfo_alt.svg | 1 -
.../extra-icons/moduleinfo_alt_dark.svg | 1 -
.../resources/extra-icons/moduleinfo_dark.svg | 1 -
src/main/resources/extra-icons/mongodb.svg | 1 -
.../resources/extra-icons/monkey's_audio.svg | 1 -
src/main/resources/extra-icons/mpeg.svg | 1 -
src/main/resources/extra-icons/mpeg_dark.svg | 1 -
src/main/resources/extra-icons/msazure.svg | 1 -
src/main/resources/extra-icons/msexe.svg | 1 -
src/main/resources/extra-icons/muse.svg | 1 -
src/main/resources/extra-icons/mvnw.svg | 1 -
src/main/resources/extra-icons/mvnw_dark.svg | 1 -
src/main/resources/extra-icons/my.svg | 1 -
.../resources/extra-icons/mysqlworkbench.svg | 1 -
src/main/resources/extra-icons/nestjs.svg | 1 -
.../resources/extra-icons/nestjs_adapter.svg | 1 -
.../extra-icons/nestjs_controller.svg | 1 -
.../extra-icons/nestjs_controller_test.svg | 1 -
.../extra-icons/nestjs_decorator.svg | 1 -
src/main/resources/extra-icons/nestjs_dto.svg | 1 -
.../resources/extra-icons/nestjs_entity.svg | 1 -
.../resources/extra-icons/nestjs_filter.svg | 1 -
.../resources/extra-icons/nestjs_gateway.svg | 1 -
.../resources/extra-icons/nestjs_guard.svg | 1 -
.../extra-icons/nestjs_interceptor.svg | 1 -
.../extra-icons/nestjs_middleware.svg | 1 -
.../resources/extra-icons/nestjs_model.svg | 1 -
.../resources/extra-icons/nestjs_module.svg | 1 -
.../resources/extra-icons/nestjs_pipe.svg | 1 -
.../resources/extra-icons/nestjs_service.svg | 1 -
.../extra-icons/nestjs_service_test.svg | 1 -
src/main/resources/extra-icons/netlify.svg | 1 -
src/main/resources/extra-icons/newui/7zip.svg | 1 -
.../resources/extra-icons/newui/archive.svg | 1 -
.../extra-icons/newui/archive_dark.svg | 1 -
src/main/resources/extra-icons/newui/avro.svg | 1 -
.../resources/extra-icons/newui/avro_dark.svg | 1 -
src/main/resources/extra-icons/newui/c.svg | 1 -
.../resources/extra-icons/newui/c_dark.svg | 1 -
.../resources/extra-icons/newui/config.svg | 1 -
.../extra-icons/newui/config_dark.svg | 1 -
src/main/resources/extra-icons/newui/cpp.svg | 1 -
.../resources/extra-icons/newui/cpp_dark.svg | 1 -
.../extra-icons/newui/folder_db2.svg | 1 -
.../extra-icons/newui/folder_db2_dark.svg | 1 -
.../extra-icons/newui/folder_fleet.svg | 1 -
.../extra-icons/newui/folder_fleet_dark.svg | 1 -
.../resources/extra-icons/newui/folder_h2.svg | 1 -
.../extra-icons/newui/folder_h2_dark.svg | 1 -
.../extra-icons/newui/folder_hsqldb.svg | 1 -
.../extra-icons/newui/folder_hsqldb_dark.svg | 1 -
.../extra-icons/newui/folder_jpabuddy.svg | 1 -
.../extra-icons/newui/folder_jpabuddy_alt.svg | 1 -
.../newui/folder_jpabuddy_alt2.svg | 1 -
.../newui/folder_jpabuddy_alt2_dark.svg | 1 -
.../newui/folder_jpabuddy_alt3.svg | 1 -
.../newui/folder_jpabuddy_alt_dark.svg | 1 -
.../newui/folder_jpabuddy_dark.svg | 1 -
.../extra-icons/newui/folder_mariadb.svg | 1 -
.../extra-icons/newui/folder_mariadb_dark.svg | 1 -
.../extra-icons/newui/folder_mysql.svg | 1 -
.../extra-icons/newui/folder_mysql_dark.svg | 1 -
.../extra-icons/newui/folder_oracle.svg | 1 -
.../extra-icons/newui/folder_oracle_dark.svg | 1 -
.../extra-icons/newui/folder_os_android.svg | 1 -
.../newui/folder_os_android_dark.svg | 1 -
.../extra-icons/newui/folder_os_ios.svg | 1 -
.../extra-icons/newui/folder_os_ios_dark.svg | 1 -
.../extra-icons/newui/folder_os_linux.svg | 1 -
.../newui/folder_os_linux_dark.svg | 1 -
.../extra-icons/newui/folder_os_macos.svg | 1 -
.../newui/folder_os_macos_dark.svg | 1 -
.../extra-icons/newui/folder_os_web.svg | 1 -
.../extra-icons/newui/folder_os_web_dark.svg | 1 -
.../extra-icons/newui/folder_os_windows.svg | 1 -
.../newui/folder_os_windows_dark.svg | 1 -
.../extra-icons/newui/folder_postgresql.svg | 1 -
.../newui/folder_postgresql_dark.svg | 1 -
.../extra-icons/newui/folder_pytest_cache.svg | 1 -
.../newui/folder_pytest_cache_dark.svg | 1 -
.../extra-icons/newui/folder_python_venv.svg | 1 -
.../newui/folder_python_venv_dark.svg | 1 -
.../extra-icons/newui/folder_sqlite.svg | 1 -
.../extra-icons/newui/folder_sqlite_dark.svg | 1 -
.../extra-icons/newui/folder_sqlserver.svg | 1 -
.../newui/folder_sqlserver_dark.svg | 1 -
.../extra-icons/newui/folder_teamcity.svg | 1 -
.../newui/folder_teamcity_dark.svg | 1 -
.../extra-icons/newui/folder_tmp.svg | 1 -
.../extra-icons/newui/folder_tmp_dark.svg | 1 -
src/main/resources/extra-icons/newui/h.svg | 1 -
.../resources/extra-icons/newui/h_dark.svg | 1 -
src/main/resources/extra-icons/newui/helm.svg | 1 -
.../resources/extra-icons/newui/helmChart.svg | 1 -
.../extra-icons/newui/helmChart_dark.svg | 1 -
.../extra-icons/newui/helmChartsDirectory.svg | 1 -
.../newui/helmChartsDirectory_dark.svg | 1 -
.../extra-icons/newui/helmDirectory.svg | 1 -
.../extra-icons/newui/helmDirectory_dark.svg | 1 -
.../resources/extra-icons/newui/helmNotes.svg | 1 -
.../extra-icons/newui/helmNotes_dark.svg | 1 -
.../newui/helmRequirementsYaml.svg | 1 -
.../newui/helmRequirementsYaml_dark.svg | 1 -
.../newui/helmTemplatesDirectory.svg | 1 -
.../newui/helmTemplatesDirectory_dark.svg | 1 -
.../newui/helmTemplatesTestDirectory.svg | 1 -
.../newui/helmTemplatesTestDirectory_dark.svg | 1 -
.../extra-icons/newui/helmUndeployable.svg | 1 -
.../newui/helmUndeployable_dark.svg | 1 -
.../extra-icons/newui/helmValues.svg | 1 -
.../extra-icons/newui/helmValues_dark.svg | 1 -
.../resources/extra-icons/newui/helm_dark.svg | 1 -
.../resources/extra-icons/newui/helmlogo.svg | 1 -
.../extra-icons/newui/helmlogo_alt.svg | 1 -
.../newui/ide/abstractException_.svg | 1 -
.../newui/ide/abstractException__dark.svg | 1 -
.../extra-icons/newui/ide/enumKotlin_.svg | 1 -
.../newui/ide/enumKotlin__dark.svg | 1 -
.../extra-icons/newui/ide/enumKotlin_alt.svg | 1 -
.../extra-icons/newui/ide/enumKotlin_alt2.svg | 1 -
.../newui/ide/enumKotlin_alt2_dark.svg | 1 -
.../newui/ide/enumKotlin_alt_dark.svg | 1 -
.../resources/extra-icons/newui/ide/enum_.svg | 1 -
.../extra-icons/newui/ide/enum__dark.svg | 1 -
.../extra-icons/newui/ide/enum_alt.svg | 1 -
.../extra-icons/newui/ide/enum_alt2.svg | 1 -
.../extra-icons/newui/ide/enum_alt2_dark.svg | 1 -
.../extra-icons/newui/ide/enum_alt_dark.svg | 1 -
.../extra-icons/newui/ide/exceptionClass_.svg | 1 -
.../newui/ide/exceptionClass__dark.svg | 1 -
.../extra-icons/newui/onap-cba-blueprint.svg | 1 -
.../newui/onap-cba-blueprint_dark.svg | 1 -
.../newui/onap-cba-definitions.svg | 1 -
.../newui/onap-cba-definitions_dark.svg | 1 -
.../extra-icons/newui/writerside_cfg.svg | 1 -
.../extra-icons/newui/writerside_cfg_dark.svg | 1 -
.../extra-icons/newui/writerside_list.svg | 1 -
.../newui/writerside_list_dark.svg | 1 -
.../extra-icons/newui/writerside_tree.svg | 1 -
.../newui/writerside_tree_dark.svg | 1 -
src/main/resources/extra-icons/nginx.svg | 1 -
src/main/resources/extra-icons/noai.svg | 1 -
src/main/resources/extra-icons/noai_alt.svg | 1 -
.../resources/extra-icons/noai_alt_dark.svg | 1 -
src/main/resources/extra-icons/noai_dark.svg | 1 -
src/main/resources/extra-icons/nodemon.svg | 1 -
src/main/resources/extra-icons/notice.svg | 1 -
.../resources/extra-icons/notice_dark.svg | 1 -
src/main/resources/extra-icons/nox.svg | 1 -
src/main/resources/extra-icons/npm.svg | 1 -
src/main/resources/extra-icons/npmignore.svg | 1 -
.../resources/extra-icons/npmignore_dark.svg | 1 -
src/main/resources/extra-icons/nsis.svg | 1 -
src/main/resources/extra-icons/nsis_dark.svg | 1 -
src/main/resources/extra-icons/nuget.svg | 1 -
src/main/resources/extra-icons/nuget_dark.svg | 1 -
src/main/resources/extra-icons/nx.svg | 1 -
src/main/resources/extra-icons/nx_alt.svg | 1 -
.../extra-icons/officedocs/libo-calc.svg | 1 -
.../extra-icons/officedocs/libo-draw.svg | 1 -
.../extra-icons/officedocs/libo-impress.svg | 1 -
.../extra-icons/officedocs/libo-math.svg | 1 -
.../officedocs/libo-symbol-black.svg | 1 -
.../extra-icons/officedocs/libo-writer.svg | 1 -
.../extra-icons/officedocs/localc.svg | 1 -
.../extra-icons/officedocs/lodraw.svg | 1 -
.../extra-icons/officedocs/loimpress.svg | 1 -
.../extra-icons/officedocs/lomain.svg | 1 -
.../extra-icons/officedocs/lomath.svg | 1 -
.../extra-icons/officedocs/lowriter.svg | 1 -
.../extra-icons/officedocs/msexcel-2019.svg | 1 -
.../officedocs/msexcel-papirus.svg | 1 -
.../extra-icons/officedocs/msexcel.png | Bin 736 -> 0 bytes
.../extra-icons/officedocs/msexcel@2x.png | Bin 1807 -> 0 bytes
.../officedocs/msexcel@2x_dark.png | Bin 1819 -> 0 bytes
.../extra-icons/officedocs/msexcel_dark.png | Bin 722 -> 0 bytes
.../extra-icons/officedocs/msonenote-2019.svg | 1 -
.../extra-icons/officedocs/msonenote.png | Bin 763 -> 0 bytes
.../extra-icons/officedocs/msonenote@2x.png | Bin 1759 -> 0 bytes
.../officedocs/msonenote@2x_dark.png | Bin 1771 -> 0 bytes
.../extra-icons/officedocs/msonenote_dark.png | Bin 740 -> 0 bytes
.../officedocs/mspowerpoint-2019.svg | 1 -
.../officedocs/mspowerpoint-papirus.svg | 1 -
.../extra-icons/officedocs/mspowerpoint.png | Bin 696 -> 0 bytes
.../officedocs/mspowerpoint@2x.png | Bin 1617 -> 0 bytes
.../officedocs/mspowerpoint@2x_dark.png | Bin 1595 -> 0 bytes
.../officedocs/mspowerpoint_dark.png | Bin 692 -> 0 bytes
.../extra-icons/officedocs/msproject-2019.svg | 1 -
.../extra-icons/officedocs/msproject.png | Bin 670 -> 0 bytes
.../extra-icons/officedocs/msproject@2x.png | Bin 1566 -> 0 bytes
.../officedocs/msproject@2x_dark.png | Bin 1563 -> 0 bytes
.../extra-icons/officedocs/msproject_dark.png | Bin 654 -> 0 bytes
.../extra-icons/officedocs/msvisio-2019.svg | 1 -
.../extra-icons/officedocs/msvisio.png | Bin 735 -> 0 bytes
.../extra-icons/officedocs/msvisio@2x.png | Bin 1754 -> 0 bytes
.../officedocs/msvisio@2x_dark.png | Bin 1702 -> 0 bytes
.../extra-icons/officedocs/msvisio_dark.png | Bin 694 -> 0 bytes
.../extra-icons/officedocs/msword-2019.svg | 1 -
.../extra-icons/officedocs/msword-papirus.svg | 1 -
.../extra-icons/officedocs/msword.png | Bin 764 -> 0 bytes
.../extra-icons/officedocs/msword@2x.png | Bin 1892 -> 0 bytes
.../extra-icons/officedocs/msword@2x_dark.png | Bin 1898 -> 0 bytes
.../extra-icons/officedocs/msword_dark.png | Bin 766 -> 0 bytes
.../extra-icons/onap-cba-blueprint.svg | 1 -
.../extra-icons/onap-cba-blueprint_dark.svg | 1 -
.../extra-icons/onap-cba-definitions.svg | 1 -
.../extra-icons/onap-cba-definitions_dark.svg | 1 -
.../resources/extra-icons/onap-cba-tosca.svg | 1 -
.../extra-icons/onap-cba-tosca_dark.svg | 1 -
src/main/resources/extra-icons/opentofu.svg | 1 -
.../resources/extra-icons/packageinfojava.svg | 1 -
.../extra-icons/packageinfojava_dark.svg | 1 -
.../resources/extra-icons/packagejsonlock.svg | 1 -
src/main/resources/extra-icons/pdd.svg | 1 -
src/main/resources/extra-icons/pdd_dark.svg | 1 -
src/main/resources/extra-icons/pdf.svg | 1 -
src/main/resources/extra-icons/pdf_alt.svg | 1 -
src/main/resources/extra-icons/pdf_alt2.svg | 1 -
src/main/resources/extra-icons/pdf_alt3.svg | 1 -
src/main/resources/extra-icons/pdf_dark.svg | 1 -
src/main/resources/extra-icons/pid.svg | 1 -
src/main/resources/extra-icons/pid_dark.svg | 1 -
.../extra-icons/plugin-internals/auto.svg | 1 -
.../plugin-internals/auto_dark.svg | 1 -
.../plugin-internals/checkmark.svg | 1 -
.../plugin-internals/checkmark_dark.svg | 1 -
.../plugin-internals/contextHelp.svg | 1 -
.../extra-icons/plugin-internals/export.svg | 1 -
.../plugin-internals/export_dark.svg | 1 -
.../plugin-internals/folder_newui.svg | 1 -
.../plugin-internals/folder_newui_dark.svg | 1 -
.../plugin-internals/folder_oldui.svg | 1 -
.../plugin-internals/gutterCheckBox.svg | 1 -
.../gutterCheckBoxSelected.svg | 1 -
.../gutterCheckBoxSelected_dark.svg | 1 -
.../plugin-internals/gutterCheckBox_dark.svg | 1 -
.../extra-icons/plugin-internals/import.svg | 1 -
.../plugin-internals/import_dark.svg | 1 -
.../extra-icons/plugin-internals/reboot.svg | 1 -
.../plugin-internals/reboot_dark.svg | 1 -
.../extra-icons/plugin-internals/refresh.svg | 1 -
.../plugin-internals/refresh_dark.svg | 1 -
.../extra-icons/plugin-internals/remove.svg | 1 -
.../plugin-internals/remove_dark.svg | 1 -
.../extra-icons/plugin-internals/web.svg | 1 -
src/main/resources/extra-icons/pnpm.svg | 1 -
src/main/resources/extra-icons/poetry.svg | 1 -
.../resources/extra-icons/poetry_lock.svg | 1 -
.../extra-icons/poetry_lock_dark.svg | 1 -
src/main/resources/extra-icons/postcss.svg | 1 -
src/main/resources/extra-icons/postman.svg | 1 -
.../resources/extra-icons/postman_col.svg | 1 -
.../resources/extra-icons/postman_env.svg | 1 -
src/main/resources/extra-icons/prettier.svg | 1 -
.../resources/extra-icons/prettier_alt.svg | 1 -
.../resources/extra-icons/prettier_dark.svg | 1 -
.../resources/extra-icons/prettierignore.svg | 1 -
.../extra-icons/prettierignore_dark.svg | 1 -
src/main/resources/extra-icons/privacy.svg | 1 -
src/main/resources/extra-icons/proguard.svg | 1 -
.../resources/extra-icons/proguard_dark.svg | 1 -
src/main/resources/extra-icons/prometheus.svg | 1 -
src/main/resources/extra-icons/puppet.svg | 1 -
src/main/resources/extra-icons/pytest.svg | 1 -
src/main/resources/extra-icons/qodana.svg | 1 -
src/main/resources/extra-icons/qodana_alt.svg | 1 -
src/main/resources/extra-icons/readme.svg | 1 -
src/main/resources/extra-icons/readme_alt.svg | 1 -
.../resources/extra-icons/readme_alt2.svg | 1 -
.../resources/extra-icons/readme_alt_dark.svg | 1 -
.../resources/extra-icons/readme_dark.svg | 1 -
src/main/resources/extra-icons/redis.svg | 1 -
src/main/resources/extra-icons/rego.svg | 1 -
src/main/resources/extra-icons/renovate.svg | 1 -
.../extra-icons/requirementstxt_python.svg | 1 -
.../requirementstxt_python_alt.svg | 1 -
src/main/resources/extra-icons/restyled.svg | 1 -
.../resources/extra-icons/restyled_alt.svg | 1 -
.../resources/extra-icons/restyled_alt2.svg | 1 -
.../resources/extra-icons/restyled_dark.svg | 1 -
src/main/resources/extra-icons/roadmap.svg | 1 -
.../resources/extra-icons/roadmap_dark.svg | 1 -
.../resources/extra-icons/robotframework.svg | 1 -
.../extra-icons/robotframework_alt.svg | 1 -
.../extra-icons/robotframework_alt_dark.svg | 1 -
src/main/resources/extra-icons/rollup.svg | 1 -
src/main/resources/extra-icons/rpm.svg | 1 -
src/main/resources/extra-icons/rultor.svg | 1 -
.../resources/extra-icons/rultor_dark.svg | 1 -
src/main/resources/extra-icons/sass.svg | 1 -
src/main/resources/extra-icons/scalingo.svg | 1 -
.../resources/extra-icons/scalingo_dark.svg | 1 -
.../resources/extra-icons/screwdriver.svg | 1 -
src/main/resources/extra-icons/scss.svg | 1 -
src/main/resources/extra-icons/security.svg | 1 -
.../resources/extra-icons/semaphoreci.svg | 1 -
src/main/resources/extra-icons/sequelize.svg | 1 -
src/main/resources/extra-icons/snap.svg | 1 -
src/main/resources/extra-icons/sonar.svg | 1 -
src/main/resources/extra-icons/sonar_dark.svg | 1 -
src/main/resources/extra-icons/storybook.svg | 1 -
.../extra-icons/stylus-browserext.svg | 1 -
src/main/resources/extra-icons/svelte.svg | 1 -
src/main/resources/extra-icons/svg.svg | 1 -
src/main/resources/extra-icons/svg_alt.svg | 1 -
src/main/resources/extra-icons/svg_dark.svg | 1 -
src/main/resources/extra-icons/svgo.svg | 1 -
src/main/resources/extra-icons/svgo_alt.svg | 1 -
src/main/resources/extra-icons/swagger.svg | 1 -
.../resources/extra-icons/swagger_alt.svg | 1 -
.../resources/extra-icons/swaggerignore.svg | 1 -
.../extra-icons/swaggerignore_dark.svg | 1 -
.../resources/extra-icons/tailwindcss.svg | 1 -
src/main/resources/extra-icons/terraform.svg | 1 -
.../resources/extra-icons/terraform_dark.svg | 1 -
.../resources/extra-icons/test-javascript.svg | 1 -
.../extra-icons/test-javascript_alt.svg | 1 -
src/main/resources/extra-icons/test-ts.svg | 1 -
.../resources/extra-icons/test-ts_alt.svg | 1 -
src/main/resources/extra-icons/testing.svg | 1 -
.../resources/extra-icons/testing_dark.svg | 1 -
.../extra-icons/tinylog_properties.svg | 1 -
src/main/resources/extra-icons/todo.svg | 1 -
src/main/resources/extra-icons/todo_alt.svg | 1 -
.../resources/extra-icons/todo_alt_dark.svg | 1 -
src/main/resources/extra-icons/todo_dark.svg | 1 -
src/main/resources/extra-icons/tomcat.svg | 1 -
src/main/resources/extra-icons/toml.svg | 1 -
src/main/resources/extra-icons/toml_dark.svg | 1 -
src/main/resources/extra-icons/tox.svg | 1 -
src/main/resources/extra-icons/travis.svg | 1 -
src/main/resources/extra-icons/travis_alt.svg | 1 -
.../resources/extra-icons/travis_alt02.svg | 1 -
.../resources/extra-icons/travis_alt03.svg | 1 -
.../resources/extra-icons/travis_alt04.svg | 1 -
.../resources/extra-icons/travis_alt05.svg | 1 -
.../resources/extra-icons/travis_alt06.svg | 1 -
.../resources/extra-icons/travis_alt07.svg | 1 -
.../resources/extra-icons/travis_alt08.svg | 1 -
.../resources/extra-icons/travis_alt09.svg | 1 -
.../resources/extra-icons/travis_alt10.svg | 1 -
.../resources/extra-icons/travis_alt11.svg | 1 -
.../resources/extra-icons/travis_alt12.svg | 1 -
.../resources/extra-icons/travis_alt13.svg | 1 -
.../resources/extra-icons/travis_alt14.svg | 1 -
src/main/resources/extra-icons/tsconfig.svg | 1 -
src/main/resources/extra-icons/tsx.svg | 1 -
.../resources/extra-icons/typescript-def.svg | 1 -
src/main/resources/extra-icons/typescript.svg | 1 -
.../resources/extra-icons/typescript_dark.svg | 1 -
src/main/resources/extra-icons/uml.svg | 1 -
src/main/resources/extra-icons/uml_dark.svg | 1 -
src/main/resources/extra-icons/vagrant.svg | 1 -
src/main/resources/extra-icons/velocity.svg | 1 -
src/main/resources/extra-icons/version.svg | 1 -
.../resources/extra-icons/version_dark.svg | 1 -
src/main/resources/extra-icons/video.svg | 1 -
src/main/resources/extra-icons/video_alt.svg | 1 -
src/main/resources/extra-icons/video_alt2.svg | 1 -
src/main/resources/extra-icons/video_alt3.svg | 1 -
src/main/resources/extra-icons/vite.svg | 1 -
src/main/resources/extra-icons/vite_alt.svg | 1 -
src/main/resources/extra-icons/vitest.svg | 1 -
.../resources/extra-icons/vitest_dark.svg | 1 -
src/main/resources/extra-icons/vscode.svg | 1 -
src/main/resources/extra-icons/weblate.svg | 1 -
src/main/resources/extra-icons/webpack.svg | 1 -
.../resources/extra-icons/webpack_alt.svg | 1 -
src/main/resources/extra-icons/werf.svg | 1 -
src/main/resources/extra-icons/werf_dark.svg | 1 -
src/main/resources/extra-icons/wheel.svg | 1 -
src/main/resources/extra-icons/wma.svg | 1 -
src/main/resources/extra-icons/wma_dark.svg | 1 -
src/main/resources/extra-icons/writerside.svg | 1 -
.../resources/extra-icons/writerside_cfg.svg | 1 -
.../resources/extra-icons/writerside_list.svg | 1 -
.../extra-icons/writerside_list_dark.svg | 1 -
.../resources/extra-icons/writerside_tree.svg | 1 -
src/main/resources/extra-icons/xiph.svg | 1 -
src/main/resources/extra-icons/yang.svg | 1 -
src/main/resources/extra-icons/zalando.svg | 1 -
.../resources/extra-icons/zalando_dark.svg | 1 -
.../intellij/extra/icons/cfg/ArchTest.java | 36 -
.../extra/icons/cfg/ResourcesTest.java | 300 ----
.../cfg/services/SettingsServiceTest.java | 68 -
...9-83cdae88-aa9a-437b-8790-410ecd4ec7c6.svg | 9 -
...3-bb7aa2bf-3b5f-47e2-b21d-95883c4229d4.svg | 4 -
...4-837a720a-fcb4-40eb-942d-667e2b39c4d3.svg | 8 -
...6-43ae538c-ffc5-4bce-b789-c2045ca06367.svg | 8 -
.../extra-icons-issue141-icon-pack.json | 1 -
src/test/resources/junit-platform.properties | 6 -
svgo.config.js | 47 -
895 files changed, 5 insertions(+), 12510 deletions(-)
delete mode 100644 CHANGELOG.md
delete mode 100644 CONTRIBUTION.md
delete mode 100644 KNOWN_ISSUES.md
delete mode 100644 Makefile
delete mode 100644 build.gradle.kts
delete mode 100644 docs/DEV_FAQ.md
delete mode 100644 gradle.properties
delete mode 100755 gradlew
delete mode 100644 gradlew.bat
delete mode 100644 misc/pluginIcon.free.svg
delete mode 100644 misc/pluginIcon.lifetime.svg
delete mode 100644 settings.gradle.kts
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/BaseIconProvider.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/ExtraIconPatcher.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/ExtraIconProvider.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/Globals.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/IconType.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/Model.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/ModelCondition.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/ModelTag.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/ModelType.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/UIType.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/UITypeIconsPreference.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/activity/EnablerServicesProjectActivity.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/activity/ExtraIconsLicenseCheckIDEActivity.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/activity/HintNotificationsProjectActivity.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/activity/RefreshIconsListenerProjectActivity.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/activity/VFSChangesListenersProjectActivity.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/IconPack.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/SettingsForm.form
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/SettingsForm.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/AskSingleTextDialog.form
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/AskSingleTextDialog.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/IconPackUninstallerDialog.form
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/IconPackUninstallerDialog.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelConditionDialog.form
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelConditionDialog.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelDialog.form
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelDialog.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/models/PluginIconsSettingsTableModel.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/models/UserIconsSettingsTableModel.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/providers/IDEConfigurableProvider.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/providers/ProjectConfigurableProvider.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/services/SettingsIDEService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/services/SettingsProjectService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/cfg/services/SettingsService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/AbstractFolderEnabler.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/AbstractInFolderEnabler.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/IconEnabler.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/IconEnablerProvider.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/IconEnablerType.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/services/GitSubmoduleFolderEnablerService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/services/HelmFolderEnablerService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/services/InAngularFolderEnablerService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/services/InFlutterFolderEnablerService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/services/InGraphQLFolderEnablerService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/services/InHelmFolderEnablerService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/enablers/services/InWritersideFolderEnablerService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/lic/ExtraIconsLicenseCheck.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/lic/ExtraIconsLicenseStatus.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/lic/ExtraIconsPluginType.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/messaging/RefreshIconsNotifier.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/messaging/RefreshIconsNotifierService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/services/FacetsFinderService.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/Base64Utils.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/BundledIcon.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/ComboBoxWithImageItem.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/ComboBoxWithImageRenderer.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/ExtraIconsErrorReportSubmitter.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/FileChooserUtils.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/I18nUtils.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/IJUtils.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/IconPackUtils.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/IconUtils.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/OS.java
delete mode 100644 src/main/java/lermitage/intellij/extra/icons/utils/ProjectUtils.java
delete mode 100644 src/main/resources/ExtraIconsI18n.properties
delete mode 100644 src/main/resources/ExtraIconsI18n_zh.properties
delete mode 100644 src/main/resources/META-INF/plugin.xml
delete mode 100644 src/main/resources/META-INF/pluginIcon.svg
delete mode 100644 src/main/resources/extra-icons/7zip.svg
delete mode 100644 src/main/resources/extra-icons/aac.svg
delete mode 100644 src/main/resources/extra-icons/aac_dark.svg
delete mode 100644 src/main/resources/extra-icons/allcontributors.svg
delete mode 100644 src/main/resources/extra-icons/allcontributors_dark.svg
delete mode 100644 src/main/resources/extra-icons/android.svg
delete mode 100644 src/main/resources/extra-icons/android_alt.svg
delete mode 100644 src/main/resources/extra-icons/angular-component-test.svg
delete mode 100644 src/main/resources/extra-icons/angular-component.svg
delete mode 100644 src/main/resources/extra-icons/angular-controller-test.svg
delete mode 100644 src/main/resources/extra-icons/angular-controller.svg
delete mode 100644 src/main/resources/extra-icons/angular-directive-test.svg
delete mode 100644 src/main/resources/extra-icons/angular-directive.svg
delete mode 100644 src/main/resources/extra-icons/angular-guard-test.svg
delete mode 100644 src/main/resources/extra-icons/angular-guard.svg
delete mode 100644 src/main/resources/extra-icons/angular-module-test.svg
delete mode 100644 src/main/resources/extra-icons/angular-module.svg
delete mode 100644 src/main/resources/extra-icons/angular-pipe-test.svg
delete mode 100644 src/main/resources/extra-icons/angular-pipe.svg
delete mode 100644 src/main/resources/extra-icons/angular-resolver-test.svg
delete mode 100644 src/main/resources/extra-icons/angular-resolver.svg
delete mode 100644 src/main/resources/extra-icons/angular-service-test.svg
delete mode 100644 src/main/resources/extra-icons/angular-service.svg
delete mode 100644 src/main/resources/extra-icons/angular2.svg
delete mode 100644 src/main/resources/extra-icons/angular_renaissance.svg
delete mode 100644 src/main/resources/extra-icons/apk.svg
delete mode 100644 src/main/resources/extra-icons/apple.svg
delete mode 100644 src/main/resources/extra-icons/appveyor.svg
delete mode 100644 src/main/resources/extra-icons/archive.svg
delete mode 100644 src/main/resources/extra-icons/archunit.svg
delete mode 100644 src/main/resources/extra-icons/asciidoc.svg
delete mode 100644 src/main/resources/extra-icons/asciidoc_alt.svg
delete mode 100644 src/main/resources/extra-icons/authors.svg
delete mode 100644 src/main/resources/extra-icons/authors_alt.svg
delete mode 100644 src/main/resources/extra-icons/authors_alt2.svg
delete mode 100644 src/main/resources/extra-icons/authors_alt3.svg
delete mode 100644 src/main/resources/extra-icons/authors_alt4.svg
delete mode 100644 src/main/resources/extra-icons/avro.svg
delete mode 100644 src/main/resources/extra-icons/avro_dark.svg
delete mode 100644 src/main/resources/extra-icons/babel.svg
delete mode 100644 src/main/resources/extra-icons/babel_alt.svg
delete mode 100644 src/main/resources/extra-icons/babel_dark.svg
delete mode 100644 src/main/resources/extra-icons/backup.svg
delete mode 100644 src/main/resources/extra-icons/bamboo.svg
delete mode 100644 src/main/resources/extra-icons/bash.svg
delete mode 100644 src/main/resources/extra-icons/bash_dark.svg
delete mode 100644 src/main/resources/extra-icons/berkshelf.svg
delete mode 100644 src/main/resources/extra-icons/berkshelflock.svg
delete mode 100644 src/main/resources/extra-icons/bicep.svg
delete mode 100644 src/main/resources/extra-icons/bicep_alt.svg
delete mode 100644 src/main/resources/extra-icons/bicep_alt2.svg
delete mode 100644 src/main/resources/extra-icons/binary.svg
delete mode 100644 src/main/resources/extra-icons/binary_alt.svg
delete mode 100644 src/main/resources/extra-icons/binary_alt2.svg
delete mode 100644 src/main/resources/extra-icons/binary_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/bitbucket.svg
delete mode 100644 src/main/resources/extra-icons/bitnami.svg
delete mode 100644 src/main/resources/extra-icons/bitnami_dark.svg
delete mode 100644 src/main/resources/extra-icons/bower.svg
delete mode 100644 src/main/resources/extra-icons/browserslist.svg
delete mode 100644 src/main/resources/extra-icons/browserslist_dark.svg
delete mode 100644 src/main/resources/extra-icons/bug.svg
delete mode 100644 src/main/resources/extra-icons/build.svg
delete mode 100644 src/main/resources/extra-icons/c.svg
delete mode 100644 src/main/resources/extra-icons/cache2k.svg
delete mode 100644 src/main/resources/extra-icons/caddy.svg
delete mode 100644 src/main/resources/extra-icons/cargo.svg
delete mode 100644 src/main/resources/extra-icons/cassandra.svg
delete mode 100644 src/main/resources/extra-icons/cassandra_dark.svg
delete mode 100644 src/main/resources/extra-icons/certificate.svg
delete mode 100644 src/main/resources/extra-icons/certificate_alt.svg
delete mode 100644 src/main/resources/extra-icons/certificate_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/changelog.svg
delete mode 100644 src/main/resources/extra-icons/changelog_dark.svg
delete mode 100644 src/main/resources/extra-icons/circleci.svg
delete mode 100644 src/main/resources/extra-icons/circleci_dark.svg
delete mode 100644 src/main/resources/extra-icons/cirrus.svg
delete mode 100644 src/main/resources/extra-icons/cirrus_dark.svg
delete mode 100644 src/main/resources/extra-icons/cmd.svg
delete mode 100644 src/main/resources/extra-icons/cmd_dark.svg
delete mode 100644 src/main/resources/extra-icons/codacy.svg
delete mode 100644 src/main/resources/extra-icons/codacy_dark.svg
delete mode 100644 src/main/resources/extra-icons/codeception.svg
delete mode 100644 src/main/resources/extra-icons/codeception_dark.svg
delete mode 100644 src/main/resources/extra-icons/codecov.svg
delete mode 100644 src/main/resources/extra-icons/codefresh.svg
delete mode 100644 src/main/resources/extra-icons/codefresh_dark.svg
delete mode 100644 src/main/resources/extra-icons/codeship.svg
delete mode 100644 src/main/resources/extra-icons/codeship_alt.png
delete mode 100644 src/main/resources/extra-icons/codeship_alt@2x.png
delete mode 100644 src/main/resources/extra-icons/codeship_alt@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/codeship_alt_dark.png
delete mode 100644 src/main/resources/extra-icons/codeship_dark.svg
delete mode 100644 src/main/resources/extra-icons/commitlint.svg
delete mode 100644 src/main/resources/extra-icons/composer.svg
delete mode 100644 src/main/resources/extra-icons/composer_alt.svg
delete mode 100644 src/main/resources/extra-icons/config.svg
delete mode 100644 src/main/resources/extra-icons/contact.svg
delete mode 100644 src/main/resources/extra-icons/contributing.svg
delete mode 100644 src/main/resources/extra-icons/contributing_alt.png
delete mode 100644 src/main/resources/extra-icons/contributing_alt2.svg
delete mode 100644 src/main/resources/extra-icons/contributing_alt@2x.png
delete mode 100644 src/main/resources/extra-icons/cookie.svg
delete mode 100644 src/main/resources/extra-icons/cookie_dark.svg
delete mode 100644 src/main/resources/extra-icons/coveragerc.svg
delete mode 100644 src/main/resources/extra-icons/coveralls.svg
delete mode 100644 src/main/resources/extra-icons/cpp.svg
delete mode 100644 src/main/resources/extra-icons/crowdin.svg
delete mode 100644 src/main/resources/extra-icons/css-map.svg
delete mode 100644 src/main/resources/extra-icons/css.svg
delete mode 100644 src/main/resources/extra-icons/csv_alt.svg
delete mode 100644 src/main/resources/extra-icons/cypress.svg
delete mode 100644 src/main/resources/extra-icons/deb.svg
delete mode 100644 src/main/resources/extra-icons/deb_dark.svg
delete mode 100644 src/main/resources/extra-icons/deno.svg
delete mode 100644 src/main/resources/extra-icons/dependabot.svg
delete mode 100644 src/main/resources/extra-icons/dependabot_alt.svg
delete mode 100644 src/main/resources/extra-icons/dependabot_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/deptective.svg
delete mode 100644 src/main/resources/extra-icons/detekt.svg
delete mode 100644 src/main/resources/extra-icons/docker_.svg
delete mode 100644 src/main/resources/extra-icons/docker_alt.svg
delete mode 100644 src/main/resources/extra-icons/docker_alt2.svg
delete mode 100644 src/main/resources/extra-icons/dockercompose_.svg
delete mode 100644 src/main/resources/extra-icons/dockercompose_alt.svg
delete mode 100644 src/main/resources/extra-icons/dockercompose_alt2.svg
delete mode 100644 src/main/resources/extra-icons/dockerignore.svg
delete mode 100644 src/main/resources/extra-icons/dockerignore_alt.svg
delete mode 100644 src/main/resources/extra-icons/dockerignore_alt2.svg
delete mode 100644 src/main/resources/extra-icons/dockerignore_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/dockerignore_dark.svg
delete mode 100644 src/main/resources/extra-icons/drawio.svg
delete mode 100644 src/main/resources/extra-icons/drawio_alt.svg
delete mode 100644 src/main/resources/extra-icons/drawio_alt2.png
delete mode 100644 src/main/resources/extra-icons/drawio_alt2@2x.png
delete mode 100644 src/main/resources/extra-icons/editorconfig.svg
delete mode 100644 src/main/resources/extra-icons/editorconfig_alt.svg
delete mode 100644 src/main/resources/extra-icons/editorconfig_alt2.svg
delete mode 100644 src/main/resources/extra-icons/editorconfig_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/elastic-cerebro.svg
delete mode 100644 src/main/resources/extra-icons/elastic-cerebro_dark.svg
delete mode 100644 src/main/resources/extra-icons/elasticsearch.svg
delete mode 100644 src/main/resources/extra-icons/elasticsearch_dark.svg
delete mode 100644 src/main/resources/extra-icons/elixir.svg
delete mode 100644 src/main/resources/extra-icons/email.svg
delete mode 100644 src/main/resources/extra-icons/env.svg
delete mode 100644 src/main/resources/extra-icons/env_alt.svg
delete mode 100644 src/main/resources/extra-icons/env_alt2.svg
delete mode 100644 src/main/resources/extra-icons/epub.svg
delete mode 100644 src/main/resources/extra-icons/eslint.svg
delete mode 100644 src/main/resources/extra-icons/expo.svg
delete mode 100644 src/main/resources/extra-icons/expo_dark.svg
delete mode 100644 src/main/resources/extra-icons/expo_folder.svg
delete mode 100644 src/main/resources/extra-icons/faq.svg
delete mode 100644 src/main/resources/extra-icons/faq_alt.svg
delete mode 100644 src/main/resources/extra-icons/faq_alt2.svg
delete mode 100644 src/main/resources/extra-icons/faq_alt3.svg
delete mode 100644 src/main/resources/extra-icons/faq_alt3_dark.svg
delete mode 100644 src/main/resources/extra-icons/faq_alt4.svg
delete mode 100644 src/main/resources/extra-icons/flutter-analysisoptions.svg
delete mode 100644 src/main/resources/extra-icons/flutter-metadata.svg
delete mode 100644 src/main/resources/extra-icons/flutter.svg
delete mode 100644 src/main/resources/extra-icons/flutterlock.svg
delete mode 100644 src/main/resources/extra-icons/flutterlock_dark.svg
delete mode 100644 src/main/resources/extra-icons/flyway.svg
delete mode 100644 src/main/resources/extra-icons/flyway_alt.svg
delete mode 100644 src/main/resources/extra-icons/flyway_alt2.png
delete mode 100644 src/main/resources/extra-icons/flyway_alt2@2x.png
delete mode 100644 src/main/resources/extra-icons/flyway_alt2@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/flyway_alt2_dark.png
delete mode 100644 src/main/resources/extra-icons/flyway_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/flyway_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_circleci.svg
delete mode 100644 src/main/resources/extra-icons/folder_db2.svg
delete mode 100644 src/main/resources/extra-icons/folder_dependabot.svg
delete mode 100644 src/main/resources/extra-icons/folder_dependabot_alt.svg
delete mode 100644 src/main/resources/extra-icons/folder_docker.svg
delete mode 100644 src/main/resources/extra-icons/folder_fleet.svg
delete mode 100644 src/main/resources/extra-icons/folder_flyway.svg
delete mode 100644 src/main/resources/extra-icons/folder_github.svg
delete mode 100644 src/main/resources/extra-icons/folder_gitlab.svg
delete mode 100644 src/main/resources/extra-icons/folder_gradle.svg
delete mode 100644 src/main/resources/extra-icons/folder_h2.svg
delete mode 100644 src/main/resources/extra-icons/folder_hsqldb.svg
delete mode 100644 src/main/resources/extra-icons/folder_idea.svg
delete mode 100644 src/main/resources/extra-icons/folder_jpabuddy.svg
delete mode 100644 src/main/resources/extra-icons/folder_jpabuddy_alt.svg
delete mode 100644 src/main/resources/extra-icons/folder_jpabuddy_alt2.svg
delete mode 100644 src/main/resources/extra-icons/folder_jpabuddy_alt3.svg
delete mode 100644 src/main/resources/extra-icons/folder_liquibase.svg
delete mode 100644 src/main/resources/extra-icons/folder_mariadb.svg
delete mode 100644 src/main/resources/extra-icons/folder_mariadb_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_mergify.svg
delete mode 100644 src/main/resources/extra-icons/folder_mvnw.svg
delete mode 100644 src/main/resources/extra-icons/folder_mysql.svg
delete mode 100644 src/main/resources/extra-icons/folder_mysql_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_node_modules.svg
delete mode 100644 src/main/resources/extra-icons/folder_node_modules_alt.svg
delete mode 100644 src/main/resources/extra-icons/folder_nuget.svg
delete mode 100644 src/main/resources/extra-icons/folder_oracle.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_android.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_android_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_ios.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_ios_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_linux.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_linux_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_macos.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_macos_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_web.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_web_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_windows.svg
delete mode 100644 src/main/resources/extra-icons/folder_os_windows_dark.svg
delete mode 100644 src/main/resources/extra-icons/folder_postgresql.svg
delete mode 100644 src/main/resources/extra-icons/folder_pytest_cache.svg
delete mode 100644 src/main/resources/extra-icons/folder_python_venv.svg
delete mode 100644 src/main/resources/extra-icons/folder_semaphoreci.svg
delete mode 100644 src/main/resources/extra-icons/folder_sqlite.svg
delete mode 100644 src/main/resources/extra-icons/folder_sqlserver.svg
delete mode 100644 src/main/resources/extra-icons/folder_storybook.svg
delete mode 100644 src/main/resources/extra-icons/folder_teamcity.svg
delete mode 100644 src/main/resources/extra-icons/folder_tmp.svg
delete mode 100644 src/main/resources/extra-icons/folder_vscode.svg
delete mode 100644 src/main/resources/extra-icons/form.svg
delete mode 100644 src/main/resources/extra-icons/form_dark.svg
delete mode 100644 src/main/resources/extra-icons/gatling.svg
delete mode 100644 src/main/resources/extra-icons/generated_pom.svg
delete mode 100644 src/main/resources/extra-icons/generated_pom_alt.svg
delete mode 100644 src/main/resources/extra-icons/git.svg
delete mode 100644 src/main/resources/extra-icons/git_submodule.svg
delete mode 100644 src/main/resources/extra-icons/git_submodule_alt.svg
delete mode 100644 src/main/resources/extra-icons/github_action.svg
delete mode 100644 src/main/resources/extra-icons/github_action_dark.svg
delete mode 100644 src/main/resources/extra-icons/gitlab.svg
delete mode 100644 src/main/resources/extra-icons/gitlab_alt.svg
delete mode 100644 src/main/resources/extra-icons/gitlab_next.svg
delete mode 100644 src/main/resources/extra-icons/gitpod.svg
delete mode 100644 src/main/resources/extra-icons/glowroot.svg
delete mode 100644 src/main/resources/extra-icons/gocd.svg
delete mode 100644 src/main/resources/extra-icons/gocd_dark.svg
delete mode 100644 src/main/resources/extra-icons/golangarchlinter.svg
delete mode 100644 src/main/resources/extra-icons/gomod.svg
delete mode 100644 src/main/resources/extra-icons/gomod_alt.svg
delete mode 100644 src/main/resources/extra-icons/goreleaser.svg
delete mode 100644 src/main/resources/extra-icons/goreleaser_alt.svg
delete mode 100644 src/main/resources/extra-icons/gradle.svg
delete mode 100644 src/main/resources/extra-icons/gradle_dark.svg
delete mode 100644 src/main/resources/extra-icons/gradle_kotlin.svg
delete mode 100644 src/main/resources/extra-icons/gradle_kotlin_colored.svg
delete mode 100644 src/main/resources/extra-icons/gradle_kotlin_colored_dark.svg
delete mode 100644 src/main/resources/extra-icons/gradle_kotlin_dark.svg
delete mode 100644 src/main/resources/extra-icons/gradle_lock.svg
delete mode 100644 src/main/resources/extra-icons/gradle_lock_dark.svg
delete mode 100644 src/main/resources/extra-icons/gradlew.svg
delete mode 100644 src/main/resources/extra-icons/gradlew_dark.svg
delete mode 100644 src/main/resources/extra-icons/grafana.svg
delete mode 100644 src/main/resources/extra-icons/graphql.svg
delete mode 100644 src/main/resources/extra-icons/graphql_config.svg
delete mode 100644 src/main/resources/extra-icons/graphql_config_dark.svg
delete mode 100644 src/main/resources/extra-icons/graphql_dark.svg
delete mode 100644 src/main/resources/extra-icons/graphql_schema.svg
delete mode 100644 src/main/resources/extra-icons/graphql_schema_dark.svg
delete mode 100644 src/main/resources/extra-icons/grunt.svg
delete mode 100644 src/main/resources/extra-icons/h.svg
delete mode 100644 src/main/resources/extra-icons/hadolint.svg
delete mode 100644 src/main/resources/extra-icons/hadolint_dark.svg
delete mode 100644 src/main/resources/extra-icons/haxe.svg
delete mode 100644 src/main/resources/extra-icons/haxehxml.svg
delete mode 100644 src/main/resources/extra-icons/helm.svg
delete mode 100644 src/main/resources/extra-icons/helmChart.svg
delete mode 100644 src/main/resources/extra-icons/helmChartsDirectory.svg
delete mode 100644 src/main/resources/extra-icons/helmDirectory.svg
delete mode 100644 src/main/resources/extra-icons/helmNotes.svg
delete mode 100644 src/main/resources/extra-icons/helmRequirementsYaml.svg
delete mode 100644 src/main/resources/extra-icons/helmTemplatesDirectory.svg
delete mode 100644 src/main/resources/extra-icons/helmTemplatesTestDirectory.svg
delete mode 100644 src/main/resources/extra-icons/helmUndeployable.svg
delete mode 100644 src/main/resources/extra-icons/helmValues.svg
delete mode 100644 src/main/resources/extra-icons/helmlogo.svg
delete mode 100644 src/main/resources/extra-icons/helmlogo_alt.svg
delete mode 100644 src/main/resources/extra-icons/hibernate.svg
delete mode 100644 src/main/resources/extra-icons/htaccess.svg
delete mode 100644 src/main/resources/extra-icons/html5.svg
delete mode 100644 src/main/resources/extra-icons/html5_alt.svg
delete mode 100644 src/main/resources/extra-icons/html5_alt2.svg
delete mode 100644 src/main/resources/extra-icons/html5_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/http.png
delete mode 100644 src/main/resources/extra-icons/http@2x.png
delete mode 100644 src/main/resources/extra-icons/http@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/http_alt.svg
delete mode 100644 src/main/resources/extra-icons/http_dark.png
delete mode 100644 src/main/resources/extra-icons/ide/abstractException_.svg
delete mode 100644 src/main/resources/extra-icons/ide/canary.svg
delete mode 100644 src/main/resources/extra-icons/ide/chrome.svg
delete mode 100644 src/main/resources/extra-icons/ide/edge.svg
delete mode 100644 src/main/resources/extra-icons/ide/enumKotlin_.svg
delete mode 100644 src/main/resources/extra-icons/ide/enumKotlin_alt.svg
delete mode 100644 src/main/resources/extra-icons/ide/enumKotlin_alt2.svg
delete mode 100644 src/main/resources/extra-icons/ide/enum_.svg
delete mode 100644 src/main/resources/extra-icons/ide/enum_alt.svg
delete mode 100644 src/main/resources/extra-icons/ide/enum_alt2.svg
delete mode 100644 src/main/resources/extra-icons/ide/exceptionClass_.svg
delete mode 100644 src/main/resources/extra-icons/ide/explorer.svg
delete mode 100644 src/main/resources/extra-icons/ide/firefox.svg
delete mode 100644 src/main/resources/extra-icons/ide/firefoxDeveloper.svg
delete mode 100644 src/main/resources/extra-icons/ide/opera.svg
delete mode 100644 src/main/resources/extra-icons/ide/safari.svg
delete mode 100644 src/main/resources/extra-icons/ide/vivaldi.svg
delete mode 100644 src/main/resources/extra-icons/ide/yaml_.svg
delete mode 100644 src/main/resources/extra-icons/ide/yaml__dark.svg
delete mode 100644 src/main/resources/extra-icons/ide/yaml_alt.svg
delete mode 100644 src/main/resources/extra-icons/ide/yaml_alt2.svg
delete mode 100644 src/main/resources/extra-icons/ide/yaml_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/imgbot.svg
delete mode 100644 src/main/resources/extra-icons/imgbot_dark.svg
delete mode 100644 src/main/resources/extra-icons/jar.svg
delete mode 100644 src/main/resources/extra-icons/jar_dark.svg
delete mode 100644 src/main/resources/extra-icons/java.svg
delete mode 100644 src/main/resources/extra-icons/java_alt.png
delete mode 100644 src/main/resources/extra-icons/java_alt@2x.png
delete mode 100644 src/main/resources/extra-icons/java_alt@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/java_alt_dark.png
delete mode 100644 src/main/resources/extra-icons/javascript-map.svg
delete mode 100644 src/main/resources/extra-icons/javascript-map_dark.svg
delete mode 100644 src/main/resources/extra-icons/javascript.svg
delete mode 100644 src/main/resources/extra-icons/javascript_alt.svg
delete mode 100644 src/main/resources/extra-icons/javascript_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/javascript_dark.svg
delete mode 100644 src/main/resources/extra-icons/jenkins.svg
delete mode 100644 src/main/resources/extra-icons/jenkins_alt.png
delete mode 100644 src/main/resources/extra-icons/jenkins_alt@2x.png
delete mode 100644 src/main/resources/extra-icons/jest.svg
delete mode 100644 src/main/resources/extra-icons/jest_dark.svg
delete mode 100644 src/main/resources/extra-icons/jetbrains.svg
delete mode 100644 src/main/resources/extra-icons/jfr.svg
delete mode 100644 src/main/resources/extra-icons/jfr_dark.svg
delete mode 100644 src/main/resources/extra-icons/jgitver.svg
delete mode 100644 src/main/resources/extra-icons/jgitver_dark.svg
delete mode 100644 src/main/resources/extra-icons/jinja.svg
delete mode 100644 src/main/resources/extra-icons/jinja_dark.svg
delete mode 100644 src/main/resources/extra-icons/jitpack.svg
delete mode 100644 src/main/resources/extra-icons/jitpack_dark.svg
delete mode 100644 src/main/resources/extra-icons/jsbeautify.svg
delete mode 100644 src/main/resources/extra-icons/jsbeautify_alt.svg
delete mode 100644 src/main/resources/extra-icons/jsconfig.svg
delete mode 100644 src/main/resources/extra-icons/jshint.svg
delete mode 100644 src/main/resources/extra-icons/jshint_dark.svg
delete mode 100644 src/main/resources/extra-icons/json.svg
delete mode 100644 src/main/resources/extra-icons/jsx.svg
delete mode 100644 src/main/resources/extra-icons/junit5.png
delete mode 100644 src/main/resources/extra-icons/junit5@2x.png
delete mode 100644 src/main/resources/extra-icons/junit5@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/junit5_dark.png
delete mode 100644 src/main/resources/extra-icons/junit5_transparent.svg
delete mode 100644 src/main/resources/extra-icons/junit5_white.svg
delete mode 100644 src/main/resources/extra-icons/just.svg
delete mode 100644 src/main/resources/extra-icons/just_alt.svg
delete mode 100644 src/main/resources/extra-icons/just_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/just_dark.svg
delete mode 100644 src/main/resources/extra-icons/karate.svg
delete mode 100644 src/main/resources/extra-icons/karate_dark.svg
delete mode 100644 src/main/resources/extra-icons/karma.svg
delete mode 100644 src/main/resources/extra-icons/keep.svg
delete mode 100644 src/main/resources/extra-icons/keepass.svg
delete mode 100644 src/main/resources/extra-icons/keepass_alt.png
delete mode 100644 src/main/resources/extra-icons/keepass_alt2.svg
delete mode 100644 src/main/resources/extra-icons/keepass_alt@2x.png
delete mode 100644 src/main/resources/extra-icons/keepass_alt@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/keepass_alt_dark.png
delete mode 100644 src/main/resources/extra-icons/keepass_dark.svg
delete mode 100644 src/main/resources/extra-icons/kibana.svg
delete mode 100644 src/main/resources/extra-icons/kubernetes.svg
delete mode 100644 src/main/resources/extra-icons/kubernetes_alt.svg
delete mode 100644 src/main/resources/extra-icons/kubernetes_alt2.svg
delete mode 100644 src/main/resources/extra-icons/kubernetes_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/kubernetes_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/kubernetes_dark.svg
delete mode 100644 src/main/resources/extra-icons/kustomize.svg
delete mode 100644 src/main/resources/extra-icons/kustomize_alt.svg
delete mode 100644 src/main/resources/extra-icons/lerna.svg
delete mode 100644 src/main/resources/extra-icons/lerna_dark.svg
delete mode 100644 src/main/resources/extra-icons/less.svg
delete mode 100644 src/main/resources/extra-icons/less_dark.svg
delete mode 100644 src/main/resources/extra-icons/lgtm.svg
delete mode 100644 src/main/resources/extra-icons/lgtm_alt.svg
delete mode 100644 src/main/resources/extra-icons/license.svg
delete mode 100644 src/main/resources/extra-icons/license_alt.png
delete mode 100644 src/main/resources/extra-icons/license_alt@2x.png
delete mode 100644 src/main/resources/extra-icons/license_alt@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/license_alt_dark.png
delete mode 100644 src/main/resources/extra-icons/license_dark.svg
delete mode 100644 src/main/resources/extra-icons/lighttpd.svg
delete mode 100644 src/main/resources/extra-icons/liquibase.svg
delete mode 100644 src/main/resources/extra-icons/liquibase_alt.svg
delete mode 100644 src/main/resources/extra-icons/liquibase_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/liquibase_dark.svg
delete mode 100644 src/main/resources/extra-icons/log4j.svg
delete mode 100644 src/main/resources/extra-icons/log4j_dark.svg
delete mode 100644 src/main/resources/extra-icons/logback.svg
delete mode 100644 src/main/resources/extra-icons/logback_dark.svg
delete mode 100644 src/main/resources/extra-icons/logstash.svg
delete mode 100644 src/main/resources/extra-icons/lombok.svg
delete mode 100644 src/main/resources/extra-icons/markdown.svg
delete mode 100644 src/main/resources/extra-icons/markdown_alt.svg
delete mode 100644 src/main/resources/extra-icons/markdown_alt2.svg
delete mode 100644 src/main/resources/extra-icons/markdown_alt3.svg
delete mode 100644 src/main/resources/extra-icons/markdown_alt3_dark.svg
delete mode 100644 src/main/resources/extra-icons/matroska.svg
delete mode 100644 src/main/resources/extra-icons/matroska_dark.svg
delete mode 100644 src/main/resources/extra-icons/mdx.svg
delete mode 100644 src/main/resources/extra-icons/mdx_alt.svg
delete mode 100644 src/main/resources/extra-icons/mdx_alt2.svg
delete mode 100644 src/main/resources/extra-icons/mdx_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/mdx_dark.svg
delete mode 100644 src/main/resources/extra-icons/mergify.svg
delete mode 100644 src/main/resources/extra-icons/mermaid.svg
delete mode 100644 src/main/resources/extra-icons/metro.svg
delete mode 100644 src/main/resources/extra-icons/mindmap.svg
delete mode 100644 src/main/resources/extra-icons/mkdocs.svg
delete mode 100644 src/main/resources/extra-icons/mkdocs_dark.svg
delete mode 100644 src/main/resources/extra-icons/mockk.svg
delete mode 100644 src/main/resources/extra-icons/moduleinfo.svg
delete mode 100644 src/main/resources/extra-icons/moduleinfo_alt.svg
delete mode 100644 src/main/resources/extra-icons/moduleinfo_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/moduleinfo_dark.svg
delete mode 100644 src/main/resources/extra-icons/mongodb.svg
delete mode 100644 src/main/resources/extra-icons/monkey's_audio.svg
delete mode 100644 src/main/resources/extra-icons/mpeg.svg
delete mode 100644 src/main/resources/extra-icons/mpeg_dark.svg
delete mode 100644 src/main/resources/extra-icons/msazure.svg
delete mode 100644 src/main/resources/extra-icons/msexe.svg
delete mode 100644 src/main/resources/extra-icons/muse.svg
delete mode 100644 src/main/resources/extra-icons/mvnw.svg
delete mode 100644 src/main/resources/extra-icons/mvnw_dark.svg
delete mode 100644 src/main/resources/extra-icons/my.svg
delete mode 100644 src/main/resources/extra-icons/mysqlworkbench.svg
delete mode 100644 src/main/resources/extra-icons/nestjs.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_adapter.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_controller.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_controller_test.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_decorator.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_dto.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_entity.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_filter.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_gateway.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_guard.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_interceptor.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_middleware.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_model.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_module.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_pipe.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_service.svg
delete mode 100644 src/main/resources/extra-icons/nestjs_service_test.svg
delete mode 100644 src/main/resources/extra-icons/netlify.svg
delete mode 100644 src/main/resources/extra-icons/newui/7zip.svg
delete mode 100644 src/main/resources/extra-icons/newui/archive.svg
delete mode 100644 src/main/resources/extra-icons/newui/archive_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/avro.svg
delete mode 100644 src/main/resources/extra-icons/newui/avro_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/c.svg
delete mode 100644 src/main/resources/extra-icons/newui/c_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/config.svg
delete mode 100644 src/main/resources/extra-icons/newui/config_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/cpp.svg
delete mode 100644 src/main/resources/extra-icons/newui/cpp_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_db2.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_db2_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_fleet.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_fleet_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_h2.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_h2_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_hsqldb.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_hsqldb_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_jpabuddy.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_jpabuddy_alt.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_jpabuddy_alt2.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_jpabuddy_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_jpabuddy_alt3.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_jpabuddy_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_jpabuddy_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_mariadb.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_mariadb_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_mysql.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_mysql_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_oracle.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_oracle_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_android.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_android_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_ios.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_ios_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_linux.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_linux_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_macos.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_macos_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_web.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_web_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_windows.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_os_windows_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_postgresql.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_postgresql_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_pytest_cache.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_pytest_cache_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_python_venv.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_python_venv_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_sqlite.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_sqlite_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_sqlserver.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_sqlserver_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_teamcity.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_teamcity_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_tmp.svg
delete mode 100644 src/main/resources/extra-icons/newui/folder_tmp_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/h.svg
delete mode 100644 src/main/resources/extra-icons/newui/h_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helm.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmChart.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmChart_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmChartsDirectory.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmChartsDirectory_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmDirectory.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmDirectory_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmNotes.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmNotes_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmRequirementsYaml.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmRequirementsYaml_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmTemplatesDirectory.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmTemplatesDirectory_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmTemplatesTestDirectory.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmTemplatesTestDirectory_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmUndeployable.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmUndeployable_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmValues.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmValues_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helm_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmlogo.svg
delete mode 100644 src/main/resources/extra-icons/newui/helmlogo_alt.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/abstractException_.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/abstractException__dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enumKotlin_.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enumKotlin__dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enumKotlin_alt.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enumKotlin_alt2.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enumKotlin_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enumKotlin_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enum_.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enum__dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enum_alt.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enum_alt2.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enum_alt2_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/enum_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/exceptionClass_.svg
delete mode 100644 src/main/resources/extra-icons/newui/ide/exceptionClass__dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/onap-cba-blueprint.svg
delete mode 100644 src/main/resources/extra-icons/newui/onap-cba-blueprint_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/onap-cba-definitions.svg
delete mode 100644 src/main/resources/extra-icons/newui/onap-cba-definitions_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/writerside_cfg.svg
delete mode 100644 src/main/resources/extra-icons/newui/writerside_cfg_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/writerside_list.svg
delete mode 100644 src/main/resources/extra-icons/newui/writerside_list_dark.svg
delete mode 100644 src/main/resources/extra-icons/newui/writerside_tree.svg
delete mode 100644 src/main/resources/extra-icons/newui/writerside_tree_dark.svg
delete mode 100644 src/main/resources/extra-icons/nginx.svg
delete mode 100644 src/main/resources/extra-icons/noai.svg
delete mode 100644 src/main/resources/extra-icons/noai_alt.svg
delete mode 100644 src/main/resources/extra-icons/noai_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/noai_dark.svg
delete mode 100644 src/main/resources/extra-icons/nodemon.svg
delete mode 100644 src/main/resources/extra-icons/notice.svg
delete mode 100644 src/main/resources/extra-icons/notice_dark.svg
delete mode 100644 src/main/resources/extra-icons/nox.svg
delete mode 100644 src/main/resources/extra-icons/npm.svg
delete mode 100644 src/main/resources/extra-icons/npmignore.svg
delete mode 100644 src/main/resources/extra-icons/npmignore_dark.svg
delete mode 100644 src/main/resources/extra-icons/nsis.svg
delete mode 100644 src/main/resources/extra-icons/nsis_dark.svg
delete mode 100644 src/main/resources/extra-icons/nuget.svg
delete mode 100644 src/main/resources/extra-icons/nuget_dark.svg
delete mode 100644 src/main/resources/extra-icons/nx.svg
delete mode 100644 src/main/resources/extra-icons/nx_alt.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/libo-calc.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/libo-draw.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/libo-impress.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/libo-math.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/libo-symbol-black.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/libo-writer.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/localc.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/lodraw.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/loimpress.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/lomain.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/lomath.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/lowriter.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/msexcel-2019.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/msexcel-papirus.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/msexcel.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msexcel@2x.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msexcel@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msexcel_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msonenote-2019.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/msonenote.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msonenote@2x.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msonenote@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msonenote_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/mspowerpoint-2019.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/mspowerpoint-papirus.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/mspowerpoint.png
delete mode 100644 src/main/resources/extra-icons/officedocs/mspowerpoint@2x.png
delete mode 100644 src/main/resources/extra-icons/officedocs/mspowerpoint@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/mspowerpoint_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msproject-2019.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/msproject.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msproject@2x.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msproject@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msproject_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msvisio-2019.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/msvisio.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msvisio@2x.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msvisio@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msvisio_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msword-2019.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/msword-papirus.svg
delete mode 100644 src/main/resources/extra-icons/officedocs/msword.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msword@2x.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msword@2x_dark.png
delete mode 100644 src/main/resources/extra-icons/officedocs/msword_dark.png
delete mode 100644 src/main/resources/extra-icons/onap-cba-blueprint.svg
delete mode 100644 src/main/resources/extra-icons/onap-cba-blueprint_dark.svg
delete mode 100644 src/main/resources/extra-icons/onap-cba-definitions.svg
delete mode 100644 src/main/resources/extra-icons/onap-cba-definitions_dark.svg
delete mode 100644 src/main/resources/extra-icons/onap-cba-tosca.svg
delete mode 100644 src/main/resources/extra-icons/onap-cba-tosca_dark.svg
delete mode 100644 src/main/resources/extra-icons/opentofu.svg
delete mode 100644 src/main/resources/extra-icons/packageinfojava.svg
delete mode 100644 src/main/resources/extra-icons/packageinfojava_dark.svg
delete mode 100644 src/main/resources/extra-icons/packagejsonlock.svg
delete mode 100644 src/main/resources/extra-icons/pdd.svg
delete mode 100644 src/main/resources/extra-icons/pdd_dark.svg
delete mode 100644 src/main/resources/extra-icons/pdf.svg
delete mode 100644 src/main/resources/extra-icons/pdf_alt.svg
delete mode 100644 src/main/resources/extra-icons/pdf_alt2.svg
delete mode 100644 src/main/resources/extra-icons/pdf_alt3.svg
delete mode 100644 src/main/resources/extra-icons/pdf_dark.svg
delete mode 100644 src/main/resources/extra-icons/pid.svg
delete mode 100644 src/main/resources/extra-icons/pid_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/auto.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/auto_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/checkmark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/checkmark_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/contextHelp.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/export.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/export_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/folder_newui.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/folder_newui_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/folder_oldui.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/gutterCheckBox.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/gutterCheckBoxSelected.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/gutterCheckBoxSelected_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/gutterCheckBox_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/import.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/import_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/reboot.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/reboot_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/refresh.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/refresh_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/remove.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/remove_dark.svg
delete mode 100644 src/main/resources/extra-icons/plugin-internals/web.svg
delete mode 100644 src/main/resources/extra-icons/pnpm.svg
delete mode 100644 src/main/resources/extra-icons/poetry.svg
delete mode 100644 src/main/resources/extra-icons/poetry_lock.svg
delete mode 100644 src/main/resources/extra-icons/poetry_lock_dark.svg
delete mode 100644 src/main/resources/extra-icons/postcss.svg
delete mode 100644 src/main/resources/extra-icons/postman.svg
delete mode 100644 src/main/resources/extra-icons/postman_col.svg
delete mode 100644 src/main/resources/extra-icons/postman_env.svg
delete mode 100644 src/main/resources/extra-icons/prettier.svg
delete mode 100644 src/main/resources/extra-icons/prettier_alt.svg
delete mode 100644 src/main/resources/extra-icons/prettier_dark.svg
delete mode 100644 src/main/resources/extra-icons/prettierignore.svg
delete mode 100644 src/main/resources/extra-icons/prettierignore_dark.svg
delete mode 100644 src/main/resources/extra-icons/privacy.svg
delete mode 100644 src/main/resources/extra-icons/proguard.svg
delete mode 100644 src/main/resources/extra-icons/proguard_dark.svg
delete mode 100644 src/main/resources/extra-icons/prometheus.svg
delete mode 100644 src/main/resources/extra-icons/puppet.svg
delete mode 100644 src/main/resources/extra-icons/pytest.svg
delete mode 100644 src/main/resources/extra-icons/qodana.svg
delete mode 100644 src/main/resources/extra-icons/qodana_alt.svg
delete mode 100644 src/main/resources/extra-icons/readme.svg
delete mode 100644 src/main/resources/extra-icons/readme_alt.svg
delete mode 100644 src/main/resources/extra-icons/readme_alt2.svg
delete mode 100644 src/main/resources/extra-icons/readme_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/readme_dark.svg
delete mode 100644 src/main/resources/extra-icons/redis.svg
delete mode 100644 src/main/resources/extra-icons/rego.svg
delete mode 100644 src/main/resources/extra-icons/renovate.svg
delete mode 100644 src/main/resources/extra-icons/requirementstxt_python.svg
delete mode 100644 src/main/resources/extra-icons/requirementstxt_python_alt.svg
delete mode 100644 src/main/resources/extra-icons/restyled.svg
delete mode 100644 src/main/resources/extra-icons/restyled_alt.svg
delete mode 100644 src/main/resources/extra-icons/restyled_alt2.svg
delete mode 100644 src/main/resources/extra-icons/restyled_dark.svg
delete mode 100644 src/main/resources/extra-icons/roadmap.svg
delete mode 100644 src/main/resources/extra-icons/roadmap_dark.svg
delete mode 100644 src/main/resources/extra-icons/robotframework.svg
delete mode 100644 src/main/resources/extra-icons/robotframework_alt.svg
delete mode 100644 src/main/resources/extra-icons/robotframework_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/rollup.svg
delete mode 100644 src/main/resources/extra-icons/rpm.svg
delete mode 100644 src/main/resources/extra-icons/rultor.svg
delete mode 100644 src/main/resources/extra-icons/rultor_dark.svg
delete mode 100644 src/main/resources/extra-icons/sass.svg
delete mode 100644 src/main/resources/extra-icons/scalingo.svg
delete mode 100644 src/main/resources/extra-icons/scalingo_dark.svg
delete mode 100644 src/main/resources/extra-icons/screwdriver.svg
delete mode 100644 src/main/resources/extra-icons/scss.svg
delete mode 100644 src/main/resources/extra-icons/security.svg
delete mode 100644 src/main/resources/extra-icons/semaphoreci.svg
delete mode 100644 src/main/resources/extra-icons/sequelize.svg
delete mode 100644 src/main/resources/extra-icons/snap.svg
delete mode 100644 src/main/resources/extra-icons/sonar.svg
delete mode 100644 src/main/resources/extra-icons/sonar_dark.svg
delete mode 100644 src/main/resources/extra-icons/storybook.svg
delete mode 100644 src/main/resources/extra-icons/stylus-browserext.svg
delete mode 100644 src/main/resources/extra-icons/svelte.svg
delete mode 100644 src/main/resources/extra-icons/svg.svg
delete mode 100644 src/main/resources/extra-icons/svg_alt.svg
delete mode 100644 src/main/resources/extra-icons/svg_dark.svg
delete mode 100644 src/main/resources/extra-icons/svgo.svg
delete mode 100644 src/main/resources/extra-icons/svgo_alt.svg
delete mode 100644 src/main/resources/extra-icons/swagger.svg
delete mode 100644 src/main/resources/extra-icons/swagger_alt.svg
delete mode 100644 src/main/resources/extra-icons/swaggerignore.svg
delete mode 100644 src/main/resources/extra-icons/swaggerignore_dark.svg
delete mode 100644 src/main/resources/extra-icons/tailwindcss.svg
delete mode 100644 src/main/resources/extra-icons/terraform.svg
delete mode 100644 src/main/resources/extra-icons/terraform_dark.svg
delete mode 100644 src/main/resources/extra-icons/test-javascript.svg
delete mode 100644 src/main/resources/extra-icons/test-javascript_alt.svg
delete mode 100644 src/main/resources/extra-icons/test-ts.svg
delete mode 100644 src/main/resources/extra-icons/test-ts_alt.svg
delete mode 100644 src/main/resources/extra-icons/testing.svg
delete mode 100644 src/main/resources/extra-icons/testing_dark.svg
delete mode 100644 src/main/resources/extra-icons/tinylog_properties.svg
delete mode 100644 src/main/resources/extra-icons/todo.svg
delete mode 100644 src/main/resources/extra-icons/todo_alt.svg
delete mode 100644 src/main/resources/extra-icons/todo_alt_dark.svg
delete mode 100644 src/main/resources/extra-icons/todo_dark.svg
delete mode 100644 src/main/resources/extra-icons/tomcat.svg
delete mode 100644 src/main/resources/extra-icons/toml.svg
delete mode 100644 src/main/resources/extra-icons/toml_dark.svg
delete mode 100644 src/main/resources/extra-icons/tox.svg
delete mode 100644 src/main/resources/extra-icons/travis.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt02.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt03.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt04.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt05.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt06.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt07.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt08.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt09.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt10.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt11.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt12.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt13.svg
delete mode 100644 src/main/resources/extra-icons/travis_alt14.svg
delete mode 100644 src/main/resources/extra-icons/tsconfig.svg
delete mode 100644 src/main/resources/extra-icons/tsx.svg
delete mode 100644 src/main/resources/extra-icons/typescript-def.svg
delete mode 100644 src/main/resources/extra-icons/typescript.svg
delete mode 100644 src/main/resources/extra-icons/typescript_dark.svg
delete mode 100644 src/main/resources/extra-icons/uml.svg
delete mode 100644 src/main/resources/extra-icons/uml_dark.svg
delete mode 100644 src/main/resources/extra-icons/vagrant.svg
delete mode 100644 src/main/resources/extra-icons/velocity.svg
delete mode 100644 src/main/resources/extra-icons/version.svg
delete mode 100644 src/main/resources/extra-icons/version_dark.svg
delete mode 100644 src/main/resources/extra-icons/video.svg
delete mode 100644 src/main/resources/extra-icons/video_alt.svg
delete mode 100644 src/main/resources/extra-icons/video_alt2.svg
delete mode 100644 src/main/resources/extra-icons/video_alt3.svg
delete mode 100644 src/main/resources/extra-icons/vite.svg
delete mode 100644 src/main/resources/extra-icons/vite_alt.svg
delete mode 100644 src/main/resources/extra-icons/vitest.svg
delete mode 100644 src/main/resources/extra-icons/vitest_dark.svg
delete mode 100644 src/main/resources/extra-icons/vscode.svg
delete mode 100644 src/main/resources/extra-icons/weblate.svg
delete mode 100644 src/main/resources/extra-icons/webpack.svg
delete mode 100644 src/main/resources/extra-icons/webpack_alt.svg
delete mode 100644 src/main/resources/extra-icons/werf.svg
delete mode 100644 src/main/resources/extra-icons/werf_dark.svg
delete mode 100644 src/main/resources/extra-icons/wheel.svg
delete mode 100644 src/main/resources/extra-icons/wma.svg
delete mode 100644 src/main/resources/extra-icons/wma_dark.svg
delete mode 100644 src/main/resources/extra-icons/writerside.svg
delete mode 100644 src/main/resources/extra-icons/writerside_cfg.svg
delete mode 100644 src/main/resources/extra-icons/writerside_list.svg
delete mode 100644 src/main/resources/extra-icons/writerside_list_dark.svg
delete mode 100644 src/main/resources/extra-icons/writerside_tree.svg
delete mode 100644 src/main/resources/extra-icons/xiph.svg
delete mode 100644 src/main/resources/extra-icons/yang.svg
delete mode 100644 src/main/resources/extra-icons/zalando.svg
delete mode 100644 src/main/resources/extra-icons/zalando_dark.svg
delete mode 100644 src/test/java/lermitage/intellij/extra/icons/cfg/ArchTest.java
delete mode 100644 src/test/java/lermitage/intellij/extra/icons/cfg/ResourcesTest.java
delete mode 100644 src/test/java/lermitage/intellij/extra/icons/cfg/services/SettingsServiceTest.java
delete mode 100644 src/test/resources/issue141/244836649-83cdae88-aa9a-437b-8790-410ecd4ec7c6.svg
delete mode 100644 src/test/resources/issue141/244836653-bb7aa2bf-3b5f-47e2-b21d-95883c4229d4.svg
delete mode 100644 src/test/resources/issue141/244836654-837a720a-fcb4-40eb-942d-667e2b39c4d3.svg
delete mode 100644 src/test/resources/issue141/244836656-43ae538c-ffc5-4bce-b789-c2045ca06367.svg
delete mode 100644 src/test/resources/issue141/extra-icons-issue141-icon-pack.json
delete mode 100644 src/test/resources/junit-platform.properties
delete mode 100644 svgo.config.js
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 65cda88c..00000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,956 +0,0 @@
-# Extra Icons Change Log
-
-## 2024.1.2 (WIP)
-* optimize icons size by ~3% with SVGO 3.2.0.
-* fix [#176](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/176): clicking 'Go to Extra Icons settings' from the notification just throws an error.
-
-## 2024.1.1 (2024/01/02)
-* **INFO**: JetBrains will introduce a new business model for paid/freemium plugins. This model will offer a perpetual license, **allowing users to make a one-time payment for the plugin and use it for a lifetime**. [Get more information here](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/docs/LICENSE_FAQ.md#how-to-get-a-lifetime-license). There is no ETA yet.
-* build script: prepare the work for the introduction of lifetime licenses.
-* fix [#175](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/175): `java.lang.Throwable: Must be precomputed`. UI Scale detection could fail at startup. It should be fixed now.
-* initial support of [Flutter](https://flutter.dev) icons.
-* improve Prettier support.
-* improve Gradle support.
-* add the new alternative GitLab "next" orange icon for `.gitlab-ci.yml` files.
-* rework GitLab folder icon.
-* rework Privacy icon.
-* support `(.)log(s)`folders.
-* support `.noai` files (which tell the AI Assistant plugin to block AI features for the containing project).
-* support [Detekt](https://detekt.dev/docs/introduction/configurations/) files ending by `detekt-config.yml` or `detekt.yml` (I may try to pick the configured Detekt filename from the `build.gradle(.kts)` file later).
-* support Qodana `qodana.yaml` files.
-* plugin's license is now verified occasionally, in addition to the verification done by IDE at startup.
-* starting from 2024, I will occasionally send some [coupons](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/docs/LICENSE_FAQ.md#i-received-a-coupon-for-a-free-license-how-does-it-work) for Free licenses on [Twitter](https://twitter.com/JLermitage) and [Bluesky](https://bsky.app/profile/jonathanlermitage.bsky.social). Stay tuned.
-
-## 2023.4.2 (2023/12/03)
-* **INFO**: JetBrains will introduce a new business model for paid/freemium plugins. This model will offer a perpetual license, **allowing users to make a one-time payment for the plugin and use it for a lifetime**. [Get more information here](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/docs/LICENSE_FAQ.md#how-to-get-a-lifetime-license).
-* implement [IDEA-336801](https://youtrack.jetbrains.com/issue/IDEA-336801) workaround: IDE's icon cache prevented some icons override on refresh (per example, after you enabled or disabled a custom icon).
-* implement a temporary and partial workaround for [IDEA-339254](https://youtrack.jetbrains.com/issue/IDEA-339254): can't refresh Java Exception and Java Abstract Exception IDE icons.
-* settings panel: inform user about some IntelliJ issues affecting this plugin.
-* support `.git-blame-ignore-revs` files.
-* add Angular 17 "renaissance" alternative icon for `angular.json` files.
-
-## 2023.4.1 (2023/11/20)
-* improve Jenkins support. Thanks **lauragra-y (Laura Gray)** for her contribution!
-* add new UI icon variants for Tox folders, Python `.egg-info` folders, Python PyTest cache folders and Python Virtual Environment folders.
-* Extra Icons can now override *JPA Buddy* icons in recent IDEs. A new colorful icon theme is available online if you don't like JPA Buddy toolwindows gray icons. See [JPABuddyOldUITheme](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/themes/THEMES.md#jpabuddyolduitheme).
-* Extra Icons can now override *Extra ToolWindow Colorful Icons* icons.
-* Also added an icon theme for AI Assistant toolwindows icon. See [AIAssistantTheme](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/themes/THEMES.md#aiassistanttheme).
-* implement [#170](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/170): when registering a user icon, conditions parameters (except for regex and Facets) should be automatically lower-cased as files and folders paths are also lower-cased before evaluation. Also, the model tester now detects if path contains a *parent folder*, allowing you to test *Parents* condition. The model tester also finds file name when you give a full path.
-
-## 2023.3-231 (2023/11/05)
-* important code rework [#166](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/166): improve the way Extra Icons plugin triggers icons refresh and IDE's filename index querying. You should see less `Slow operations are prohibited on EDT` and threading related issues like `...should be accessed only from EDT`.
-* fix [#36](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/36): can't override Python icons in PyCharm, Go icons in GoLand, and Tree and List icons in WriterSide.
-* try to fix [#165](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/165): `AlreadyDisposedException: Cannot create com.intellij.ui.docking.DockManager because container is already disposed` on IDE or plugin upgrade.
-* fix new UI icon variants rendering when overriding IDE icons.
-* performance improvement when displaying bundled icons (reduced CPU usage).
-* performance improvement when displaying user icons (reduced I/O usage).
-* performance improvement when refreshing icons (project views were refreshed 6 times, now reduced to a single refresh).
-* support some [Writerside](https://www.jetbrains.com/writerside/) icons: `writerside.cfg`, `*.list` and `*.tree`. Please note Writerside IDE has similar [limitation](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/36) as PyCharm and GoLand IDEs: can't override some Writerside icons in project view. There is no problem with Writerside plugin running in IntelliJ.
-* settings UI, fix compatibility with Gateway: some Apache Commons libraries are used by plugin, but they may not be bundled with Gateway.
-* settings UI, *Quick action*: the icon group chooser now integrates the **Speed Search** functionality, [similar to Speed Search for Tool Windows](https://www.jetbrains.com/help/idea/speed-search-in-the-tool-windows.html). Select the icon group chooser, type text, and the selection moves to the first item that matches the specified string.
-* support Microsoft [Bicep](https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/overview) `*.bicep` files.
-* rework Backup, Build, Cargo, Codefresh, Deptective, Glowroot, Hadolint, Jar/Dar, JVM config, JSBeautify, JSHint, Kibana, Lerna, Logstash, Muse, MySQL `my.ini`, MySQL Workbench, Nox, PDF, Roadmap, Stylus, To-Do, Tox, Windows executable and Zalando Zappr icons in order to make them compatible with Gateway.
-* change default CSV and Video icons.
-* add an alternative icon for CSV files.
-
-## 2023.2.12-231 (2023/10/15)
-* fix [157](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/157): `java.lang.Throwable: TreeUI should be accessed only from EDT` with Rider 2023.3 EAP 1.
-* fix a bug that set `Use IDE filename index` feature to `false` when project-level settings were activated. With this release, this feature will be set to `true` just one time. Feel free to turn it to `false` if wanted (see Extra Icons settings, `Advanced` tab).
-* silent some unwanted `Control-flow exceptions` error reports. They appeared on project loading, if IDE failed to load some user icons (for obscure reasons I can't detect nor fix).
-* important code rework, which will hopefully prevent more `Slow operations are prohibited on EDT` warnings. I will continue my effort in a next release (I think I found some promising ideas, which would improve stability and performance).
-* add a button to detect the correct *Additional UI Scale Factor*.
-* settings UI: when registering a user icon, the icon chooser now integrates the **Speed Search** functionality, [similar to Speed Search for Tool Windows](https://www.jetbrains.com/help/idea/speed-search-in-the-tool-windows.html). Select the icon chooser, type text, and the selection moves to the first item that matches the specified string. A future update will bring the same functionality to the icons table.
-* settings UI: add a button to reset Extra Icons startup hints.
-* add *new UI* icons for Ini, Cfg, Conf, Config, C, C++ and H files.
-* support `.gitlab/dependabot.yml` files. Thanks **mateusz-bajorek (Mateusz Bajorek)** for his contribution!
-* support OpenTofu `*.tf` and `*.tf.json` files.
-* rework Cerebro, Jenkins, Log4j, Logback and `package-lock.json` icons in order to make them compatible with Gateway.
-* cleanup: remove unused icons.
-
-## 2023.2.11-231 (2023/09/18)
-* fix [156](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/156): important rework of SVG user icons scaling. Most icons should no longer be blurry. Only small SVG icons (with `width` or `height` attributes < 16) will be blurry. For these icons, you are invited to rework them and set higher `width` and `height` values (ideally 16). **Reminder**: if the operating system's **fractional scaling** is activated, please go to plugin's settings, *Advanced* tab, then adjust the *Additional UI Scale Factor* value (ex: for a 125% global scale factor, set it to 1.25). [See details here](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/156#issuecomment-1722545407).
-* remove JSVG from dependencies. SVG icons are now handled by JetBrains API directly, which uses its own version of JSVG.
-* improve Markdown icon.
-* rework Authors, Asciidoc, Bamboo, Berkshelf, Contact icons in order to make them compatible with Gateway.
-
-## 2023.2.10-231 (2023/09/03)
-* fix [151](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/151): NullPointerException in settings form (`pluginIconsSettingsTableModel` is null).
-* fix [152](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/152): plugin not compatible with JetBrains Gateway.
-* fix support of Caddy (Caddyfile) files.
-* add new UI icon for JetBrains Fleet `.fleet` folders.
-* rework the way IDE and project level settings are persisted. A limited set of IDE level settings may have been saved at project level (and vice-versa) in the past. This should be fixed now.
-* use the new GitLab icon by default instead of the old one.
-* settings: try to auto-detect default window scale (`Additional UI Scale Factor` in advanced settings) on new setups. This is useful only if you added user icons or downloaded icon packs. On existing setups, default value is still 1.
-* internal: code cleanup, remove compatibility code for unsupported old IDEs. Minor performance improvement.
-* info: JetBrains [**Gateway support is in progress**](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/milestone/27). Icons rendering works when plugin is installed in Host, or in both Host and Client, but not in Client only. Also, for now, plugin's settings panels are broken and some icons are too big, but icons override works. I have [plans](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/milestone/27) to fix these issues.
-* rework Codacy icon in order to make it compatible with Gateway.
-* rework Editorconfig icon in order to make it compatible with Gateway.
-
-## 2023.2.9-231 (2023/08/12)
-* rework settings panel.
-* experimental: add an option to avoid usage of IDE filename index. Without IDE filename index, Angular, GraphQL and Helm support may be limited, but it may hopefully avoid some errors and warnings when using slow operations in EDT, things like that.
-* internal: code rework, avoid potential future issues.
-* improve Codacy support.
-* support Codeception `codeception.dist.yml` files.
-* support JetBrains Fleet `.fleet` folders.
-* fix Lighttpd icon rendering on latest IDEs (JetBrains changed their SVG renderer for JSVG, which breaks some SVG files).
-* internal: minor performance improvement.
-
-## 2023.2.8-231 (2023/07/12)
-* fix [146](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/146): NullPointerException in settings form (`additionalUIScale` is null).
-* fix usage of a deprecated API in order to improve compatibility with future IDEs.
-* internal: fix unit tests for IDE 2023.2 EAP7.
-
-## 2023.2.7-231 (2023/07/07)
-* **improve Git Submodules support**. Git Submodules are now automatically re-detected on every `.gitmodules` file update.
-* support Coveralls, Elixir and Sonarqube files. Thanks **JuanDGiraldoM** for his contribution!
-* support [Just](https://github.com/casey/just) `justfile` files.
-* **you can now choose to use icons *new UI* variants** based on current active UI, or force the use of *old* or *new UI* variants, when they exist. See Extra Icons settings.
-* add *new UI* icons for Java Enums.
-* add *new UI* icons for Kotlin Enums.
-* add *new UI* icons for Exceptions.
-* add *new UI* icons for Abstract Exceptions.
-* add *new UI* icons for Avro files.
-* add *new UI* icons for various ONAP files.
-* add *new UI* icons for JPA Buddy, Flyway, Liquibase and TeamCity folders.
-* add *new UI* icons for various Helm files and folders.
-* add *new UI* icons for various archive files.
-* fix: restore missing Helm templates test folder icon.
-* fix IDE icons display in settings panel.
-* minor performance optimizations.
-* just a reminder: *IDE icons* override (which targets a specific IDE icon like Java Enums, not a file path) may work randomly with the new UI. [An issue has been accepted](https://youtrack.jetbrains.com/issue/IDEA-321006) by JetBrains and, I guess, a future IDE update will fix this issue. Unfortunately, I can do nothing at the plugin level. We have to wait for a fix at the IDE level.
-
-## 2023.2.6-231 (2023/06/11)
-* fix [137](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/137). Silent `MissingResourceException` errors when trying to find the PSI object for a file. This should have no impact on user experience, as it seemed to happen when displaying files in folders such as `node_modules` only. Files in these folders will show their original icons.
-* fix [140](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/140). Important code rework, which should fix some "slow operations are prohibited on EDT" error messages with EAP IDEs.
-* fix [141](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/141). Enable antialiasing when displaying SVG user icons.
-* fix: don't freeze settings UI when displaying invalid SVG user icons.
-* internal: add the ability to create icons for the Old or New UI only. This way, I will be able to provide icons that fit better with the New UI.
-
-## 2023.2.5-231 (2023/05/24)
-* rework some SVG icons. File and tab icons were rendered correctly, but icons preview in config panel was a bit altered.
-* fix some missing Chinese i18n.
-* hide some useless warning messages about IDE filename index issues and icons refreshing. They're still logged, but you will no longer see alerts in your IDE.
-
-## 2023.2.4-231 (2023/05/21)
-* fix support of IDE 2023.2 EAP: replaced Apache Batik by JSVG for SVG rendering + some code rework. Batik were interfering with Grazie Lite, leading to its deactivation.
-* rework ImgBot, Liquibase, Haxe, Cookie, JavaScript and LGTM SVG icons. IDE 2023.2 EAP raised an error when displaying these icons, or misunderstood some SVG attributes, leading to black&white or blank rendering. JetBrains changed their SVG renderer (replaced Apache Batik by JSVG), which is a bit less functional for now, but lighter.
-* important code rework, which will hopefully prevent some weird IDE errors. Additional improvements will come soon.
-* I think some annoying bugs have been solved since 2023.2.2 plugin release, which requires a 2023.1+ IDE (due to breaking changes in JetBrains APIs). I will maintain a branch for 2022 IDEs for a few months in order to backport fixes. I will definitively abandon 2022 IDEs once all critical issues have been solved or mitigated. Sorry for not having done it earlier.
-
-## 2023.2.3 (2023/05/09)
-* avoid unnecessary error when failed to query IDE filename index. Plugin will try again later.
-* support [Vitest](https://vitest.dev/config/) config files.
-* support Python Wheel files.
-
-## 2023.2.2 (2023/05/05)
-* set minimal IDE version to 2023.1 and fix [#121](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/121): "slow operations are prohibited on EDT". It occurred while querying the IDE filename index in order to detect some specific files (like Angular and Helm related files).
-* fix [#126](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/126): "slow operations are prohibited on EDT" when invoking a file selector.
-* various minor fixes in settings panels.
-* fix support of [Poetry](https://python-poetry.org) files.
-* fix model creation/update dialog: user should be allowed to select a single icon, not many.
-* internal: some code rework, and improved code quality.
-* nota: some *"slow operations are prohibited on EDT"* errors may still be logged (it breaks nothing, these are only warning messages) on EAP IDE builds, when you open a file chooser, while creating a new icon model, or when importing and exporting Icon Packs. You can disable these warnings by following [these instructions](https://plugins.jetbrains.com/plugin/11058-extra-icons/errors-workarounds). A fix will be provided later.
-
-## 2023.2.1 (2023/04/21)
-* you can now import and export user icons. See **Icon Pack** in Extra Icons settings. This also means you can easily share icon themes with friends.
-* created a downloadable [Icon Pack](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/themes/THEMES.md#downloadable-icon-packs) which restores some old file and folder icons in the new UI.
-* implement [#118](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/118): add a custom error reporter which prefills an issue on Extra Icons' GitHub repository.
-* fix editor tabs icon reloading on config change.
-* fix [#125](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/125): custom icon type errors after enabling Chinese UI. Thanks **Elziy** for helping!
-* fix [#120](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/120): minor UI improvement.
-* nota: issue [#121](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/121) "Slow operations are prohibited on EDT" fix will be shipped with 2023.2.2 plugin release, as it requires IDE 2023.1. I wanted to support old IDEs in 2023.2.1 plugin release. This issue occurs mainly in EAP and RC IDE builds, and you will find a safe workaround [here](https://plugins.jetbrains.com/plugin/11058-extra-icons/errors-workarounds).
-* improve Chinese UI translation. Thanks **Gerry** for helping!
-* support Mermaid files: use the official Mermaid logo instead of the icon displayed by the JetBrains Mermaid plugin.
-* support some [Poetry](https://python-poetry.org) files.
-* support `pytest.ini` files.
-* support `*.cc` and `*.hpp` files.
-* add an alternative icon for Composer files.
-* add an alternative icon for SVGO files.
-* add an alternative icon for Markdown files.
-* rework ArchUnit icon (PNG icon to SVG).
-* rework Cirrus icon (PNG icon to SVG).
-* rework Debian (deb files) icon (PNG icon to SVG).
-* rework Elasticsearch icon (PNG icon to SVG).
-* rework Gatling icon (based on new logo).
-* rework GoCD icon (PNG icon to SVG).
-* rework Readme icon.
-* rework Redis icon.
-* rework Version icon.
-* rework a certificate icon (PNG icon to SVG).
-* internal: some code rework, and improved code quality.
-
-## 2023.1.2 (2023/03/07)
-* support C, C++ and H files.
-* plugin's internationalization: provide English and Chinese UI translations. Nota: Chinese translation is automatically applied only if the official IDE [Chinese Language Pack](https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----) plugin is enabled.
-* minor aesthetic bugfix in config panel.
-* remove support of Caddy (Caddyfile). IDE 2023.1 EAP crashed loading this icon (SVG file with base64 encoded PNG). This is a known bug in IntelliJ.
-* internal: important code rework on SVG rendering.
-* [fix #119](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/119) can't display SVG icons with IDE 2023 EAP.
-
-## 2023.1.1 (2023/02/11)
-* minor UI improvement in settings panel: add icons to _Enable all... / Disable all..._ combobox items.
-* minor UI improvement in Model dialog: hide tester's input label when type is set to IDE icon.
-* rework JUnit5 icon (PNG icon to SVG), and add an alternative icon.
-* rework LibreOffice icons (PNG icons to SVG). Also added LibreOffice 7.5 [new icons](https://wiki.documentfoundation.org/ReleaseNotes/7.5#Design).
-* add alternative icons for MS Office Word, Excel and PowerPoint files.
-* add an alternative icon for CSV files.
-* add an alternative icon for KeePass files.
-
-## 2023.1 (2023/01/21)
-* settings: rework the icon which indicates if an IDE restart is needed.
-* internal: clear ExtraIcons internal caches associated to closed projects. It should reduce memory usage (a little).
-* internal: important code rework and refactoring, avoid some possible errors.
-* support Kustomize `kustomization.yaml` files.
-* remove Better Code Hub icons as [Better Code Hub has closed on December 31st 2022](https://github.com/marketplace/better-code-hub).
-
-## 2022.1.14 (2022/12/04)
-* [try to mitigate #114](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/114) PHPStorm freezes for a few seconds several times. The JetBrains Angular plugin may cause high CPU usage. Removed usage of the (optional) Angular plugin which was used to detect Angular projects. Angular projects are still detected by using the IDE filename index, so you should still see Angular icons. Unfortunately, you may still experience some IDE freezes: this is an issue with the Angular plugin itself. It seems to be [fixed](https://youtrack.jetbrains.com/issue/WEB-57461) in IntelliJ 2022.3 RC, so you may want to wait for the 2022.3 final release of your IDE, or temporarily disable the Angular plugin.
-* internal: upgrade TwelveMonkeys library to 3.9.4 (used to preview and resize PNG icons).
-* fix usage of a deprecated API in order to improve compatibility with future 2023 IDEs.
-* improve Angular and JS/TS test icons.
-
-## 2022.1.13 (2022/11/11)
-* set minimal IDE version to 2022.1 and fix usage of a deprecated API used to query IDE filename index.
-* [fix #113](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/113) can't load custom icons from local drive on Windows.
-* internal: upgrade TwelveMonkeys library to 3.9.3 (used to preview and resize PNG icons).
-
-## 2022.1.12 (2022/10/15)
-* add graphql-resolver, Rego and Mongodb icons. Improve frameworks detection mechanism. Thx to contributor **fcannizzaro**.
-* I'm working on tooling and preparing the support for the 2023 IDEs. That's why this changelog will probably be a bit poor until next year. Meanwhile, bugfixes remain my priority, so don't hesitate to raise issues.
-
-## 2022.1.11 (2022/09/16)
-* [feat #110](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/110) config panel: add a text input field to test the conditions for User icons.
-* [fix #111](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/111) slow operations are prohibited on EDT.
-* config panel: minor UI improvements in Plugin icons list.
-* fix possible NPE when updating User icons conditions list.
-* I think IDE filename index issues are gone! Sorry for this annoying issue, it made me crazy. Big thanks to [Andreas Perhab](https://youtrack.jetbrains.com/issue/IDEA-291382/Assertion-failed-at-VirtualDirectoryImpldoFindChildById#focus=Comments-27-6445738.0-0), who found a solution using an Index Listener. Some explanations: we are not allowed to query the index during indexing. Extra Icons plugin needs to query the index in order to locate some files (for Angular and Helm support) and, unfortunately, the IDE seems to try to update icons (which invokes Extra Icons plugin, which tries to query the index) during indexing. This is not new, but it's more frequent since IJ 2022. Starting from now, we will silent this error, and we query the index a second time, once indexing tasks completed.
-
-## 2022.1.10 (2022/09/05)
-* add an option in Extra Icons settings in order to force icons reloading on demand. Use it if you still see errors when querying IDE filename index: wait until indexing is done, go to File, Settings, Appearance & Behavior, Extra Icons, then hit the `Reload projects icons` button. Again, feel free to upvote [IDEA-289822](https://youtrack.jetbrains.com/issue/IDEA-289822), it would help.
-* add an alternative Dependabot icon.
-* add an alternative Draw.io icon.
-* add an alternative Helm icon.
-* add an alternative HTTP icon.
-* support [YANG](https://network.developer.nokia.com/sr/learn/yang/understanding-yang/) files.
-* rework some Docker icons, and fix a Docker Ignore dark icon.
-* improve icons reloading on config change.
-
-## 2022.1.9 (2022/08/27)
-* support many audio/video files. Thx to contributor **Serial-ATA**.
-* try to mitigate errors when querying IDE filename index (will now retry twice before failing). This is a JetBrains issue, **feel free to upvote** [**IDEA-289822**](https://youtrack.jetbrains.com/issue/IDEA-289822), it would help.
-* internal: upgrade TwelveMonkeys library to 3.8.3 (used to preview PNG icons).
-* rework Haxe icons (PNG icon to SVG).
-* improve Dotenv and Cookie file support.
-* support `go.mod` files (I am proud of this icon :smile:).
-* support GitHub Actions YML files.
-* disable plugin's dynamic reloading since it never worked. Plugin uses an IconPathPatcher implementation in order to override IDE icons, which prevents dynamic reloading.
-
-## 2022.1.8 (2022/08/06)
-* support Nx `nx.json` files.
-* support many audio files. Thx to contributor **Serial-ATA**.
-* support Cypress json files.
-* add an alternative Prettier icon.
-* add an alternative 7zip icon.
-* internal: fix usage of some deprecated code.
-* don't crash if plugin can't query the IDE filename index, and simply display a notification.
-* add an option to ignore plugin's warnings.
-
-## 2022.1.7 (2022/07/16)
-* performance improvement.
-* implement #100: add buttons to allow reordering of entries in the User Icons list.
-* improve support of older IDEs (based on IJ 2021). IDE build number is detected at runtime and code is adapted when needed.
-* improve Flyway and Liquibase support.
-* support VSCode `*.code-workspace` files.
-* support `*.tgz` files.
-* support Deno json and jsonc files.
-* refactoring and code cleanup.
-
-## 2022.1.6 (2022/06/25)
-* improve accuracy and performance of Angular support.
-* support various Helm files and folders.
-* support Cookie text files.
-* support `node_modules` folders.
-* add an alternative YAML icon.
-* the icons list in the configuration panel now indicates if you need to restart the IDE to see changes.
-* some code cleanup.
-
-## 2022.1.5 (2022/06/14)
-* fix #99: Angular support (when it looks for `angular.json` files) may freeze the IDE on some specific projects.
-* prevent a possible crash with the new IntelliJ UI (currently in preview) for IntelliJ 2022.2+ EAP (222.2889.14+).
-* rework Gradle icons.
-* add an alternative Gitlab icon (the latest version from the Gitlab website).
-
-## 2022.1.4 (2022/06/04)
-* support cache2k xml config files.
-* fix #96: rework Angular support.
-* add a dedicated color to Angular controller icon.
-* rework some Angular icons.
-
-## 2022.1.3 (2022/05/07)
-* internal: improve error handling.
-* support `requirements.txt` files in Python projects and projects with the Python facet.
-* support `lighttpd.conf` files.
-* override MDX icon when the MDX plugin is installed.
-* fix a Docker icon rendering issue in IJ 2022.1 in the _Services_ tool window and the _Run/Debug Configurations_ dialog.
-* fix PostCSS, Sequelize and Tailwindcss support.
-* config panel: UI improvements.
-* config panel: some icons now have tags, and you can enable and disable multiple icons by tags.
-* fix the priority of Angular icons when the Angular plugin is installed.
-* add alternative icons for FAQ files, and support HELP files.
-* fix #81: rework Angular support.
-* support `pnpm-lock.yaml` and `vite.config.ts` files. Thx **iamKyun**.
-
-## 2022.1.2 (2022/04/03)
-* rework Babel icon, and provide an alternative icon.
-* support more Prettier config files.
-* internal: upgrade TwelveMonkeys library to 3.8.2 (used to preview PNG icons).
-* improve support of IDE icons override.
-* support `werf.yaml` files.
-* support `FAQ` files (with `.md`, `.adoc`, `.txt`, `.rst` or no extension).
-* support PostCSS, Sequelize, Svelte, Tailwindcss and Nodemon files. **Thx francmarin98**.
-* support Commitlint config files.
-* internal: some code rework.
-* internal: remove usage of some deprecated code (replaced `com.intellij.util.Base64` by JDK11 implementation).
-* IDE 2021.1.3 is now the minimal supported version. This is a requirement to enable plugin's dynamic reloading. Previous versions of IDE (IntelliJ and any IntelliJ-based IDE) are affected by a [bug](https://youtrack.jetbrains.com/issue/IDEA-262732) that deletes plugin's settings on dynamic reload. This bug was fixed in IJ 2021.1.3, this is why I finally updated minimal IDE version in order to enable plugin's dynamic reloading safely.
-* experimental: plugin updates don't require IDE restart. It will probably apply with next releases. You may still have to restart IDE, I can't test for now, but at least it should be totally safe.
-
-## 2022.1.1 (2022/03/05)
-* **INFO**: Extra Icons is now a paid plugin: 5$ per year. Price decreases over time, and it's free for students, teachers and OSS developers. If you don't want to (or can't) support my work, feel free to use [previous releases](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/releases/tag/v1.69).
-* add more alternative icons (popular web browsers) for HTML files.
-* override YAML icon.
-* override Bash file icon.
-* support `.tox` folders.
-* support `mkdocs.yml` files.
-* support JSX files. Thx [koolskateguy89](https://github.com/koolskateguy89).
-* support `.github/dependabot.yml` files. Thx [koolskateguy89](https://github.com/koolskateguy89).
-* support [_gradle.lockfile_ and _buildscript-gradle.lockfile_](https://docs.gradle.org/current/userguide/dependency_locking.html) files.
-* support Eslint files. Thx [francmarin98](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/85).
-* add an alternative icon for SVG files. Thx [francmarin98](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/85).
-* add an alternative icon for Vite files. Thx [francmarin98](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/85).
-
-## 1.69.0 (2022/01/22)
-* you can now override IDE icons by icon name. Per example, you can override the Kotlin Class icon. To find IDE icon names, visit [IntelliJ icons list](https://jetbrains.design/intellij/resources/icons_list/), pick an icon and open the ZIP file: you can use the SVG file name.
-* improved support of Kotlin Gradle script icon.
-* override Java Enum, Java exception class and Java abstract exception class icons.
-* override Kotlin Enum icon.
-* override Docker and Docker Compose icons.
-* internal: minor code cleanup.
-* fix HTML support.
-
-## 1.68.0 (2021/12/28)
-* config panel: add missing scrollbar to user icons list.
-* config panel: minor UI improvements.
-* fix support of Dotenv files ([#79](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/79)).
-* add alternative icons for Gradle Kotlin Script files.
-* add alternative icons for KeePass files.
-* add alternative icons for Javascript (test) files.
-* add alternative icons for Typescript (test) files.
-* internal: upgrade TwelveMonkeys library to 3.8.1 (used to preview PNG icons).
-
-## 1.67.0 (2021/12/01)
-* support HtmlFiles, TypescriptDef, JSConfig, TSConfig, Typescript (test), and Javascript (test) files. Thx [franciscomarin98](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/78).
-* add alternative icons for MDX files.
-* support vanilla JS files.
-* rework JsMap icon.
-
-## 1.66.0 (2021/11/07)
-* support CSS and CssMap files. Thx [franciscomarin98](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/76).
-* support [jgitver](https://jgitver.github.io/#_maven_configuration) Maven configuration files.
-* support `.goreleaser.yml` files.
-* add alternatives icons for Kubernetes files.
-
-## 1.65.0 (2021/10/31)
-* add an alternative icon for JPA Buddy folders.
-* support JsMap files. Thx [franciscomarin98](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/75).
-* support PlantUML files.
-
-## 1.64.0 (2021/10/24)
-* support more NestJS files.
-* add an alternative icon for TODO files.
-* fix a typo. Thx [lromanov](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/74).
-
-## 1.63.0 (2021/10/11)
-* rework Nginx icon (PNG icon to SVG).
-* add an alternative icon for PDF files.
-* add an alternative icon for Tox files.
-* add an alternative icon for Webpack files.
-* support JFR snapshot files.
-* support MDX files.
-* fix ordering of icons in config panel, to show actual ordering priorities.
-* support NestJS files (you may want to disable Angular support as both frameworks share some file patterns).
-
-## 1.62.0 (2021/09/11)
-* temporarily reintroduce IntelliJ internal code (SVGLoader) to load SVG user icons. It provides better rendering of SVG icons than TwelveMonkeys (used as a ImageIO plugin), but we should avoid usage of internal code. TwelveMonkeys is still used for PNG user icons (higher compatibility).
-* performance improvements, especially in large projects. Thx [AlexPl292](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/68) for his investigations.
-* icons table: you can now find the icons that are enabled or not enabled by typing "yes" or "no" in the regex filter.
-* rework Storybook support: revert 1.61 patch and improve Storybook detection.
-
-## 1.61.0 (2021/08/29)
-* improve support of Storybook: include `*.jsx` and `*.tsx` files. Warning: the TSX extension is already associated to _Typescript + React_ files. You can deactivate the unwanted association in Extra Icons settings (tip: filter the icons table with "tsx", then disable _Storybook TSX_ or _Typescript + React_).
-* support [Screwdriver](https://docs.screwdriver.cd) `screwdriver.yaml` files.
-* support JPA Buddy `.jpb` folders.
-* rework a README icon (PNG icon to SVG).
-* add an alternative icon for README files.
-* you can now reuse bundled icons when creating user rules.
-* internal: code cleanup.
-
-## 1.60.0 (2021/08/07)
-* config panel: the regex filter is applied as you type.
-* internal: fix usage of deprecated code.
-* rework Android icon.
-* support [Nox](https://nox.thea.codes/en/stable/config.html) `noxfile.py` files.
-
-## 1.59.0 (2021/07/30)
-* support `AndroidManifest.xml` files.
-* support `proguard-rules.pro` files.
-* support Maven Shade Plugin `dependency-reduced-pom.xml` files.
-
-## 1.58.0 (2021/07/17)
-* improve Dockerfile support.
-* improve Backup files support.
-* support DLL files.
-
-## 1.57.0 (2021/07/01)
-* minimal IDE version is now 2020.3.
-* add alternative icons for MS Office files (MS Office 2019 SVG icons).
-* improve rendering quality of user SVG icons.
-
-## 1.56.0 (2021/06/20)
-* rework Draw.io icon and add an alternative icon.
-* rework Dependabot icons (PNG icon to SVG).
-* support Stylus (browser extension) `*.styl` files.
-* support Mergify YML files.
-* support `.*\.egg-info` folders.
-* internal: remove usage of code deprecated in IJ 2021.2.
-* internal: minor refactoring.
-
-## 1.55.0 (2021/05/29)
-* rework support of `*.spec.tsx` files.
-* support `Caddyfile` files.
-
-## 1.54.0 (2021/05/15)
-* improve rendering of custom PNG icons.
-* support [Vite](https://vitejs.dev) `vite.config.js` files.
-* support [Muse](https://docs.muse.dev) `.muse.toml` files.
-* support [Hadolint](https://github.com/hadolint/hadolint) `.hadolint.y(a)ml` files.
-
-## 1.53.0 (2021/05/08)
-* improve Storybook support.
-* experimental: try to fix `ArrayIndexOutOfBoundsException: Coordinate out of bounds!` error when loading some custom PNG icons.
-* internal: removed dependencies to IJ internal code used to load custom SVG icons. Replaced by TwelveMonkeys + Apache Batik libraries. This way, future IDE updates won't break this plugin.
-
-## 1.52.0 (2021/05/03)
-* fix Dotenv files support. Thx Philipp Voronin.
-* add an alternative icon for TODO files.
-* add an alternative icon for CodeShip files.
-* support TSX files.
-* support `jitpack.yml` files.
-* improve Storybook support.
-
-## 1.51.0 (2021/04/20)
-* add an alternative icon for EditorConfig files.
-* add an alternative icon for Binary files.
-* add an alternative icon for Contribution files.
-* support Storybook files and folders. Thx [Gaëtan Maisse](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/53).
-* rework Postman support.
-* support GoLang Arch Linter `.go-arch-lint.yml` files.
-
-## 1.50.0 (2021/04/06)
-* rework `.keep`, `.gitkeep`, `.hgkeep`, `.svnkeep` icon.
-* rework Python Virtual Environment folders.
-* rework Pytest folders.
-* rework all folder SVG icons: use opacity instead of light/dark gray colors.
-* support Python `venv` Virtual Environment folders. This is a less common name than `.venv`, but some users may prefer this alternative.
-* support SVGO 2 `svgo.config.js` files.
-* internal: migrate to [SVGO](https://github.com/svg/svgo) 2 (a tool to optimize SVG files): all SVG icons are optimized again with new default settings and some configuration.
-
-## 1.49.0 (2021/03/24)
-* improve Babel support. Thx [Alan Bouteiller](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/51).
-* support Python `.venv` Virtual Environment folders.
-* support `.pytest_cache` folders.
-
-## 1.48.0 (2021/03/20)
-
-Thx [Alan Bouteiller](https://github.com/bouteillerAlan) for his contributions:
-
-* support Babel config files.
-* support Expo files and folders.
-* support Metro config files.
-
-## 1.47.0 (2021/03/05)
-* support Lerna configuration file: `lerna.json`. Thx [Yoav Vainrich](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/46).
-
-## 1.46.1 (2021/02/14)
-* try to fix [#39](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/39): error badge saying project is disposed.
-* fix [#40](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/40): EDT warning when creating a custom icon model.
-* improve Webpack support. Thx [Yoav Vainrich](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/45).
-
-## 1.46.0 (2021/02/07)
-* support `.env` files.
-* force IDE to restart when installing or upgrading Extra Icons plugin: there may be a bug with [Dynamic Plugins](https://plugins.jetbrains.com/docs/intellij/dynamic-plugins.html). I hope it will fix [#44](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/44): some settings were lost when hot-reloading plugin (upgrade without restart).
-
-## 1.45.1 (2021/02/02)
-* fix a NPE that may occur when multiple projects are opened and icons are being refreshed.
-
-## 1.45.0 (2021/01/31)
-* internal: minor code cleanup.
-* rework a help message about icons priority.
-* handle non-square SVG images (backport from [Icon Viewer 2](https://github.com/jonathanlermitage/IconViewer) plugin).
-* rework GraphQL files.
-* rework WAR files.
-* provide an alternative icon for IDEA MindMap plugin files.
-
-## 1.44.0 (2021/01/16)
-* internal: minor code optimization.
-* support [Semaphore](https://semaphoreci.com) `.semaphore` folders and `.semaphore/semaphore.yml` files.
-* support `*.bin` files.
-* support LGTM yml files.
-* support [MPS](https://www.jetbrains.com/mps/) `.mps` folders.
-* support [Renovate](https://docs.renovatebot.com/configuration-options/) files.
-
-## 1.43.0 (2020/12/16)
-* support Git Submodules: `.gitmodules` files can be parsed to customize icon of Submodules folders. Nested Submodules are also supported.
-* provide some alternative icons for PDF files.
-* provide an alternative icon for JVM files.
-* adjust the red color of Git files to make them less eye-catching.
-
-## 1.42.0 (2020/12/12)
-* support `RELEASENOTES` files.
-* fix [#43](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/43): restore compatibility with IDE running on JRE8.
-* apply a workaround for a bug in IJ 2020.3 that makes IDE loading icons from bundled plugins (like Lombok) instead of ExtraIcons.
-* rework Lombok files (PNG icon to SVG).
-
-## 1.41.0 (2020/11/30)
-* provide some alternative icons for `.travis.yml` files ([official logos](https://travis-ci.com/logo)).
-* support `.coveragerc` files.
-* rework TypeScript files.
-* rework CHANGELOG dark icon.
-* provide alternative icons for Dockerfile, Docker Compose and Docker Ignore files.
-
-## 1.40.0 (2020/11/15)
-* support [All Contributors](https://github.com/all-contributors/all-contributors) `.all-contributorsrc` files.
-* provide an alternative icon for Contribution files.
-
-## 1.39.0 (2020/10/30)
-* support [Mockk](https://mockk.io/#settings-file) `io/mockk/settings.properties` files.
-* support [gradle-intellij-plugin](https://github.com/JetBrains/gradle-intellij-plugin) `idea-sandbox` folders.
-* internal: improve Gradle build performance.
-* internal: migrate Gradle build to Kotlin DSL.
-* add an option to adjust UI Scale Factor for user icons. Useful if you run IDE with `-Dsun.java2d.uiScale.enabled=false` flag.
-* support `KNOWN_ISSUES` and `OPEN_ISSUES` files.
-* settings: minor UI improvements.
-
-## 1.38.0 (2020/09/30)
-* rework `package-info.java` files.
-* support `module-info.java` files.
-* provide some alternative icons for `AUTHORS` files.
-* support `netlify.toml` files.
-* rework Cassandra files (PNG icon to SVG).
-
-## 1.37.1 (2020/09/13)
-* bugfix [#39](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/39): Exception when plugin tries to load icons in a project that is being disposed or is already disposed.
-
-## 1.37.0 (2020/09/12)
-* bugfix: NPE while refreshing project panel icons.
-* support Restyled `.restyled.yaml` files.
-* provide an alternative icon for Robot Framework files (based on GitLab Robot icon).
-* support Weblate `.weblate` files.
-
-## 1.36.0 (2020/08/30)
-* rework Markdown files (PNG icon to SVG) and provide 2 alternative icons. To use an alternative icon, simply deactivate the other(s).
-* provide some alternative icons for Video files.
-* provide an alternative icon for EditorConfig files.
-* provide an alternative icon for Swagger files.
-* provide an alternative icon for Asciidoc files.
-* provide an alternative icon for Certificate files.
-* provide an alternative icon for License files.
-* provide an alternative icon for Readme files (based on GitHub Readme icon).
-* add new configuration condition: facets. You can now choose to activate a custom icon if a specific facet is activated in project (as in `Project Structure > Project Settings > Facets`), like "Spring", "JPA", etc. This condition must be associated with one other condition like "Names", "Regex", etc.
-* removed usage of `sun.awt.image.ToolkitImage`. It will fix some Gradle build errors with JDK9+, but some IDE like PyCharm *may* (I did not reproduce) not display a few icons. If it doesn't work for you, please open an issue (and attach IDE logs) and I will probably revert this change.
-* support [Tinylog](https://tinylog.org) `tinylog.properties` files.
-
-## 1.35.0 (2020/08/22)
-* rework Nginx files.
-* rework Better Code Hub files.
-
-## 1.34.0 (2020/08/08)
-* rework Git files (PNG icon to SVG).
-* rework Gradle files (PNG icon to SVG).
-* rework Archive files.
-* rework Maven wrapper files (PNG icon to SVG).
-* rework Gradle wrapper files (PNG icon to SVG).
-* rework Gitlab files (PNG icon to SVG).
-* rework Apache htaccess files.
-* rework HTML5 files.
-* rework PID files.
-* improve FlyWay and Liquibase support: detect HSQLDB, H2 and IBM DB2 databases.
-* rework Angular files.
-* rework Appveyor files.
-* rework Asciidoc files.
-* rework GitHub files.
-* rework SASS files (PNG icon to SVG).
-* rework Terraform files (PNG icon to SVG).
-* rework Typescript files.
-* rework Liquibase files.
-* rework Swagger files.
-* support PDD (Puzzle Driven Development) `.pdd` and `.0pdd.yml` files.
-* rework and ungroup `*.ini`, `*.cfg`, `*.conf`, `*.config` Configuration files support: users may prefer icons provided by the [Ini plugin](https://plugins.jetbrains.com/plugin/6981-ini/).
-* rework Postman files (improve dark icon).
-* rework Codecov files (PNG icon to SVG).
-* rework `.mailmap` files (PNG icon to SVG).
-* rework LESS files (PNG icon to SVG).
-* support Velocity `*.vtl` files.
-* rework CHANGELOG files (PNG icon to SVG).
-* support Jinja `*.jinja` and `*.jinja2` files.
-* Plugin icons table filter now filters on label column only.
-* rework Jest files.
-* rework WAR files.
-* rework TESTING files (PNG icon to SVG).
-* rework `.form` files (PNG icon to SVG).
-* rework NSIS files (PNG icon to SVG).
-* support `swagger-config.yaml` files.
-
-Some icons come from the [Hiberbee Theme family](https://github.com/hiberbee/jetbrains-ide-theme) project.
-
-## 1.33.0 (2020/07/31)
-* support Robot Framework `.robot` files.
-* try to fix [issue #32](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/32): Markdown file icons are overridden by Markdown Navigator plugin.
-* add a filter to Plugin icons table.
-* rework `.htaccess` files (PNG icon to SVG).
-* rework `kubernetes*.yml` files (PNG icon to SVG).
-* rework `*.toml` files (PNG icon to SVG).
-* rework Vagrant files (PNG icon to SVG).
-* rework Puppet files (PNG icon to SVG).
-* rework Privacy files.
-* rework Security files.
-* rework Redis files (PNG icon to SVG).
-* support `(.)version(s).xml` files.
-
-## 1.32.0 (2020/07/11)
-* improve VERSION files detection.
-* rework ONAP files: files generated by CBA enrichment now use gold color.
-
-## 1.31.0 (2020/07/05)
-* improve CHANGELOG and VERSION files detection.
-* support `.gitreview` files.
-* support some [ONAP Controller Blueprint Archive (CBA)](https://wiki.onap.org/display/DW/Modeling+Concepts) files. Full ONAP support will be implemented in a separate plugin.
-
-## 1.30.0 (2020/06/18)
-* rework Bash terminal icon.
-* rework Windows terminal icon.
-* support `hibernate.properties` files.
-* support [Rultor](http://www.rultor.com) `.rultor.yml` files.
-
-## 1.29.0 (2020/06/10)
-* support `.teamcity` folder.
-* support `.exe` files.
-* support NuGet `.nuget` folder and `.nuget/packages.config` file.
-* support [Tox](https://github.com/tox-dev/tox) `tox.ini` files.
-* rework `LICENSE` icon.
-* rework `NOTICE` icon.
-* rework certificate icon.
-* rework Gradle folder icon.
-* restore missing Deptective icon. Probably dropped by mistake.
-* improve Config files support.
-* improve Microsoft Azure support.
-
-## 1.28.0 (2020/05/23)
-* support Composer `composer.json` and `composer.lock` files.
-* *IDE 2020.1+ (201.5239+ builds):* implement [#28](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/28) show customized icons in Repositories tool window.
-
-## 1.27.0 (2020/05/15)
-* support `svgo.yml` files.
-* optimized SVG logos with [SVGO](https://github.com/svg/svgo).
-* fix [issue 35](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/35): clarify usage of regex.
-* support some [RST](https://en.wikipedia.org/wiki/ReStructuredText) files: `README.rst`, `CHANGELOG.rst`, etc.
-* support `.run` folder used by IntelliJ IDEA 2020+ to store Run/Debug Configurations.
-* support [Draw.io](https://app.diagrams.net) `.drawio` and `.dio` files.
-
-## 1.26.0 (2020/05/01)
-* settings: refresh project views on icons list update.
-* support Prettier `.prettierignore` files.
-* support Scalingo `scalingo.json` files.
-* support Snapcraft `snapcraft.yaml` files.
-* support `SECURITY` files (with `.md`, `.adoc`, `.txt` or no extension).
-* support Bitnami Stacksmith `stackerfile.yml` files.
-* support [Karate](https://github.com/intuit/karate) `karate-config.js` files.
-* support [Crowdin](https://crowdin.com) `.crowdin.yml` files.
-* rework 16x16 icon for `package-info.java` files.
-* improve FlyWay and Liquibase support: detect some databases (MariaDB, MySQL, Oracle, PostgreSQL, Sqlite, MS SQL Server) in FlyWay and Liquibase locations path, e.g., customize `mysql` folder icon in `db/migration/mysql/`.
-
-## 1.25.0 (2020/04/18)
-* support Epub `.epub`, `.mobi`, `.azw`, `.azw3` files.
-* support [Rollup](https://github.com/rollup/rollup) `rollup.config.js` files.
-* support Prettier `.prettierrc` files.
-
-## 1.24.0 (2020/04/10)
-* support Webpack `webpack.config.js` files.
-* support Gitpod `.gitpod.yml` files.
-
-## 1.23.0 (2020/03/28)
-* replace Travis PNG icon by SVG.
-* new plugin icon.
-
-## 1.22.0 (2020/03/19)
-* internal: fix usage of a `UIUtil.createImage` method deprecated in IDE 193.
-* internal: log (at INFO level) some ignored errors while loading icon.
-* rework Browserslist icon.
-
-## 1.21.1 (2020/03/13)
-* fix background color of regex field with non-dark theme.
-
-## 1.21.0 (2020/02/27)
-* fix model type selection when edit dialog is opened. Thx [Florian Böhm](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/25).
-* support Liquibase files. Thx [Mateusz Bajorek](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/24).
-
-## 1.20.2 (2020/02/27)
-* restore missing Angular icon.
-
-## 1.20.1 (2020/02/26)
-* fix [issue 26](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/26): can't open the Extra Icons settings if Angular plugin is disabled (or not installed, so IJ Community was affected too). Thx contributors!
-
-## 1.20.0 (2020/02/21)
-* user can now add custom icons, path ignore regex now works on relative path to project base dir. Thx [Florian Böhm](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/21).
-
-## 1.19.0 (2020/02/13)
-* add an option to ignore file/folder pattern.
-* rework MySQL Workbench dark icon.
-* support `.bak` files.
-
-## 1.18.0 (2020/02/08)
-
-* make Angular regexes more strict. Thx [Bert Verhelst](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/20).
-
-Thx [Florian Böhm](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/19) for his contributions:
-
-* settings can now be overridden on project level.
-* improve Angular files detection.
-* improve Gradle Wrapper files detection.
-* support Browserslist `browserslist`, `.browserslistrc` files.
-* replace Typescript and SASS PNG icons by SVG.
-* internal improvements.
-
-## 1.17.0 (2020/01/31)
-* make settings changes apply without having to restart. Thx [Florian Böhm](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/18).
-* fix Angular icons size. Thx [Florian Böhm](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/17).
-
-## 1.16.0 (2020/01/01)
-* support Bitbucket `bitbucket-pipelines.yml` files.
-* support Grafana `grafana.ini` files.
-* support Prometheus `prometheus.yml` files.
-* rework SVG file icon.
-
-## 1.15.0 (2019/12/07)
-* improve Logstash detection.
-* support `.jceks` files.
-* support MySQL Workbench `.mwb` files.
-
-## 1.14.0 (2019/11/23)
-* rework `.idea` folder icon.
-
-## 1.13.0 (2019/11/07)
-* support Appveyor `.appveyor.yml` files.
-
-## 1.12.0 (2019/10/23)
-* support `.pid` files.
-* support `.jar.original` files.
-* support `.npmrc` files.
-* support `.npmignore` files.
-* support `jest.config.js` files.
-* support `karma.conf.js` files.
-* rework many icons.
-
-## 1.11.0 (2019/10/10)
-* improve AngularJS files support. Thx [diakovidis](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/pull/16).
-
-## 1.10.0 (2019/10/03)
-* support Postman `*postman_collection.json`, `*postman_environment.json` files.
-* support `.swagger-codegen-ignore` files.
-* support Diffusion Archive / XL Deploy Archive `*.dar` files.
-
-## 1.9.0 (2019/09/22)
-* rework `azure-pipelines.yml` file icon (use official SVG icon).
-* support `.p12` files.
-
-## 1.8.0 (2019/09/09)
-* support `.keep`, `.gitkeep`, `.hgkeep`, `.svnkeep` files used by various VCS.
-* improve Logback detection.
-* support `.pubkey` files.
-* support Postman `*.postman.json` files.
-* restore support of backup `*.versionBackup`, `*.back`, `*.backup`, `*.old`, `*.prev`, `*.revert` files. Probably dropped by mistake.
-* rework `.mvn` folder icon.
-
-## 1.7.0 (2019/07/20)
-* support [Glowroot](https://glowroot.org) `glowroot/admin.json`, `glowroot/config.json` files.
-
-## 1.6.0 (2019/06/15)
-* support [ImgBot](https://imgbot.net) `.imgbotconfig` files.
-* support `*.xz` archive files.
-* support `jvm.config` files.
-* support Avro `*.avsc` files.
-* use icon from [IntelliJ Rust](https://github.com/intellij-rust/intellij-rust) for `cargo.toml` files (a future update will introduce a white-list to ignore some file patterns).
-* rework Docker-compose files: Docker files remain blue, and Docker-compose files become pink.
-
-## 1.5.1 (2019/05/25)
-* revert changes to folders detection (1.5.0) to fix [#13](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/13): StringIndexOutOfBoundsException and NullPointerException errors.
-
-## 1.5.0 (2019/05/24)
-* rework Gradle files.
-* rework folders detection.
-* support `/docker` folders.
-* restore missing `test-ts.svg` icon in [ide173](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/tree/ide173) branch.
-
-## 1.4.0 (2019/05/18)
-* support [Better Code Hub](https://bettercodehub.com) `.bettercodehub.yml` files. I'd like to thank the Better Code Hub team for sending me SVG files!
-* support FlyWay SQL files `.*/db/migration/.*\.sql`.
-* support APK `.apk`, `.xapk` files.
-* detect more Docker files.
-* introduce regex support.
-* switched from DevKit to Gradle workflow: you can now build plugin without IDE, and integration with online CI like Travis will be easy.
-
-## 1.3.0 (2019/04/24)
-* support Microsoft Azure `azure-pipelines.yml` files.
-* support Dependabot `.dependabot/config.yml` files and `.dependabot` folders.
-* fix: Windows `mvnw.bat`, `mvnw.cmd` and Linux `mvnw` files were registered with the same id. That means disabling Windows icons disabled Linux icon too.
-
-## 1.2.0 (2019/04/12)
-* improve file detection capabilities: can work with folders.
-* improve CircleCI detection: add `.circleci/config.yml` files.
-* support `Gruntfile.js` files.
-* support LESS `*.less` files.
-* support Visual Studio Code `.vscode/settings.json` files.
-* support `intellijcodestyle.xml` files.
-* support `.circleci`, `.github`, `.gitlab`, `gradle`, `.idea`, `.mvn`, `.vscode` folders.
-* rework SASS `*.sass`, `*.scss` files. Also, they don't need *Sass support* plugin anymore.
-* rework `.dockerignore` files.
-
-## 1.1.0 (2019/04/05)
-* rework setting table's vertical scrolling.
-* fix detection of modifications in setting table.
-* add plugin's icon (effective with 2019.1 IDE).
-
-## 1.0.0 (2019/04/01)
-* add a graphical config panel to select extra icons to (de)activate. See `Settings > Appearance & Behavior > Extra Icons`.
-* changed version numbers: `x.y.z.173` plugins are compatible with 173.0+ IDE builds (2017.3 and newer), `x.y.z.183` plugins are compatible with 183.0+ IDE builds (2018.3 and newer) and provide some additional icons.
-
-## 0.27 and 0.28 (2019/03/29)
-* support `*.http` files (requests to be played by IntelliJ HTTP client).
-* plugin's configuration: you can now select extra icons to deactivate via a config file. A future release will bring a graphical config panel (but contributions are welcome!).
-
-## 0.25 and 0.26 (2019/02/17)
-* fixed ArchUnit files detection.
-* support GraphQL `*.graphqls`, `graphql.schema.json`, `graphql.config.json` files.
-* support `jvm.properties` files.
-* support JUnit `junit-platform.properties` files.
-* support SVG `*.svg` files.
-* support `*.3g2`, `*.3gp`, `*.avi`, `*.divx`, `*.f4a`, `*.f4b`, `*.f4p`, `*.f4v`, `*.flv`, `*.m4p`, `*.m4v`, `*.mkv`, `*.mp4`, `*.mpg`, `*.mpeg`, `*.mov`, `*.ogm`, `*.ogv`, `*.vob`, `*.webm`, `*.wmv`, `*.xvid` video files.
-
-## 0.23 and 0.24 (2019/01/19)
-* support [ArchUnit](https://github.com/TNG/ArchUnit) `archunit.properties` files.
-* support [Deptective](https://github.com/moditect/deptective) `deptective.json` files.
-* improved Jenkins file detection accuracy.
-
-## 0.21 and 0.22 (2019/01/10)
-* rework Haxe `*.hxml` files (new icons).
-* support `package-info.java` files.
-* support NSIS `*.nsi` files.
-* improved file detection accuracy.
-
-## 0.19 and 0.20 (2018/12/21)
-* starting from 0.19, there are two builds:
- * odd minor revision number (0.19, 0.21, 1.1, 1.3...): compatible with 173.0 IDE builds (aka 2017.3). This build doesn't bundle features that need 2018.3 IDE builds: AngularJS, SASS, Javascript. They're excluded because Extra Icons plugin reads project's type in order to activate some file recognition (AngularJS, SASS, Javascrip): it is based on 2018.3 IDE features. Other files detection is simply based on files pattern, that's why it works with older IDE builds, and I will maintain a branch (`ide173`) to keep support.
- * even minor revision number (0.20, 0.22, 1.0, 1.2...): compatible with latest IDE builds (183.0, aka 2018.3).
-
-This way, you simply have to download the latest version offered by the plugin manager: on older IDE, you'll get the latest odd minor revision number. On recent IDE, you get the latest even minor revision number that sheeps same features as odd version, plus features that comes with recent IDE builds.
-
-## 0.18 (2018/12/10)
-* plugin is no more compatible with 173.0 IDE builds: minimum version is now 183.0 (2018.3).
-
-## 0.17 (2018/12/08)
-* support `gradle.properties`, `LISEZMOI.*` files.
-* support AngularJS `*.module.ts`, `*.component.ts`, `*.service.ts`, `*.pipe.ts`, `*.directive.ts`, `*.guard.ts` files (optional, needs *AngularJS* plugin from IntelliJ Ultimate, WebStorm, PhpStorm). Enabled in AngularJS projects only. Thx to Edoardo Luppi.
-* support SASS `*.sass`, `*.scss` files (optional, needs *Sass support* plugin) Thx to Edoardo Luppi.
-* support [Haxe](https://haxe.org) `*.hx`, `*.hxml` files.
-* support [Cerebro](https://github.com/lmenezes/cerebro) `cerebro*.conf` files.
-
-## 0.16 (2018/11/15)
-* support Gatling `gatling*.conf` files.
-* support Lombok `lombok.config` files.
-* support `kubernetes*.yml` files.
-
-## 0.15 (2018/11/03)
-* improved file detection accuracy.
-* support Cassandra `cassandra*.yml`, Redis `redis*.conf` files.
-
-## 0.14 (2018/10/28)
-* support [Codacy](https://support.codacy.com/hc/en-us/articles/115002130625-Codacy-Configuration-File) `.codacy.yaml`, `.codacy.yml` files.
-* support Elasticsearch `elastic*.yml`, Logstash `logstash*.yml`, Kibana `kibana*.yml` files.
-
-## 0.13 (2018/10/21)
-* detect more Docker and Docker Compose files.
-* detect more Jenkins files.
-* support [Zappr](https://zappr.opensource.zalan.do) `.zappr.yaml` files.
-* support [Codecov](https://docs.codecov.io/docs/codecov-yaml) `codecov.yml`, `.codecov.yml` files.
-* support `.dockerignore` files.
-
-## 0.12 (2018/10/10)
-* rework Gitlab files (reduced margin by 1px).
-* rework Maven and Gradle wrapper files (new icons).
-* rework `package.json`, `package-lock.json` files (new icons).
-* support [Terraform](https://www.terraform.io) `*.hcl`, `*.tf`, `*.tf.json` files.
-* support [Cirrus](https://cirrus-ci.org) `.cirrus.yml` files.
-* support `*.rpm`, `*.deb`, `*.zip`, `*.7z`, `*.tar`, `*.gz`, `*.bz2` files.
-* support `bower.json`, `.bowerrc`, `.jsbeautifyrc`, `.jshintrc` files.
-
-## 0.11 (2018/09/29)
-* support `*.jks`, `BUILD`, `BUILDING`, `PRIVACY`, `ROADMAP`, `CONTRIBUTE`, `CONTRIBUTION`, `TODO`, `TEST`, `TESTING`, `LICENSE_INFO`, `ADDITIONAL_LICENSE_INFO` files.
-
-## 0.10 (2018/09/22)
-* rework `*.iml`, `*.war` files.
-* support `nginx.conf`, `.htaccess`, `puppet.conf`, `my.ini`, `*.ini`, `*.cfg`, `*.conf`, `*.toml`, `*.asciidoc`, `*.versionsbackup` files.
-
-## 0.9 (2018/09/15)
-* rework `LICENSE`, `berksfile.lock` files.
-* support `log4j`, `log4j-test`, `logback`, `logback-test` files with `.xml`, `.yml`, `yaml`, `.properties`, `.json` extensions.
-* support `*.csv`, `*.md`, `*.adoc`, `*.cert`, `*.war`, `*.form` extensions.
-* support backup `*.versionBackup`, `*.back`, `*.backup`, `*.old`, `*.prev`, `*.revert` files.
-
-## 0.8.1 (2018/09/10)
-* rework Microsoft Word, Excel, PowerPoint, OneNote, Visio, Project files (added dark theme).
-* rework `LICENSE`, `appveyor.yml`, `*.kdbx` files.
-
-## 0.8 (2018/09/09)
-* some code refactoring.
-* rework `*.iml`, `.travis.yml`, `jenkins`, `jenkinsfile`, `NOTICE` files.
-* support `.gitmodules`, `*.pdf`, `.mailmap`, `*.kdbx` (KeePass), `version` (with `.md`, `.adoc`, `.txt` or no extension) files.
-* support `*.pem`, `*.crt`, `*.ca-bundle`, `*.cer`, `*.p7b`, `*.p7s`, `*.pfx` certificate files.
-* support `*.doc`, `*.docx`, `*.xls`, `*.xlsx`, `*.ppt`, `*.pptx`, `*.one`, `*.onetoc2`, `*.vsd`, `*.vsdx`, `*.vss`, `*.vssx`, `*.vst`, `*.vstx`, `*.mpd`, `*.mpp`, `*.mpt` Microsoft Word, Excel, PowerPoint, OneNote, Visio, Project files.
-* support `*.odt`, `*.ods`, `*.odp`, `*.odg` , `*.odf` LibreOffice Writer, Calc, Impress, Draw, Math files.
-* increase plugin's icons priority. This way, IDE will prefer plugin's icons instead of default *unknown file types* icon for some file types.
-
-## 0.7 (2018/09/06)
-* support `vagrantfile`, `*.iml`, `.gitattributes`, `.gitignore`, `.editorconfig`, `berksfile`, `berksfile.lock`, `dockerfile`, `docker-compose.yml` files.
-
-## 0.6 (2018/09/02)
-* rework `.gitlab-ci.yml`, `appveyor.yml`, `NOTICE` files.
-* support `*.jar` files.
-
-## 0.5 (2018/09/01)
-* some code refactoring.
-* support `bamboo.yml`, `circle.yml`, `codeship-steps.yml`, `codeship-steps.json`, `codefresh.yml`, `.gocd.yaml`, `package.json`, `package-lock.json`, files.
-* support `jenkins`, `NOTICE`, `CONTACT` files (with `.md`, `.adoc`, `.txt` or no extension).
-
-## 0.4 (2018/08/26)
-* enabled compatibility with all products (WebStorm, etc.).
-* rework Maven wrapper `mvnw`, Gradle wrapper `gradlew` files.
-* support `README`, `CHANGELOG`, `CHANGES`, `LICENSE`, `COPYING`, `CONTRIBUTING`, `AUTHORS` files (with `.md`, `.adoc`, `.txt` or no extension).
-
-## 0.3 (2018/08/25)
-* support Windows script `*.cmd`, `*.bat`, Powershell `*.ps1`, Bash `*.sh`, Maven wrapper `mvnw`, Gradle wrapper `gradlew` files.
-
-## 0.2 (2018/08/25)
-* support Jenkins `jenkinsfile`, Gitlab `.gitlab-ci.yml` files.
-
-## 0.1 (2018/08/23)
-* support Travis `.travis.yml`, Appveyor `appveyor.yml` files.
diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md
deleted file mode 100644
index d1fc0b7e..00000000
--- a/CONTRIBUTION.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# How to contribute
-
-## Issues
-
-Please describe the issue:
-
-* the plugin version
-* the OS and IDE version. Open your IDE and go to Help, About, then Copy
-* the stacktrace, if any in the event log (in the bottom-right corner of your IDE)
-* any useful information
-
-## Pull requests
-
-* ensure unit tests are green by running `./gradlew test verifyPlugin`
-* please reformat new and modified code only: do not reformat the whole project or entire existing file (in other words,
- try to limit the amount of changes in order to speed up code review)
-* please write comments in english only
-* (optional) try this [sample project](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/tree/sample-project). This is a project with many empty files. It will help you to verify icon overrides
-* don't hesitate to add your name or nickname (and LinkedIn profile, etc.) to the contributors list ;-)
-* please email me (jonathan.lermitage@gmail) or send a private message on Twitter (JLermitage), **I have some free licenses for you**
-
-Tip: to support new icons, you will want to
-edit [this file](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/src/main/java/lermitage/intellij/extra/icons/ExtraIconProvider.java#L26)
-. All icons and selection rules are registered here. Icons are stored in `src/main/resources/extra-icons/`.
-Try the plugin in a standalone IDE with `./gradlew runIde`.
-
-## Feature requests
-
-If you are not comfortable with Java development, you can ask me to support new icons. Please:
-
-* provide SVG or 32x32 PNG icon(s)
-* explain the conditions to apply the icon(s), like filename patterns
-
-You can open an issue, or email me (jonathan.lermitage@gmail.com).
-
-:warning: Feature requests with no icon or no explanations will be ignored.
diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md
deleted file mode 100644
index 4d8d4e64..00000000
--- a/KNOWN_ISSUES.md
+++ /dev/null
@@ -1 +0,0 @@
-## Known issues
diff --git a/Makefile b/Makefile
deleted file mode 100644
index b9df9900..00000000
--- a/Makefile
+++ /dev/null
@@ -1,123 +0,0 @@
-# Useful commands. Run 'make help' to show available tasks.
-# ------
-# Linux: no requirements needed (except Gradle and a JDK), it should work as it.
-# Windows: tested with GNU Make 4.4 installed with Chocolatey, and Unix tools (installed with Git) available from path. WSL may also work.
-# macOS: I don't have an Apple computer so I can't test, but it should work as it.
-
-ifeq ($(OS),Windows_NT)
- gradlew_cmd := gradlew
-else
- gradlew_cmd := ./gradlew
-endif
-
-ij_min_version := 2023.1 # IMPORTANT must reflect settings.xml -> idea-version.since-build
-
-
-default: help
-
-
-.PHONY: intro
-intro:
- @echo -e '\n\e[1;34m------ [ij-extra-icons] $(shell date) ------\e[0m\n'
-
-
-.PHONY: log
-log: intro ## run "git log" with pretty colors
- git log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%C(cyan)\\ [%cn]" --decorate --date=relative
-
-
-.PHONY: wrapper
-wrapper: intro ## set or upgrade gradle wrapper to version "v" (example: make wrapper v=7.4.2)
- gradle wrapper --gradle-version=${v} --no-daemon
-
-
-.PHONY: fixgit
-fixgit: intro ## fix executable permission flag on git index for required files
- git update-index --chmod=+x gradlew
- @echo -e '\e[1m"gradlew" should now have executable flag on git\e[0m'
-
-
-.PHONY: run
-run: intro ## run plugin in latest stable IntelliJ Community
- ${gradlew_cmd} buildPlugin runIde -PpluginDownloadIdeaSources=false -PpluginLicenseType=free
-
-
-.PHONY: runCN
-runCN: intro ## run plugin in latest stable IntelliJ Community with Extra Icons' Chinese UI
- ${gradlew_cmd} buildPlugin runIde -PpluginDownloadIdeaSources=false -PpluginLicenseType=free -Dextra-icons.enable.chinese.ui=true
-
-
-.PHONY: runeap
-runeap: intro ## run plugin in latest IntelliJ Community EAP Snapshot
- ${gradlew_cmd} buildPlugin runIde -PpluginDownloadIdeaSources=false -PpluginLicenseType=free -PpluginIdeaVersion=IC-LATEST-EAP-SNAPSHOT
-
-
-.PHONY: runold
-runold: intro ## run plugin in oldest supported IntelliJ Community version
- ${gradlew_cmd} buildPlugin runIde -PpluginDownloadIdeaSources=false -PpluginLicenseType=free -PpluginIdeaVersion=IC-${ij_min_version}
-
-
-.PHONY: build
-build: intro ## build and package a plugin which asks for a paid subscription license to build/distribution/ (see generated ZIP file)
- ${gradlew_cmd} clean buildPlugin test modernizer biz-lermitage-oga-gradle-check verifyPlugin showGeneratedPlugin -PpluginLicenseType=subscription
-
-
-.PHONY: buildfree
-buildfree: intro ## build and package a plugin which doesn't ask for a paid license to build/distribution/ (see generated ZIP file)
- ${gradlew_cmd} clean buildPlugin test modernizer biz-lermitage-oga-gradle-check verifyPlugin showGeneratedPlugin -PpluginLicenseType=free
-
-
-.PHONY: buildlifetime
-buildlifetime: intro ## build and package a plugin which asks for a paid lifetime license to build/distribution/ (see generated ZIP file)
- ${gradlew_cmd} clean buildPlugin test modernizer biz-lermitage-oga-gradle-check verifyPlugin showGeneratedPlugin -PpluginLicenseType=lifetime
-
-
-.PHONY: lint
-lint: intro ## run linter(s), for now Modernizer
- ${gradlew_cmd} modernizer
-
-
-.PHONY: test
-test: intro ## run unit tests
- ${gradlew_cmd} cleanTest test verifyPlugin
-
-
-.PHONY: cv
-cv: intro ## check dependencies and Gradle updates
- ${gradlew_cmd} dependencyUpdates
-
-
-.PHONY: cvnd
-cvnd: intro ## check dependencies and Gradle updates (use a single-use Gradle daemon process by using --no-daemon)
- ${gradlew_cmd} dependencyUpdates --no-daemon
-
-
-.PHONY: oga
-oga: intro ## check for deprecated groupId and artifactId coordinates
- ${gradlew_cmd} biz-lermitage-oga-gradle-check
-
-
-.PHONY: svgo
-svgo: intro ## optimize SVG icons with SVGO (SVGO must be present, type "npm install -g svgo" if needed)
- svgo --folder=misc/ --recursive
- svgo --folder=src/main/resources/ --recursive
-
-
-.PHONY: lic
-lic: intro ## generate license report to build/reports/licenses/ (licenses used by dependencies)
- ${gradlew_cmd} licenseReport
-
-
-.PHONY: dt
-dt: intro ## show dependencies graph
- ${gradlew_cmd} dependencies
-
-
-.PHONY: publish
-publish: intro ## publish package to the JetBrains marketplace
- ${gradlew_cmd} clean buildPlugin test verifyPlugin publishPlugin
-
-
-.PHONY: help
-help: intro
- @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":[^:]*?## "}; {printf "\033[1;38;5;69m%-15s\033[0;38;5;38m %s\033[0m\n", $$1, $$2}'
diff --git a/README.md b/README.md
index 7f27a9de..0af6b4d8 100644
--- a/README.md
+++ b/README.md
@@ -14,57 +14,14 @@
+:warn: Some people decided to distribute my plugin with license requirement removed, without having the decency to tell me about it. No acknowledgement, simply a total lack of respect, while I allowed users to support me financially only if they wished to. I am working hard on this plugin since 2018, allowing users to explore the code and optionally support my work. So I had to make the difficult decision to stop distributing the source code. *Well played...*. :warn:
+
Intellij IDEA (Community and Ultimate) plugin that adds icons for files like Travis YML, Appveyor YML, Git sub-modules, etc.
You can also register your own icons in order to override file icons, but also all [IDE icons](https://jetbrains.design/intellij/resources/icons_list/) (including toolbars, menus, etc.). It works with all JetBrains products like IntelliJ (ultimate and community), PyCharm, WebStorm, DataGrip, etc.
To get started with this plugin, please see this [guide](docs/GET_STARTED.md).
-1. [Download](#download)
-2. [Build](#build)
-3. [Contribution](#how-to-contribute)
-4. [Known issues](#known-issues)
-5. [License](#license)
-6. [Credits](#contributors)
-7. [Screenshots](#screenshots)
-
## Download
Download plugin from the [JetBrains marketplace](https://plugins.jetbrains.com/plugin/11058-extra-icons) or via your IDE: File, Settings..., Plugins, Marketplace.
-## Build
-
-Install a JDK17+. You should be able to start Gradle Wrapper (`gradlew`).
-Take a look at the `Makefile` script: it contains useful commands to build, run and test the plugin, check for dependencies updates and some maintenance tasks. Show available commands by running `make help`.
-You may also want to see the [development FAQ](./docs/DEV_FAQ.md) if you faced an issue.
-
-### Optimizations
-
-Optionally, you may want to install SVGO in order to optimize SVG icons. Install SVGO with `npm install -g svgo`, then optimize SVG files by running `make svgo`.
-
-## How to contribute
-
-Please see [CONTRIBUTION.md](CONTRIBUTION.md).
-
-Nota: you can test icons with this [sample project](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/tree/sample-project). This is a project with many empty files. It will help you to verify icon overrides.
-
-## Known issues
-
-Please see [KNOWN_ISSUES.md](KNOWN_ISSUES.md) and [GitHub open issues](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues).
-
## License
-
-MIT License. In other words, you can do what you want: this project is entirely OpenSource, Free and Gratis.
-You only have to pay a subscription if you want to support my work by using the version that is published to the JetBrains marketplace. If you don't want to (or can't) support my work, you can still use old releases (up to 1.69), or package and install your own release for free. If you have any question, please see the [license FAQ](docs/LICENSE_FAQ.md).
-
-## Contributors
-
-* Please see the [contributors list](https://github.com/jonathanlermitage/intellij-extra-icons-plugin/graphs/contributors)
-
-## Screenshots
-
-![Dark Screenshot](docs/screenshots/intellijidea-ce_dark.png)
-
-![Screenshot](docs/screenshots/intellijidea-ce.png)
-
-![Config Panel Screenshot](docs/screenshots/config-panel.png)
-
-![User Config Panel Screenshot](docs/screenshots/config-panel-user-tab.png)
diff --git a/build.gradle.kts b/build.gradle.kts
deleted file mode 100644
index b7096068..00000000
--- a/build.gradle.kts
+++ /dev/null
@@ -1,537 +0,0 @@
-import com.adarshr.gradle.testlogger.theme.ThemeType
-import com.github.benmanes.gradle.versions.reporter.PlainTextReporter
-import com.github.benmanes.gradle.versions.reporter.result.Result
-import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
-import com.palantir.gradle.gitversion.VersionDetails
-import groovy.lang.Closure
-import org.apache.commons.io.FileUtils
-import org.jetbrains.changelog.Changelog
-import org.w3c.dom.Document
-import java.io.BufferedReader
-import java.io.ByteArrayInputStream
-import java.io.InputStreamReader
-import java.net.HttpURLConnection
-import java.net.URL
-import java.nio.file.Files
-import javax.xml.parsers.DocumentBuilderFactory
-import javax.xml.xpath.XPathConstants
-import javax.xml.xpath.XPathFactory
-
-plugins {
- id("java")
- id("org.jetbrains.intellij") version "1.16.1" // https://github.com/JetBrains/gradle-intellij-plugin
- id("org.jetbrains.changelog") version "2.2.0" // https://github.com/JetBrains/gradle-changelog-plugin
- id("com.github.ben-manes.versions") version "0.50.0" // https://github.com/ben-manes/gradle-versions-plugin
- id("com.adarshr.test-logger") version "4.0.0" // https://github.com/radarsh/gradle-test-logger-plugin
- id("com.palantir.git-version") version "3.0.0" // https://github.com/palantir/gradle-git-version
- id("com.github.andygoossens.modernizer") version "1.9.0" // https://github.com/andygoossens/gradle-modernizer-plugin
- id("biz.lermitage.oga") version "1.1.1" // https://github.com/jonathanlermitage/oga-gradle-plugin
-}
-
-val pluginXmlFile = projectDir.resolve("src/main/resources/META-INF/plugin.xml")
-val pluginXmlFileBackup = projectDir.resolve("plugin.backup.xml")
-
-val pluginLogoFile = projectDir.resolve("src/main/resources/META-INF/pluginIcon.svg")
-val pluginLogoFileBackup = projectDir.resolve("pluginIcon.backup.svg")
-val pluginLogoLifetimeFile = projectDir.resolve("misc/pluginIcon.lifetime.svg")
-val pluginLogoFreeFile = projectDir.resolve("misc/pluginIcon.free.svg")
-
-// Import variables from gradle.properties file
-val pluginDownloadIdeaSources: String by project
-val pluginVersion: String by project
-val pluginJavaVersion: String by project
-val testLoggerStyle: String by project
-val pluginLicenseType: String by project
-val pluginLanguage: String by project
-val pluginCountry: String by project
-val pluginEnableDebugLogs: String by project
-val pluginEnforceIdeSlowOperationsAssertion: String by project
-val pluginClearSandboxedIDESystemLogsBeforeRun: String by project
-val pluginIdeaVersion = detectBestIdeVersion()
-val pluginLifetimeLicenseDescriptionHeader: String by project
-val pluginLifetimeLicenseId: String by project
-val pluginLifetimeLicenseCode: String by project
-val pluginLifetimeLicenseName: String by project
-val pluginFreeId: String by project
-val pluginFreeName: String by project
-
-version = if (pluginVersion == "auto") {
- val versionDetails: Closure by extra
- val lastTag = versionDetails().lastTag
- if (lastTag.startsWith("v", ignoreCase = true)) {
- lastTag.substring(1)
- } else {
- lastTag
- }
-} else {
- pluginVersion
-}
-
-logger.quiet("Will use IDEA $pluginIdeaVersion and Java $pluginJavaVersion. Plugin version set to $version")
-
-group = "lermitage.intellij.extra.icons"
-
-repositories {
- mavenCentral()
-}
-
-val junitVersion = "5.10.1"
-val junitPlatformLauncher = "1.10.1"
-val archunitVersion = "1.2.1"
-
-dependencies {
- // needed because may not be bundled in Gateway's client
- implementation("org.apache.commons:commons-collections4:4.4")
- implementation("commons-codec:commons-codec:1.16.0")
- implementation("commons-io:commons-io:2.15.1")
-
- testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
- testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junitVersion")
- testRuntimeOnly("org.junit.platform:junit-platform-launcher:$junitPlatformLauncher")
- testImplementation("com.tngtech.archunit:archunit:$archunitVersion")
- testImplementation("com.github.weisj:jsvg:1.3.0")
-}
-
-intellij {
- when (pluginLicenseType) {
- "free" -> {
- pluginName.set("Extra Icons Free")
- }
-
- "lifetime" -> {
- pluginName.set("Extra Icons Lifetime")
- }
-
- else -> {
- pluginName.set("Extra Icons")
- }
- }
- downloadSources.set(pluginDownloadIdeaSources.toBoolean() && !System.getenv().containsKey("CI"))
- instrumentCode.set(true)
- sandboxDir.set("${rootProject.projectDir}/.idea-sandbox/${shortenIdeVersion(pluginIdeaVersion)}")
- updateSinceUntilBuild.set(false)
- version.set(pluginIdeaVersion)
-}
-
-changelog {
- headerParserRegex.set("(.*)".toRegex())
- itemPrefix.set("*")
-}
-
-modernizer {
- includeTestClasses = true
- // Find exclusion names at https://github.com/gaul/modernizer-maven-plugin/blob/master/modernizer-maven-plugin/src/main/resources/modernizer.xml
- exclusions = setOf("java/util/Optional.get:()Ljava/lang/Object;")
-}
-
-testlogger {
- try {
- theme = ThemeType.valueOf(testLoggerStyle)
- } catch (e: Exception) {
- theme = ThemeType.PLAIN
- logger.warn("Invalid testLoggerRichStyle value '$testLoggerStyle', " +
- "will use PLAIN style instead. Accepted values are PLAIN, STANDARD and MOCHA.")
- }
- showSimpleNames = true
-}
-
-tasks {
- register("verifyProductDescriptor") {
- // Ensure generated plugin requires a paid license
- doLast {
- val pluginXmlStr = pluginXmlFile.readText()
- if (!pluginXmlStr.contains(" {
- pluginXmlStr = pluginXmlStr.replace("REPLACED_BY_GRADLE",
- "")
- }
-
- "lifetime" -> {
- pluginXmlStr = pluginXmlStr.replace("REPLACED_BY_GRADLE",
- "lermitage.extra.icons.free")
- }
-
- else -> {
- pluginXmlStr = pluginXmlStr.replace("REPLACED_BY_GRADLE",
- "lermitage.extra.icons.lifetime" +
- "lermitage.extra.icons.free")
- }
- }
- FileUtils.delete(pluginXmlFile)
- FileUtils.write(pluginXmlFile, pluginXmlStr, "UTF-8")
- }
- }
-
- register("backupPluginLogo") {
- doLast {
- if (pluginLogoFileBackup.exists()) {
- if (!pluginLogoFileBackup.delete()) {
- throw GradleException("Failed to remove existing plugin logo file backup '${pluginLogoFileBackup}'")
- }
- }
- FileUtils.copyFile(pluginLogoFile, pluginLogoFileBackup)
- }
- }
- register("restorePluginLogoFromBackup") {
- doLast {
- if (!pluginLogoFileBackup.exists()) {
- throw GradleException("Plugin logo file backup '${pluginLogoFileBackup}' is missing")
- }
- if (pluginLogoFile.exists()) {
- if (!pluginLogoFile.delete()) {
- throw GradleException("Failed to remove non-original plugin logo file backup '${pluginLogoFile}'")
- }
- }
- FileUtils.moveFile(pluginLogoFileBackup, pluginLogoFile)
- }
- }
- register("usePluginLogoFree") {
- doLast {
- if (pluginLogoFile.exists()) {
- if (!pluginLogoFile.delete()) {
- throw GradleException("Failed to remove existing plugin logo file backup '${pluginLogoFile}'")
- }
- }
- FileUtils.copyFile(pluginLogoFreeFile, pluginLogoFile)
- }
- }
- register("usePluginLogoLifetime") {
- doLast {
- if (pluginLogoFile.exists()) {
- if (!pluginLogoFile.delete()) {
- throw GradleException("Failed to remove existing plugin logo file backup '${pluginLogoFile}'")
- }
- }
- FileUtils.copyFile(pluginLogoLifetimeFile, pluginLogoFile)
- }
- }
-
- register("backupPluginXml") {
- doLast {
- if (pluginXmlFileBackup.exists()) {
- if (!pluginXmlFileBackup.delete()) {
- throw GradleException("Failed to remove existing plugin xml file backup '${pluginXmlFileBackup}'")
- }
- }
- FileUtils.copyFile(pluginXmlFile, pluginXmlFileBackup)
- }
- }
- register("restorePluginXmlFromBackup") {
- doLast {
- if (!pluginXmlFileBackup.exists()) {
- throw GradleException("Plugin xml file backup '${pluginXmlFileBackup}' is missing")
- }
- if (pluginXmlFile.exists()) {
- if (!pluginXmlFile.delete()) {
- throw GradleException("Failed to remove non-original plugin xml file backup '${pluginXmlFile}'")
- }
- }
- FileUtils.moveFile(pluginXmlFileBackup, pluginXmlFile)
- }
- }
-
- register("removeLicenseRestrictionFromPluginXml") {
- // Remove paid license requirement
- doLast {
- logger.warn("----------------------------------------------------------------")
- logger.warn("/!\\ Will build a plugin which doesn't ask for a paid license /!\\")
- logger.warn("----------------------------------------------------------------")
- var pluginXmlStr = pluginXmlFile.readText()
- pluginXmlStr = pluginXmlStr.replace("lermitage.intellij.extra.icons", "${pluginFreeId}")
- pluginXmlStr = pluginXmlStr.replace("Extra Icons", "${pluginFreeName}")
- val paidLicenceBlockRegex = "".toRegex()
- val paidLicenceBlockStr = paidLicenceBlockRegex.find(pluginXmlStr)!!.value
- pluginXmlStr = pluginXmlStr.replace(paidLicenceBlockStr, "")
- FileUtils.delete(pluginXmlFile)
- FileUtils.write(pluginXmlFile, pluginXmlStr, "UTF-8")
- }
- }
- register("renameDistributionNoLicense") {
- // Rename generated plugin file to mention the fact that no paid license is needed
- doLast {
- val baseName = "build/distributions/Extra Icons-$version"
- val noLicPluginFile = projectDir.resolve("${baseName}-no-license.zip")
- val originalPluginFile = projectDir.resolve("${baseName}.zip")
- noLicPluginFile.delete()
- if (originalPluginFile.exists()) {
- FileUtils.moveFile(projectDir.resolve("${baseName}.zip"), noLicPluginFile)
- }
- }
- }
-
- register("renamePluginInfoToLifetimeInPluginXml") {
- doLast {
- var pluginXmlStr = pluginXmlFile.readText()
- pluginXmlStr = pluginXmlStr.replace("lermitage.intellij.extra.icons", "$pluginLifetimeLicenseId")
- pluginXmlStr = pluginXmlStr.replace("Extra Icons", "$pluginLifetimeLicenseName")
- pluginXmlStr = pluginXmlStr.replace(" {
- sourceCompatibility = pluginJavaVersion
- targetCompatibility = pluginJavaVersion
- options.compilerArgs = listOf("-Xlint:deprecation")
- options.encoding = "UTF-8"
- }
- withType {
- useJUnitPlatform()
-
- // avoid JBUIScale "Must be precomputed" error, because IDE is not started (LoadingState.APP_STARTED.isOccurred is false)
- jvmArgs("-Djava.awt.headless=true")
-
- // classpath indexing is not needed during unit tests
- // also, disabled to avoid useless 'NoSuchFileException: build/instrumented/instrumentCode/classpath.index.tmp' warnings
- systemProperties("idea.classpath.index.enabled" to false)
- }
- withType {
- checkForGradleUpdate = true
- gradleReleaseChannel = "current"
- revision = "release"
- rejectVersionIf {
- isNonStable(candidate.version)
- }
- outputFormatter = closureOf {
- unresolved.dependencies.removeIf {
- val coordinates = "${it.group}:${it.name}"
- coordinates.startsWith("unzipped.com") || coordinates.startsWith("com.jetbrains:ideaI")
- }
- PlainTextReporter(project, revision, gradleReleaseChannel)
- .write(System.out, this)
- }
- }
- runIde {
- dependsOn("clearSandboxedIDESystemLogs")
-
- maxHeapSize = "1g" // https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html
-
- if (pluginLanguage.isNotBlank()) {
- jvmArgs("-Duser.language=$pluginLanguage")
- }
- if (pluginCountry.isNotBlank()) {
- jvmArgs("-Duser.country=$pluginCountry")
- }
- if (System.getProperty("extra-icons.enable.chinese.ui", "false") == "true") {
- // force Chinese UI in plugin
- jvmArgs("-Dextra-icons.enable.chinese.ui=true")
- }
- if (System.getProperty("extra-icons.always.show.notifications", "false") == "true") {
- // show notifications on startup
- jvmArgs("-Dextra-icons.always.show.notifications=true")
- }
-
- // force detection of slow operations in EDT when playing with sandboxed IDE (SlowOperations.assertSlowOperationsAreAllowed)
- if (pluginEnforceIdeSlowOperationsAssertion.toBoolean()) {
- jvmArgs("-Dide.slow.operations.assertion=true")
- }
-
- if (pluginEnableDebugLogs.toBoolean()) {
- systemProperties(
- "idea.log.debug.categories" to "#lermitage.intellij.extra.icons"
- )
- }
-
- autoReloadPlugins.set(false)
-
- // If any warning or error with missing --add-opens, wait for the next gradle-intellij-plugin's update that should sync
- // with https://raw.githubusercontent.com/JetBrains/intellij-community/master/plugins/devkit/devkit-core/src/run/OpenedPackages.txt
- // or do it manually
- }
- buildSearchableOptions {
- enabled = false
- }
- patchPluginXml {
- when (pluginLicenseType) {
- "free" -> {
- dependsOn("backupPluginLogo", "usePluginLogoFree", "backupPluginXml", "removeLicenseRestrictionFromPluginXml", "updatePluginCompatibilityRulesFromPluginXml")
- }
-
- "lifetime" -> {
- dependsOn("backupPluginLogo", "usePluginLogoLifetime", "backupPluginXml", "renamePluginInfoToLifetimeInPluginXml", "updatePluginCompatibilityRulesFromPluginXml", "verifyProductDescriptor")
- }
-
- else -> {
- dependsOn("backupPluginXml", "updatePluginCompatibilityRulesFromPluginXml", "verifyProductDescriptor")
- }
- }
- changeNotes.set(provider {
- with(changelog) {
- renderItem(getLatest(), Changelog.OutputType.HTML)
- }
- })
- }
- buildPlugin {
- when (pluginLicenseType) {
- "free" -> {
- finalizedBy("restorePluginLogoFromBackup", "restorePluginXmlFromBackup", "renameDistributionNoLicense")
- }
-
- "lifetime" -> {
- finalizedBy("restorePluginLogoFromBackup", "restorePluginXmlFromBackup", "renameDistributionLifetimeLicense")
- }
-
- else -> {
- finalizedBy("restorePluginXmlFromBackup")
- }
- }
- }
- publishPlugin {
- token.set(System.getenv("JLE_IJ_PLUGINS_PUBLISH_TOKEN"))
- }
-}
-
-fun isNonStable(version: String): Boolean {
- if (listOf("RELEASE", "FINAL", "GA").any { version.uppercase().endsWith(it) }) {
- return false
- }
- return listOf("alpha", "Alpha", "ALPHA", "b", "beta", "Beta", "BETA", "rc", "RC", "M", "EA", "pr", "atlassian").any {
- "(?i).*[.-]${it}[.\\d-]*$".toRegex().matches(version)
- }
-}
-
-/** Return an IDE version string without the optional PATCH number.
- * In other words, replace IDE-MAJOR-MINOR(-PATCH) by IDE-MAJOR-MINOR. */
-fun shortenIdeVersion(version: String): String {
- if (version.contains("SNAPSHOT", ignoreCase = true)) {
- return version
- }
- val matcher = Regex("[A-Za-z]+[\\-]?[0-9]+[\\.]{1}[0-9]+")
- return try {
- matcher.findAll(version).map { it.value }.toList()[0]
- } catch (e: Exception) {
- logger.warn("Failed to shorten IDE version $version: ${e.message}")
- version
- }
-}
-
-/** Find latest IntelliJ stable version from JetBrains website. Result is cached locally for 24h. */
-fun findLatestStableIdeVersion(): String {
- val t1 = System.currentTimeMillis()
- val definitionsUrl = URL("https://www.jetbrains.com/updates/updates.xml")
- val cachedLatestVersionFile = File(System.getProperty("java.io.tmpdir") + "/jle-ij-latest-version.txt")
- var latestVersion: String
- try {
- if (cachedLatestVersionFile.exists()) {
-
- val cacheDurationMs = Integer.parseInt(project.findProperty("pluginIdeaVersionCacheDurationInHours") as String) * 60 * 60_000
- if (cachedLatestVersionFile.exists() && cachedLatestVersionFile.lastModified() < (System.currentTimeMillis() - cacheDurationMs)) {
- logger.quiet("Cache expired, find latest stable IDE version from $definitionsUrl then update cached file $cachedLatestVersionFile")
- latestVersion = getOnlineLatestStableIdeVersion(definitionsUrl)
- cachedLatestVersionFile.delete()
- Files.writeString(cachedLatestVersionFile.toPath(), latestVersion, Charsets.UTF_8)
-
- } else {
- logger.quiet("Find latest stable IDE version from cached file $cachedLatestVersionFile")
- latestVersion = Files.readString(cachedLatestVersionFile.toPath())!!
- }
-
- } else {
- logger.quiet("Find latest stable IDE version from $definitionsUrl")
- latestVersion = getOnlineLatestStableIdeVersion(definitionsUrl)
- Files.writeString(cachedLatestVersionFile.toPath(), latestVersion, Charsets.UTF_8)
- }
-
- } catch (e: Exception) {
- if (cachedLatestVersionFile.exists()) {
- logger.warn("Error: ${e.message}. Will find latest stable IDE version from cached file $cachedLatestVersionFile")
- latestVersion = Files.readString(cachedLatestVersionFile.toPath())!!
- } else {
- throw RuntimeException(e)
- }
- }
- if (logger.isDebugEnabled) {
- val t2 = System.currentTimeMillis()
- logger.debug("Operation took ${t2 - t1} ms")
- }
- return latestVersion
-}
-
-/** Find latest IntelliJ stable version from given url. */
-fun getOnlineLatestStableIdeVersion(definitionsUrl: URL): String {
- val definitionsStr = readRemoteContent(definitionsUrl)
- val builderFactory = DocumentBuilderFactory.newInstance()
- val builder = builderFactory.newDocumentBuilder()
- val xmlDocument: Document = builder.parse(ByteArrayInputStream(definitionsStr.toByteArray()))
- val xPath = XPathFactory.newInstance().newXPath()
- val expression = "/products/product[@name='IntelliJ IDEA']/channel[@id='IC-IU-RELEASE-licensing-RELEASE']/build[1]/@version"
- return xPath.compile(expression).evaluate(xmlDocument, XPathConstants.STRING) as String
-}
-
-/** Read a remote file as String. */
-fun readRemoteContent(url: URL): String {
- val t1 = System.currentTimeMillis()
- val content = StringBuilder()
- val conn = url.openConnection() as HttpURLConnection
- conn.requestMethod = "GET"
- BufferedReader(InputStreamReader(conn.inputStream)).use { rd ->
- var line: String? = rd.readLine()
- while (line != null) {
- content.append(line)
- line = rd.readLine()
- }
- }
- val t2 = System.currentTimeMillis()
- logger.quiet("Download $url, took ${t2 - t1} ms (${content.length} B)")
- return content.toString()
-}
-
-/** Get IDE version from gradle.properties or, of wanted, find latest stable IDE version from JetBrains website. */
-fun detectBestIdeVersion(): String {
- val pluginIdeaVersionFromProps = project.findProperty("pluginIdeaVersion")
- if (pluginIdeaVersionFromProps.toString() == "IC-LATEST-STABLE") {
- return "IC-${findLatestStableIdeVersion()}"
- }
- if (pluginIdeaVersionFromProps.toString() == "IU-LATEST-STABLE") {
- return "IU-${findLatestStableIdeVersion()}"
- }
- return pluginIdeaVersionFromProps.toString()
-}
diff --git a/docs/DEV_FAQ.md b/docs/DEV_FAQ.md
deleted file mode 100644
index bebfa298..00000000
--- a/docs/DEV_FAQ.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Plugin Dev FAQ
-
-## Some common problems and their solution or workaround
-
----
-
-**Problem**: `class com.intellij.ui.Win7TaskBar cannot access class sun.awt.windows.WComponentPeer (in module java.desktop) because module java.desktop does not export sun.awt.windows to unnamed module @7f2ef9a8` or similar error when you run the plugin with the `runIde` task.
-
-**Solution**: add missing exports if [gradle-intellij-plugin](https://github.com/JetBrains/gradle-intellij-plugin) is not synced with the latest IJ [OpenedPackages.txt](https://raw.githubusercontent.com/JetBrains/intellij-community/master/plugins/devkit/devkit-core/src/run/OpenedPackages.txt) file. Example: add this line to the `build.gradle.kts`'s `runIde` task:
-```kotlin
-jvmArgs("--add-exports", "java.desktop/sun.awt.windows=ALL-UNNAMED")
-```
-
-This is usually quickly fixed by the latest gradle-intellij-plugin update.
-
----
-
diff --git a/docs/LICENSE_FAQ.md b/docs/LICENSE_FAQ.md
index 0689fa01..dea27922 100644
--- a/docs/LICENSE_FAQ.md
+++ b/docs/LICENSE_FAQ.md
@@ -41,3 +41,6 @@ I have no plan for that. I now have supporters thanks to the Extra Icons project
The funding of OSS is a big question and, unfortunately, I think we can't discuss this on the Internet. I tried, but had to deal with the extreme aggressiveness of some toxic users. It was a very disturbing experience. Some people have no inhibition on the Internet. I think they are a minority, but they are very loud. Additionally, some idiots organized a review-bombing against all my plugins (JetBrains moderators took some time to delete those toxic reviews, thx for their help).
To answer the question quickly, I am doing free and OSS since ~2010. I started on Sourceforge.net with some Java libraries and NetBeans plugins. Like many contributors, I am doing this for fun, to share and learn interesting things. Also, like many contributors, motivation varies over time, and I tried many things (including donations and sponsorship) but it simply doesn't work. Now, I am looking for a minimal recognition. Some people don't need this, but this is their own mentality, their own vision of OSS, and I think we should respect each other. That's why I am now asking for a modest financial contribution. Technically, I had to pick one of my projects, I think the most useful, and one of the projects that represents the highest number of work hours. That's why I don't (and won't) ask for a financial contribution for my other OSS projects. I now have supporters, and I am super happy with that. I want to work with supporters, not for customers.
+
+**2024-01-08 update**:
+:warn: Some people decided to distribute my plugin with license requirement removed, without having the decency to tell me about it. No acknowledgement, simply a total lack of respect, while I allowed users to support me financially only if they wished to. I am working hard on this plugin since 2018, allowing users to explore the code and optionally support my work. So I had to make the difficult decision to stop distributing the source code. *Well played...*. :warn:
diff --git a/gradle.properties b/gradle.properties
deleted file mode 100644
index 79f50bdc..00000000
--- a/gradle.properties
+++ /dev/null
@@ -1,42 +0,0 @@
-pluginDownloadIdeaSources=true
-pluginJavaVersion=17
-
-# IDE version when running runIde task (example: IC-2023.1). Set to "IC-LATEST-STABLE" or "IU-LATEST-STABLE"
-# to find latest stable IDE version from JetBrains website
-pluginIdeaVersion=IC-LATEST-STABLE
-
-# When pluginIdeaVersion is empty, cache latest stable IDE version found for given number of hours
-pluginIdeaVersionCacheDurationInHours=24
-
-# Plugin version. If set to "auto", use the latest tag name (without the leading 'v') as the plugin version
-pluginVersion=auto
-
-# License type: "free" (no license needed), "lifetime" (lifetime paid license) or "subscription" (monthly/yearly paid subscription)
-pluginLicenseType=subscription
-
-# The Gradle Test Logger plugin's theme: PLAIN, STANDARD (which displays colours, so it's not correctly
-# supported by some terminals) or MOCHA (same problem)
-testLoggerStyle=PLAIN
-
-# Used to change IDE's locale when running runIde task. Leave empty values to use default locale
-pluginLanguage=
-pluginCountry=
-
-# Enable plugin's debug logs when running sandboxed IDE (see idea.log)
-pluginEnableDebugLogs=false
-
-# Enforce SlowOperations' "slow operation on EDT" assertion
-pluginEnforceIdeSlowOperationsAssertion=true
-
-# Empty sandboxed IDE system/log folder before run
-pluginClearSandboxedIDESystemLogsBeforeRun=true
-
-# Plugin information when lifetime license is enabled
-pluginLifetimeLicenseDescriptionHeader=Same plugin as Extra Icons, with a lifetime license (pay once, get updates for life).
-pluginLifetimeLicenseId=lermitage.extra.icons.lifetime
-pluginLifetimeLicenseCode=PEXTRAICONSLIFE
-pluginLifetimeLicenseName=Extra Icons Lifetime
-
-# Plugin information when no license is required
-pluginFreeId=lermitage.extra.icons.free
-pluginFreeName=Extra Icons Free
diff --git a/gradlew b/gradlew
deleted file mode 100755
index 1aa94a42..00000000
--- a/gradlew
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-#
-# Gradle start up script for POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-# This is normally unused
-# shellcheck disable=SC2034
-APP_BASE_NAME=${0##*/}
-# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
- echo "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD=java
- if ! command -v java >/dev/null 2>&1
- then
- die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC2039,SC3045
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC2039,SC3045
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Collect all arguments for the java command:
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
-# and any embedded shellness will be escaped.
-# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
-# treated as '${Hostname}' itself on the command line.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
- die "xargs is not available"
-fi
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100644
index 93e3f59f..00000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,92 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/misc/pluginIcon.free.svg b/misc/pluginIcon.free.svg
deleted file mode 100644
index 04bb28a7..00000000
--- a/misc/pluginIcon.free.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/misc/pluginIcon.lifetime.svg b/misc/pluginIcon.lifetime.svg
deleted file mode 100644
index 41ad61f0..00000000
--- a/misc/pluginIcon.lifetime.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/settings.gradle.kts b/settings.gradle.kts
deleted file mode 100644
index 18fe581d..00000000
--- a/settings.gradle.kts
+++ /dev/null
@@ -1,10 +0,0 @@
-rootProject.name = "ij-extra-icons"
-
-// uncomment to use gradle-intellij-plugin snapshots
-// https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#snapshot-release
-/*pluginManagement {
- repositories {
- maven("https://oss.sonatype.org/content/repositories/snapshots/")
- gradlePluginPortal()
- }
-}*/
diff --git a/src/main/java/lermitage/intellij/extra/icons/BaseIconProvider.java b/src/main/java/lermitage/intellij/extra/icons/BaseIconProvider.java
deleted file mode 100644
index 11ac110c..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/BaseIconProvider.java
+++ /dev/null
@@ -1,383 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-import com.intellij.ide.FileIconProvider;
-import com.intellij.ide.IconProvider;
-import com.intellij.ide.projectView.PresentationData;
-import com.intellij.ide.projectView.ProjectViewNode;
-import com.intellij.ide.projectView.ProjectViewNodeDecorator;
-import com.intellij.openapi.diagnostic.ControlFlowException;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.PsiDirectory;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiFileSystemItem;
-import com.intellij.testFramework.LightVirtualFile;
-import com.intellij.ui.NewUI;
-import lermitage.intellij.extra.icons.cfg.services.SettingsIDEService;
-import lermitage.intellij.extra.icons.cfg.services.SettingsProjectService;
-import lermitage.intellij.extra.icons.cfg.services.SettingsService;
-import lermitage.intellij.extra.icons.lic.ExtraIconsLicenseStatus;
-import lermitage.intellij.extra.icons.services.FacetsFinderService;
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import lermitage.intellij.extra.icons.utils.IconUtils;
-import lermitage.intellij.extra.icons.utils.ProjectUtils;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.Icon;
-import java.io.File;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.MissingResourceException;
-import java.util.Optional;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * @author Edoardo Luppi
- * @author Jonathan Lermitage
- */
-public abstract class BaseIconProvider
- extends IconProvider // the most important icon provider
- implements FileIconProvider, // may drop FileIconProvider as most of the work is done by the IconProvider
- ProjectViewNodeDecorator // fix for https://youtrack.jetbrains.com/issue/PY-44417
-{
-
- private static final @NonNls Logger LOGGER = Logger.getInstance(BaseIconProvider.class);
-
- private final List models;
-
- private long nbGetIcon = 0;
- private long checks_done = 0;
- private long checks_saved = 0;
- private final UITypeIconsPreference uiTypeIconsPreference;
-
- private static final ResourceBundle i18n = I18nUtils.getResourceBundle();
-
- public BaseIconProvider() {
- super();
- final UIType uiType = NewUI.isEnabled() ? UIType.NEW_UI : UIType.OLD_UI;
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("Detected UI Type: " + uiType);
- }
- this.models = getAllModels().stream()
- .filter(model -> model.getModelType() == ModelType.FILE || model.getModelType() == ModelType.DIR)
- .filter(model -> model.getUiType() == null || model.getUiType() == uiType)
- .toList();
- uiTypeIconsPreference = SettingsIDEService.getInstance().getUiTypeIconsPreference();
- }
-
- /**
- * Get list of all models managed by this icon provider. Their 'enabled' field doesn't matter.
- * This list will be processed by constructor and models 'enabled' field updated according to running IDE configuration.
- * Useful if BaseIconProvider has multiple inheritors, per example if one of them depends on a 3rd-party plugin (did
- * that for Angular, before removing it in favor of an Icon Enabler). May refactor and remove this method later if
- * it's still not used.
- */
- protected abstract List getAllModels();
-
- private static Model extractAltModel(Model model, int altIconIdx) {
- String altDescription;
- String altId;
- if (altIconIdx < 1) {
- if (model.getAltIcons().length == 1) {
- altDescription = MessageFormat.format(i18n.getString("model.desc.alternative"), model.getDescription());
- } else {
- altDescription = MessageFormat.format(i18n.getString("model.desc.alternative.first"), model.getDescription());
- }
- altId = model.getId() + "_alt"; //NON-NLS
- } else {
- altDescription = MessageFormat.format(i18n.getString("model.desc.alternative.other"), model.getDescription(), altIconIdx + 1);
- altId = model.getId() + "_alt" + (altIconIdx + 1); //NON-NLS
- }
- return Model.createAltModel(model, altId, model.getIdeIcon(), model.getAltIcons()[altIconIdx], altDescription);
- }
-
- public static Stream modelList(Model model) {
- if (model.getAltIcons() == null || model.getAltIcons().length == 0) {
- return Stream.of(model);
- }
- List models = new ArrayList<>();
- models.add(model);
- for (int i = 0; i < model.getAltIcons().length; i++) {
- models.add(extractAltModel(model, i));
- }
- return models.stream();
- }
-
- private String parent(@NotNull File file) {
- return file.getParent() == null ? null : file.getParentFile().getName().toLowerCase();
- }
-
- private void logError(@NotNull Throwable e) {
- if (e instanceof ControlFlowException) {
- // Control-flow exceptions should never be logged.
- LOGGER.info("ControlFlowException errors can be safely ignored as the impact on user experience should be very limited", e);
- return;
- }
- if (e instanceof MissingResourceException) {
- // TODO investigate https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/137
- // For now, silent errors when trying to find the PSI object for a file: PsiManager.getInstance(project).findFile(file).
- // It should not impact user experience.
- LOGGER.info("MissingResourceException errors can be safely ignored as the impact on user experience should be very limited", e);
- return;
- }
- // Workaround for https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/39
- // Plugin may want to reload icon on closed or disposed project. Just ignore it
- if (e.getMessage() != null) {
- String errMsg = e.getMessage()
- .replaceAll("[\\s_]", "") //NON-NLS
- .toUpperCase();
- if (errMsg.contains("DISPOSEINPROGRESS") || errMsg.contains("PROJECTISALREADYDISPOSED")) {
- LOGGER.infoWithDebug("Tried to show an icon but the project is disposed or being disposed. " +
- "We can safely ignore this error with no impact on user experience", e);
- } else {
- LOGGER.warn(e);
- }
- }
- }
-
- @Nullable
- @Override // overrides FileIconProvider
- public Icon getIcon(@NotNull VirtualFile file, int flags, @Nullable Project project) {
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("FileIconProvider->" + file.getPath());
- }
- try {
- if (!ProjectUtils.isProjectAlive(project)) {
- return null;
- }
- if (file instanceof LightVirtualFile) {
- // TODO need to reproduce and understand what happens in
- // https://github.com/jonathanlermitage/intellij-extra-icons-plugin/issues/86
- // (error: Light files should have PSI only in one project)
- return null;
- }
- return getIcon(new File(file.getPath()),
- file.isDirectory() ? FileType.FOLDER : FileType.FILE,
- project);
- } catch (Throwable e) {
- logError(e);
- } finally {
- logCacheHitStats();
- }
- return null;
- }
-
- @Nullable
- @Override // overrides IconProvider
- public final Icon getIcon(@NotNull final PsiElement psiElement, final int flags) {
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("IconProvider->" + psiElement);
- }
- try {
- PsiFileSystemItem currentPsiFileItem;
- if (psiElement instanceof PsiDirectory psiDirectoryElt) {
- currentPsiFileItem = psiDirectoryElt;
- } else {
- final Optional optFile = Optional.ofNullable(psiElement.getContainingFile());
- currentPsiFileItem = optFile.orElse(null);
- }
- if (currentPsiFileItem == null) {
- return null;
- }
- String fullPath = getFullPath(currentPsiFileItem);
- if (fullPath == null) {
- return null;
- }
- File file = new File(fullPath);
- return getIcon(file,
- psiElement instanceof PsiDirectory ? FileType.FOLDER : FileType.FILE,
- psiElement.getProject());
- } catch (Throwable e) {
- logError(e);
- } finally {
- logCacheHitStats();
- }
- return null;
- }
-
- @Override // overrides ProjectViewNodeDecorator
- public void decorate(ProjectViewNode> node, PresentationData data) {
- try {
- VirtualFile virtualFile = node.getVirtualFile();
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("ProjectViewNodeDecorator->" + (virtualFile == null ? null : virtualFile.getPath()));
- }
- if (virtualFile != null) {
- File file = new File(virtualFile.getPath());
- FileType fileType = file.isDirectory() ? FileType.FOLDER : FileType.FILE;
- Project project = node.getProject();
- Icon icon = getIcon(file, fileType, project);
- if (icon != null) {
- node.setIcon(icon);
- if (data != null) {
- data.setIcon(icon);
- }
- }
- }
- } catch (Exception e) {
- LOGGER.warn(e);
- }
- }
-
- @Nullable
- private Icon getIcon(@NotNull File file, @NotNull FileType fileType, @Nullable Project project) {
- if (!ExtraIconsLicenseStatus.isLicenseActivated()) {
- return null;
- }
- nbGetIcon++;
- try {
- if (!ProjectUtils.isProjectAlive(project)) {
- return null;
- }
- ModelType currentModelType;
- if (fileType == FileType.FOLDER) {
- if (isPatternIgnored(project, file)) {
- return null;
- }
- currentModelType = ModelType.DIR;
- } else {
- if (isPatternIgnored(project, file)) {
- return null;
- }
- currentModelType = ModelType.FILE;
- }
- String parentName = parent(file);
- String normalizedFileName = getSanitizeFilePath(file.getName());
- String normalizedFileAbsPath = getSanitizeFilePath(file.getAbsolutePath());
- assert project != null;
- Set facets = FacetsFinderService.getInstance(project).getFacets();
- Double additionalUIScale = SettingsIDEService.getInstance().getAdditionalUIScale2();
- SettingsService settingsService = getBestSettingsService(project);
- Object parentModelIdWhoseCheckFailed = null;
- for (final Model model : getModelsIncludingUserModels(project)) {
- if (model.getModelType() == currentModelType && model.isEnabled() && !settingsService.getDisabledModelIds().contains(model.getId())) {
- if (model.getParentId() != null && parentModelIdWhoseCheckFailed == model.getParentId()) {
- // check already returned false for this model (parent or alt), don't need to check again
- checks_saved++;
- continue;
- }
- checks_done++;
- if (model.check(parentName, normalizedFileName, normalizedFileAbsPath, facets, project)) {
- return IconUtils.getIcon(model, additionalUIScale, uiTypeIconsPreference);
- } else {
- parentModelIdWhoseCheckFailed = model.getParentId() == null ? model.getId() : model.getParentId();
- }
- }
- }
- } catch (Throwable e) {
- logError(e);
- } finally {
- logCacheHitStats();
- }
- return null;
- }
-
- private void logCacheHitStats() {
- if (LOGGER.isDebugEnabled() && nbGetIcon > 0 && checks_done > 0 && (nbGetIcon < 5 || nbGetIcon < 100 ? nbGetIcon % 20 == 0 : nbGetIcon % 100 == 0)) {
- // activate with Help > Diagnostic Tools > Debug Log Settings > #lermitage.intellij.extra.icons.BaseIconProvider
- LOGGER.debug("[" + Thread.currentThread().getId() + "] " +
- "getIcon: " + nbGetIcon + ", " +
- "checks_done: " + checks_done + ", " +
- "checks_saved: " + checks_saved + " (" + (checks_saved * 100 / checks_done) + "%)");
- }
- }
-
- @Nullable
- private String getFullPath(@NotNull PsiFileSystemItem file) {
- if (file.getVirtualFile() != null) {
- return file.getVirtualFile().getPath().toLowerCase();
- }
- return null;
- }
-
- private String getSanitizeFilePath(String path) {
- return path.toLowerCase().replaceAll("\\\\", "/");
- }
-
- /**
- * Depending on whether the checkbox in the settings is checked, this method appends
- * the user added models to the model list.
- */
- private List getModelsIncludingUserModels(@Nullable Project project) {
- Stream customModelsStream = null;
-
- if (project != null) {
- SettingsProjectService settingsProjectService = SettingsProjectService.getInstance(project);
- if (settingsProjectService.isOverrideIDESettings()) {
- if (settingsProjectService.isAddToIDEUserIcons()) {
- customModelsStream = Stream.concat(SettingsIDEService.getInstance().getCustomModels().stream(),
- settingsProjectService.getCustomModels().stream());
- } else {
- customModelsStream = settingsProjectService.getCustomModels().stream();
- }
- }
- }
- if (customModelsStream == null) {
- customModelsStream = SettingsIDEService.getInstance().getCustomModels().stream();
- }
-
- return Stream.concat(customModelsStream, models.stream()).collect(Collectors.toList());//
- }
-
- /**
- * Indicates if given file/folder should be ignored.
- * @param project project.
- * @param file current file or folder.
- */
- private boolean isPatternIgnored(Project project, File file) {
- try {
- SettingsService service = getBestSettingsService(project);
- if (service.getIgnoredPatternObj() == null || service.getIgnoredPattern() == null || service.getIgnoredPattern().isEmpty()) {
- return false;
- }
- String projectBasePath;
- if (ProjectUtils.isProjectAlive(project)) {
- projectBasePath = project.getBasePath();
- if (projectBasePath == null) {
- return false;
- }
- } else {
- return false;
- }
- String normalizedFileAbsPath = file.getAbsolutePath().toLowerCase().replaceAll("\\\\", "/");
- String normalizedProjectPath = projectBasePath.toLowerCase().replaceAll("\\\\", "/");
- if (!normalizedFileAbsPath.startsWith(normalizedProjectPath) || normalizedFileAbsPath.length() <= normalizedProjectPath.length()) {
- return false;
- }
- return service.getIgnoredPatternObj().matcher(normalizedFileAbsPath.substring(normalizedProjectPath.length() + 1)).matches();
- } catch (Exception e) {
- LOGGER.warn(file.getAbsolutePath() + ", " + project.getBasePath());
- logError(e);
- return false;
- }
- }
-
- /**
- * Returns the Project settings service if the project is not null and if the checkbox in the project settings was checked,
- * otherwise returns the IDE settings service.
- */
- @NotNull
- private SettingsService getBestSettingsService(@Nullable Project project) {
- if (project != null) {
- SettingsProjectService settingsProjectService = SettingsProjectService.getInstance(project);
- if (settingsProjectService.isOverrideIDESettings()) {
- return settingsProjectService;
- }
- }
- return SettingsIDEService.getInstance();
- }
-
- private enum FileType {
- FILE, FOLDER
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/ExtraIconPatcher.java b/src/main/java/lermitage/intellij/extra/icons/ExtraIconPatcher.java
deleted file mode 100644
index dc1edadc..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/ExtraIconPatcher.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.openapi.util.IconPathPatcher;
-import com.intellij.ui.NewUI;
-import lermitage.intellij.extra.icons.cfg.services.SettingsIDEService;
-import lermitage.intellij.extra.icons.utils.IconUtils;
-import lermitage.intellij.extra.icons.utils.OS;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Stream;
-
-import static lermitage.intellij.extra.icons.utils.Base64Utils.B64_DECODER;
-
-public class ExtraIconPatcher extends IconPathPatcher {
-
- private static final @NonNls Logger LOGGER = Logger.getInstance(ExtraIconPatcher.class);
- private static final OS detectedOS = OS.detectOS();
-
- private Map icons;
-
- @NotNull
- public static Map getEnabledIcons() {
- final UIType uiType = NewUI.isEnabled() ? UIType.NEW_UI : UIType.OLD_UI;
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("Detected UI Type: " + uiType);
- }
- boolean preferNewUI = switch (SettingsIDEService.getInstance().getUiTypeIconsPreference()) {
- case BASED_ON_ACTIVE_UI_TYPE -> NewUI.isEnabled();
- case PREFER_NEW_UI_ICONS -> true;
- case PREFER_OLD_UI_ICONS -> false;
- };
-
- Map enabledIcons = new LinkedHashMap<>();
- List disabledModelIds = SettingsIDEService.getInstance().getDisabledModelIds();
- Stream.of(ExtraIconProvider.allModels(), SettingsIDEService.getInstance().getCustomModels()).flatMap(Collection::stream)
- .filter(model -> model.getModelType() == ModelType.ICON)
- .forEach(model -> {
- if (model.isEnabled() && !enabledIcons.containsKey(model.getIdeIcon()) && !disabledModelIds.contains(model.getId())) {
- String iconPathToLoad;
- if (preferNewUI && model.isAutoLoadNewUIIconVariant()) {
- iconPathToLoad = model.getIcon().replace("extra-icons/", "extra-icons/newui/"); //NON-NLS
- } else {
- iconPathToLoad = model.getIcon();
- }
- enabledIcons.put(model.getIdeIcon(), iconPathToLoad);
- }
- });
- return enabledIcons;
- }
-
- public ExtraIconPatcher() {
- super();
- loadConfig();
- IconLoader.installPathPatcher(this);
- }
-
- @Override
- public @Nullable ClassLoader getContextClassLoader(@NotNull String path, @Nullable ClassLoader originalClassLoader) {
- return ExtraIconPatcher.class.getClassLoader();
- }
-
- @Override
- public @Nullable String patchPath(@NotNull String path, @Nullable ClassLoader classLoader) {
- if (icons == null) {
- loadConfig();
- }
-
- if (this.icons.containsKey(path)) {
- return this.icons.get(path);
- }
- if (path.startsWith("/") && path.length() > 2) {
- String simplifiedPath = path.substring(1);
- if (this.icons.containsKey(simplifiedPath)) {
- return this.icons.get(simplifiedPath);
- }
- }
-
- String fileName = (new File(path)).getName();
- if (this.icons.containsKey(fileName)) {
- return this.icons.get(fileName);
- }
-
- return null;
- }
-
- private void loadConfig() {
- icons = getEnabledIcons();
- try {
- icons = convertUserB64IconsToLocalFilesAndKeepBundledIcons(icons);
- } catch (IOException e) {
- LOGGER.warn("Cannot create temporary directory to store user IDE icons, this feature won't work", e);
- }
- LOGGER.info("Config loaded with success, enabled " + icons.size() + " items");
- }
-
- /**
- * Convert Base64 user icons to local files. This conversion is needed because IconPatcher can't work with
- * in-memory byte arrays; we have to use bundled icons (from /resources) or local files. This method
- * stores in-memory Base64 icons provided by user as temporary local files.
- */
- private Map convertUserB64IconsToLocalFilesAndKeepBundledIcons(Map icons) throws IOException {
- Map morphedIcons = new LinkedHashMap<>();
- for (String iconKey : icons.keySet()) {
- String iconStr = icons.get(iconKey);
- if (iconStr.startsWith("extra-icons/")) { //NON-NLS
- // bundled icon, no icon transformation needed
- morphedIcons.put(iconKey, iconStr);
- } else {
- // base64 icon provided by user: store as local file
- File svgFile = IconUtils.createOrGetTempSVGFile(B64_DECODER.decode(iconStr));
- String decodedIconPath = svgFile.getAbsolutePath();
- if (detectedOS == OS.WIN) { // TODO see if should use VfsUtil.fixURLforIDEA(urlStr)
- morphedIcons.put(iconKey, "file:/" + decodedIconPath); //NON-NLS
- } else {
- morphedIcons.put(iconKey, "file://" + decodedIconPath); //NON-NLS
- }
- }
- }
- return morphedIcons;
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/ExtraIconProvider.java b/src/main/java/lermitage/intellij/extra/icons/ExtraIconProvider.java
deleted file mode 100644
index 95e1216f..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/ExtraIconProvider.java
+++ /dev/null
@@ -1,1401 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-import com.intellij.openapi.project.DumbAware;
-import lermitage.intellij.extra.icons.enablers.IconEnablerType;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static lermitage.intellij.extra.icons.Model.ofDir;
-import static lermitage.intellij.extra.icons.Model.ofFile;
-import static lermitage.intellij.extra.icons.Model.ofIcon;
-
-@SuppressWarnings({"SpellCheckingInspection", "HardCodedStringLiteral"})
-public class ExtraIconProvider extends BaseIconProvider implements DumbAware {
-
- private static final String[] TXT = new String[]{".md", ".txt", ".adoc", ".rst"};
- private static final String[] CFG = new String[]{".xml", ".yml", ".yaml", ".properties", ".json", ".cfg", ".conf", ".ini", ".txt"};
- private static final String[] YML = new String[]{".yaml", ".yml"};
-
- @NotNull
- public static List allModels() { // TODO move to SequencedCollection once migrated to jdk21?
- return Stream.of(
-
- //
- // Tip: to find IDE icon names, visit https://jetbrains.design/intellij/resources/icons_list/, pick
- // an icon and open the ZIP file: you can use the non-dark SVG file name.
- // docker
- ofIcon("ide_docker",
- "Docker.svg", "extra-icons/docker_.svg",
- "IDE icon: Docker")
- .altIcons("extra-icons/docker_alt.svg", "extra-icons/docker_alt2.svg")
- .tags(ModelTag.DOCKER),
- // docker compose
- ofIcon("ide_docker_compose",
- "DockerCompose.svg", "extra-icons/dockercompose_.svg",
- "IDE icon: Docker Compose")
- .altIcons("extra-icons/dockercompose_alt.svg", "extra-icons/dockercompose_alt2.svg")
- .tags(ModelTag.DOCKER),
- // html
- ofIcon("ide_html",
- "html.svg", "extra-icons/html5.svg",
- "IDE icon: HTML")
- .altIcons("extra-icons/html5_alt.svg", "extra-icons/html5_alt2.svg",
- "extra-icons/ide/firefox.svg", "extra-icons/ide/firefoxDeveloper.svg",
- "extra-icons/ide/vivaldi.svg", "extra-icons/ide/edge.svg",
- "extra-icons/ide/explorer.svg", "extra-icons/ide/opera.svg",
- "extra-icons/ide/chrome.svg", "extra-icons/ide/canary.svg",
- "extra-icons/ide/safari.svg")
- .tags(ModelTag.HTML),
- // java
- ofIcon("ide_java_enum_class",
- "enum.svg", "extra-icons/ide/enum_.svg",
- "IDE icon: Java enum")
- .altIcons("extra-icons/ide/enum_alt.svg", "extra-icons/ide/enum_alt2.svg")
- .autoLoadNewUIIconVariant(),
- // FIXME temporary workaround for IDEA-339254 (can't refresh Exception and Abstract Exception file IDE icons)
- ofFile("ide_java_abstract_exception_workaround_IDEA339254",
- "extra-icons/ide/abstractException_.svg", "Java abstract exception class (regex): '.*/[a-z\\d._\\-]*abstract[a-z\\d._\\-]*exception\\.java' (partial workaround for IDEA-339254)")
- .regex(".*/[a-z\\d._\\-]*abstract[a-z\\d._\\-]*exception+\\.java")
- .autoLoadNewUIIconVariant(),
- ofFile("ide_java_exception_workaround_IDEA339254",
- "extra-icons/ide/exceptionClass_.svg", "Java exception class (regex): '.*/[a-z\\d._\\-]*exception\\.java' (partial workaround for IDEA-339254)")
- .regex(".*/[a-z\\d._\\-]*exception\\.java")
- .autoLoadNewUIIconVariant(),
- ofIcon("ide_java_abstract_exception",
- "abstractException.svg", "extra-icons/ide/abstractException_.svg",
- "IDE icon: Java abstract exception class (affected by IDEA-339254)")
- .autoLoadNewUIIconVariant(),
- ofIcon("ide_java_exception_class",
- "exceptionClass.svg", "extra-icons/ide/exceptionClass_.svg",
- "IDE icon: Java exception class (affected by IDEA-339254)")
- .autoLoadNewUIIconVariant(),
- // kotlin
- ofIcon("ide_kotlin_enum_class",
- "enumKotlin.svg", "extra-icons/ide/enumKotlin_.svg",
- "IDE icon: Kotlin enum")
- .altIcons("extra-icons/ide/enumKotlin_alt.svg", "extra-icons/ide/enumKotlin_alt2.svg")
- .autoLoadNewUIIconVariant(),
- // kotlin gradle script
- ofIcon("ide_kotlin_gradle_script",
- "kotlin_gradle_script.svg", "extra-icons/gradle_kotlin_colored.svg",
- "IDE icon: Kotlin Gradle script")
- .altIcons("extra-icons/gradle_kotlin.svg"),
- // yaml
- ofIcon("ide_sh_file",
- "shFile.svg", "extra-icons/bash.svg",
- "IDE icon: Bash file"),
- // yaml
- ofIcon("ide_yaml",
- "yaml.svg", "extra-icons/ide/yaml_.svg",
- "IDE icon: YAML")
- .altIcons("extra-icons/ide/yaml_alt.svg", "extra-icons/ide/yaml_alt2.svg"),
- //
-
- //
- ofDir("dir_circleci", "extra-icons/folder_circleci.svg", "Circle CI: .circleci folder")
- .eq(".circleci"),
- ofDir("dir_dependabot", "extra-icons/folder_dependabot.svg", "Dependabot: .dependabot folder")
- .eq(".dependabot")
- .altIcons("extra-icons/folder_dependabot_alt.svg"),
- ofDir("dir_docker", "extra-icons/folder_docker.svg", "Docker: docker folder")
- .eq("docker")
- .tags(ModelTag.DOCKER),
- ofDir("dir_fleet", "extra-icons/folder_fleet.svg", "JetBrains Fleet: .fleet folder")
- .eq(".fleet")
- .autoLoadNewUIIconVariant(),
- ofDir("dir_github", "extra-icons/folder_github.svg", "Github: .github folder")
- .eq(".github"),
- ofDir("dir_gitlab", "extra-icons/folder_gitlab.svg", "Gitlab: .gitlab folder")
- .eq(".gitlab"),
- ofDir("dir_gradle", "extra-icons/folder_gradle.svg", "Gradle: gradle folder")
- .eq("gradle")
- .inProjectRootFolder(),
- ofDir("dir_idea", "extra-icons/folder_idea.svg", "IntelliJ IDEA: .idea folder")
- .eq(".idea"),
- ofDir("dir_ideasandbox", "extra-icons/folder_idea.svg", "IntelliJ IDEA: .idea-sandbox and idea-sandbox folders")
- .eq(".idea-sandbox", "idea-sandbox"),
- ofDir("dir_idearun", "extra-icons/folder_idea.svg", "IntelliJ IDEA 2020+ Run/Debug Configurations: .run folder")
- .eq(".run"),
- ofDir("dir_jpabuddy", "extra-icons/folder_jpabuddy.svg", "JPA Buddy: .jpb folder")
- .eq(".jpb")
- .altIcons("extra-icons/folder_jpabuddy_alt.svg", "extra-icons/folder_jpabuddy_alt2.svg",
- "extra-icons/folder_jpabuddy_alt3.svg")
- .autoLoadNewUIIconVariant(),
- ofDir("dir_log", "extra-icons/folder_tmp.svg", "Logs: 'log' folder at project's root level")
- .eq("log")
- .inProjectRootFolder()
- .autoLoadNewUIIconVariant(),
- ofDir("dir_dotlog", "extra-icons/folder_tmp.svg", "Logs: '.log' folder at project's root level")
- .eq(".log")
- .inProjectRootFolder()
- .autoLoadNewUIIconVariant(),
- ofDir("dir_logs", "extra-icons/folder_tmp.svg", "Logs: 'logs' folder at project's root level")
- .eq("logs")
- .inProjectRootFolder()
- .autoLoadNewUIIconVariant(),
- ofDir("dir_dotlogs", "extra-icons/folder_tmp.svg", "Logs: '.logs' folder at project's root level")
- .eq(".logs")
- .inProjectRootFolder()
- .autoLoadNewUIIconVariant(),
- ofDir("dir_mergify", "extra-icons/folder_mergify.svg", "Mergify: .mergify folder")
- .eq(".mergify"),
- ofDir("dir_mps", "extra-icons/folder_idea.svg", "JetBrains MPS: .mps folder")
- .eq(".mps"),
- ofDir("dir_mvn", "extra-icons/folder_mvnw.svg", "Maven: .mvn folder")
- .eq(".mvn"),
- ofDir("dir_node_modules", "extra-icons/folder_node_modules.svg", "NodeJS: node_modules folder")
- .eq("node_modules")
- .altIcons("extra-icons/folder_node_modules_alt.svg", "extra-icons/folder_tmp.svg"),
- ofDir("dir_nuget", "extra-icons/folder_nuget.svg", "Nuget: .nuget folder")
- .eq(".nuget"),
- ofDir("dir_pytest_cache", "extra-icons/folder_tmp.svg", "PyTest cache: .pytest_cache folder")
- .eq(".pytest_cache")
- .altIcons("extra-icons/folder_pytest_cache.svg")
- .autoLoadNewUIIconVariant(),
- ofDir("dir_python_venv", "extra-icons/folder_python_venv.svg", "Python Virtual Environment: .venv folder")
- .eq(".venv")
- .autoLoadNewUIIconVariant(),
- ofDir("dir_python_venv_nodot", "extra-icons/folder_python_venv.svg", "Python Virtual Environment: venv folder")
- .eq("venv")
- .autoLoadNewUIIconVariant(),
- ofDir("dir_python_egginfo", "extra-icons/folder_tmp.svg", "Python: .egg-info folder")
- .end(".egg-info")
- .autoLoadNewUIIconVariant(),
- ofDir("dir_python_dottox", "extra-icons/folder_tmp.svg", "Python: .tox folder")
- .eq(".tox")
- .autoLoadNewUIIconVariant(),
- ofDir("dir_teamcity", "extra-icons/folder_teamcity.svg", "TeamCity: .teamcity folder")
- .eq(".teamcity")
- .autoLoadNewUIIconVariant(),
- ofDir("dir_vscode_settings", "extra-icons/folder_vscode.svg", "Visual Studio Code: .vscode folder")
- .eq(".vscode"),
- ofDir("dir_semaphoreci", "extra-icons/folder_semaphoreci.svg", "Semaphore: .semaphore folder")
- .eq(".semaphore"),
- ofDir("dir_expo", "extra-icons/expo_folder.svg", "Expo: .expo folder")
- .eq(".expo"),
- ofDir("dir_storybook", "extra-icons/folder_storybook.svg", "Storybook: .storybook folder")
- .eq(".storybook")
- .tags(ModelTag.STORYBOOK),
- // - Flyway databases
- ofDir("dir_flyway", "extra-icons/folder_flyway.svg", "Flyway (regex): '.*/db/migration/?'")
- .regex(".*/db/migration/?")
- .tags(ModelTag.FLYWAY),
- ofDir("dir_flyway_db2", "extra-icons/folder_db2.svg", "Flyway, IBM DB2 database folder (regex): '.*/db/migration/db2[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/db2[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_h2", "extra-icons/folder_h2.svg", "Flyway, H2 database folder (regex): '.*/db/migration/h2[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/h2[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_hsqldb", "extra-icons/folder_hsqldb.svg", "Flyway, HSQLDB database folder (regex): '.*/db/migration/hsqldb[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/hsqldb[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_mariadb", "extra-icons/folder_mariadb.svg", "Flyway, MariaDB database folder (regex): '.*/db/migration/maria[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/maria[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_mysql", "extra-icons/folder_mysql.svg", "Flyway, MySQL database folder (regex): '.*/db/migration/mysql[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/mysql[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_postgresql", "extra-icons/folder_postgresql.svg", "Flyway, PostgreSQL database folder (regex): '.*/db/migration/postgre[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/postgre[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_sqlite", "extra-icons/folder_sqlite.svg", "Flyway, Sqlite database folder (regex): '.*/db/migration/sqlite[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/sqlite[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_oracle", "extra-icons/folder_oracle.svg", "Flyway, Oracle database folder (regex): '.*/db/migration/oracle[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/oracle[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_sqlserver", "extra-icons/folder_sqlserver.svg", "Flyway, MS SQL Server database folder (regex): '.*/db/migration/sqlserver[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/sqlserver[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_flyway_mssql", "extra-icons/folder_sqlserver.svg", "Flyway, MS SQL Server database folder (regex): '.*/db/migration/mssql[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/migration/mssql[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.FLYWAY)
- .autoLoadNewUIIconVariant(),
- // - Liquibase databases
- ofDir("dir_liquibase", "extra-icons/folder_liquibase.svg", "Liquibase (regex): '.*/db/changelog/?'")
- .regex(".*/db/changelog/?")
- .tags(ModelTag.LIQUIBASE),
- ofDir("dir_liquibase_db2", "extra-icons/folder_db2.svg", "Liquibase, IBM DB2 database folder (regex): '.*/db/changelog/db2[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/db2[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_h2", "extra-icons/folder_h2.svg", "Liquibase, H2 database folder (regex): '.*/db/changelog/h2[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/h2[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_hsqldb", "extra-icons/folder_hsqldb.svg", "Liquibase, HSQLDB database folder (regex): '.*/db/changelog/hsqldb[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/hsqldb[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_mariadb", "extra-icons/folder_mariadb.svg", "Liquibase, MariaDB database folder (regex): '.*/db/changelog/maria[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/maria[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_mysql", "extra-icons/folder_mysql.svg", "Liquibase, MySQL database folder (regex): '.*/db/changelog/mysql[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/mysql[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_postgresql", "extra-icons/folder_postgresql.svg", "Liquibase, PostgreSQL database folder (regex): '.*/db/changelog/postgre[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/postgre[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_sqlite", "extra-icons/folder_sqlite.svg", "Liquibase, Sqlite database folder (regex): '.*/db/changelog/sqlite[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/sqlite[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_oracle", "extra-icons/folder_oracle.svg", "Liquibase, Oracle database folder (regex): '.*/db/changelog/oracle[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/oracle[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_sqlserver", "extra-icons/folder_sqlserver.svg", "Liquibase, MS SQL Server database folder (regex): '.*/db/changelog/sqlserver[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/sqlserver[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- ofDir("dir_liquibase_mssql", "extra-icons/folder_sqlserver.svg", "Liquibase, MS SQL Server database folder (regex): '.*/db/changelog/mssql[a-zA-Z0-9._\\-]*'")
- .regex(".*/db/changelog/mssql[a-zA-Z\\d._\\-]*")
- .tags(ModelTag.LIQUIBASE)
- .autoLoadNewUIIconVariant(),
- //
-
- //
- ofFile("kustomize", "extra-icons/kustomize.svg", "Kustomize: kustomization.yaml")
- .eq("kustomization.yaml")
- .altIcons("extra-icons/kustomize_alt.svg")
- .tags(ModelTag.KUBERNETES),
- //
-
- //
- // git
- ofDir("gitsubmodule", "extra-icons/git_submodule.svg", "Git sub-module containing folder")
- .iconEnabler(IconEnablerType.IS_GIT_SUBMODULE_FOLDER)
- .altIcons("extra-icons/git_submodule_alt.svg"),
- // helm
- ofDir("helm_dir", "extra-icons/helmDirectory.svg", "Helm chart containing folder")
- .iconEnabler(IconEnablerType.IS_HELM_FOLDER)
- .altIcons("extra-icons/helmlogo.svg", "extra-icons/helmlogo_alt.svg")
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofFile("helm_chart_yaml", "extra-icons/helmChart.svg", "Helm: Chart.yaml")
- .eq("chart.yaml")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofFile("helm_requirements_yaml", "extra-icons/helmRequirementsYaml.svg", "Helm: requirements.yaml")
- .eq("requirements.yaml")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofFile("helm_values_yaml", "extra-icons/helmValues.svg", "Helm: values.yaml")
- .eq("values.yaml")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofDir("helm_charts_dir", "extra-icons/helmChartsDirectory.svg", "Helm: charts folder")
- .eq("charts")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofDir("helm_templates_dir", "extra-icons/helmTemplatesDirectory.svg", "Helm: templates folder")
- .eq("templates")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofDir("helm_templates_test_dir", "extra-icons/helmTemplatesTestDirectory.svg", "Helm: templates tests folder")
- .eq("tests")
- .parents("templates")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofFile("helm_helpers.tpl", "extra-icons/helmUndeployable.svg", "Helm: templates/_helpers.tpl")
- .eq("_helpers.tpl")
- .parents("templates")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofFile("helm_notes_txt", "extra-icons/helmNotes.svg", "Helm: templates/NOTES.txt")
- .eq("notes.txt")
- .parents("templates")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- ofFile("helm_all_yaml", "extra-icons/helm.svg", "Helm: *.yaml")
- .end(".yaml")
- .iconEnabler(IconEnablerType.IS_IN_HELM_FOLDER)
- .altIcons("extra-icons/helmlogo.svg", "extra-icons/helmlogo_alt.svg")
- .tags(ModelTag.HELM)
- .autoLoadNewUIIconVariant(),
- // writerside
- ofFile("writerside_tree", "extra-icons/writerside_tree.svg", "Writerside: *.tree")
- .end(".tree")
- .iconEnabler(IconEnablerType.IS_IN_WRITERSIDE_FOLDER)
- .tags(ModelTag.WRITERSIDE)
- .autoLoadNewUIIconVariant(),
- ofFile("writerside_list", "extra-icons/writerside_list.svg", "Writerside: *.list")
- .end(".list")
- .iconEnabler(IconEnablerType.IS_IN_WRITERSIDE_FOLDER)
- .tags(ModelTag.WRITERSIDE)
- .autoLoadNewUIIconVariant(),
- //
-
- //
- ofFile("angular_json", "extra-icons/angular2.svg", "Angular: angular.json")
- .eq("angular.json")
- .altIcons("extra-icons/angular_renaissance.svg")
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_component_generic", "extra-icons/angular-component.svg", "Angular (if angular.json exists): *.component.(js|ts)")
- .regex(".*[^a-zA-Z\\d]component\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_component_generic_test", "extra-icons/angular-component-test.svg", "Angular (if angular.json exists): *.component.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]component\\.spec\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_controller_generic", "extra-icons/angular-controller.svg", "Angular (if angular.json exists): *.controller.(js|ts)")
- .regex(".*[^a-zA-Z\\d]controller\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_controller_generic_test", "extra-icons/angular-controller-test.svg", "Angular (if angular.json exists): *.controller.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]controller\\.spec\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_directive_generic", "extra-icons/angular-directive.svg", "Angular (if angular.json exists): *.directive.(js|ts)")
- .regex(".*[^a-zA-Z\\d]directive(s)?\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_directive_generic_test", "extra-icons/angular-directive-test.svg", "Angular (if angular.json exists): *.directive.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]directive(s)?\\.spec\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_guard_generic", "extra-icons/angular-guard.svg", "Angular (if angular.json exists): *.guard.(js|ts)")
- .regex(".*[^a-zA-Z\\d]guard\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_guard_generic_test", "extra-icons/angular-guard-test.svg", "Angular (if angular.json exists): *.guard.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]guard\\.spec\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_module_generic", "extra-icons/angular-module.svg", "Angular (if angular.json exists): *.module.(js|ts)")
- .regex(".*[^a-zA-Z\\d]module\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_module_generic_test", "extra-icons/angular-module-test.svg", "Angular (if angular.json exists): *.module.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]module\\.spec\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_pipe_generic", "extra-icons/angular-pipe.svg", "Angular (if angular.json exists): *.pipe.(js|ts)")
- .regex(".*[^a-zA-Z\\d]pipe\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_pipe_generic_test", "extra-icons/angular-pipe-test.svg", "Angular (if angular.json exists): *.pipe.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]pipe\\.spec\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_resolver_generic", "extra-icons/angular-resolver.svg", "Angular (if angular.json exists): *.resolver.(js|ts)")
- .regex(".*[^a-zA-Z\\d]resolver\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_resolver_generic_test", "extra-icons/angular-resolver-test.svg", "Angular (if angular.json exists): *.resolver.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]resolver\\.spec\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_service_generic", "extra-icons/angular-service.svg", "Angular (if angular.json exists): *.service.(js|ts)")
- .regex(".*[^a-zA-Z\\d]service\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_service_generic_test", "extra-icons/angular-service-test.svg", "Angular (if angular.json exists): *.service.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]service\\.spec\\.(js|ts)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_spec_generic_js", "extra-icons/test-javascript.svg", "Angular (if angular.json exists): *.spec.js")
- .regex(".*[^a-zA-Z\\d]spec\\.js")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .altIcons("extra-icons/test-javascript_alt.svg")
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_spec_generic", "extra-icons/test-ts.svg", "Angular (if angular.json exists): *.spec.(ts|tsx)")
- .regex(".*[^a-zA-Z\\d]spec\\.(ts|tsx)")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .altIcons("extra-icons/test-ts_alt.svg")
- .tags(ModelTag.ANGULAR2),
- ofFile("angular_html", "extra-icons/html5.svg", "Angular (if angular.json exists): *.html")
- .end(".html")
- .iconEnabler(IconEnablerType.IS_IN_ANGULAR_FOLDER)
- .tags(ModelTag.ANGULAR2, ModelTag.HTML),
- //
-
- //
- ofFile("flutter_pubspecyaml", "extra-icons/flutter.svg", "Flutter: pubspec.yaml")
- .eq("pubspec.yaml")
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofFile("flutter_pubspeclock", "extra-icons/flutterlock.svg", "Flutter: pubspec.lock")
- .eq("pubspec.lock")
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofFile("flutter_metadata", "extra-icons/flutter-metadata.svg", "Flutter: .metadata")
- .eq(".metadata")
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofFile("flutter_analysisoptionsyaml", "extra-icons/flutter-analysisoptions.svg", "Flutter: analysis_options.yaml")
- .eq("analysis_options.yaml")
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofDir("flutter_dirandroid", "extra-icons/folder_os_android.svg", "Flutter: android folder")
- .eq("android")
- .autoLoadNewUIIconVariant()
- .inProjectRootFolder()
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofDir("flutter_dirlinux", "extra-icons/folder_os_linux.svg", "Flutter: linux folder")
- .eq("linux")
- .autoLoadNewUIIconVariant()
- .inProjectRootFolder()
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofDir("flutter_dirwindows", "extra-icons/folder_os_windows.svg", "Flutter: windows folder")
- .eq("windows")
- .autoLoadNewUIIconVariant()
- .inProjectRootFolder()
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofDir("flutter_dirios", "extra-icons/folder_os_ios.svg", "Flutter: ios folder")
- .eq("ios")
- .autoLoadNewUIIconVariant()
- .inProjectRootFolder()
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofDir("flutter_dirmacos", "extra-icons/folder_os_macos.svg", "Flutter: macos folder")
- .eq("macos")
- .autoLoadNewUIIconVariant()
- .inProjectRootFolder()
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofDir("flutter_dirweb", "extra-icons/folder_os_web.svg", "Flutter: web folder")
- .eq("web")
- .autoLoadNewUIIconVariant()
- .inProjectRootFolder()
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- ofDir("flutter_dirdarttool", "extra-icons/folder_tmp.svg", "Flutter: .dart_tool folder")
- .eq(".dart_tool")
- .autoLoadNewUIIconVariant()
- .inProjectRootFolder()
- .iconEnabler(IconEnablerType.IS_IN_FLUTTER_FOLDER)
- .tags(ModelTag.FLUTTER),
- //
-
- //
- ofFile("elixir", "extra-icons/elixir.svg", "Elixir: *.ex, *.exs")
- .end(".ex", ".exs", "mix.lock"),
- //
-
- //
- ofFile("nestjs", "extra-icons/nestjs.svg", "NestJS: .nest-cli.json, nest-cli.json, nestconfig.json, .nestconfig.json")
- .eq(".nest-cli.json", "nest-cli.json", "nestconfig.json", ".nestconfig.json")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_adapter", "extra-icons/nestjs_adapter.svg", "NestJS: *.adapter.(js|ts)")
- .regex(".*[^a-zA-Z\\d]adapter\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_controller", "extra-icons/nestjs_controller.svg", "NestJS: *.controller.(js|ts)")
- .regex(".*[^a-zA-Z\\d]controller\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_controller_test", "extra-icons/nestjs_controller_test.svg", "NestJS: *.controller.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]controller\\.spec\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_decorator", "extra-icons/nestjs_decorator.svg", "NestJS: *.decorator.(js|ts)")
- .regex(".*[^a-zA-Z\\d]decorator\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_dto", "extra-icons/nestjs_dto.svg", "NestJS: *.dto.(js|ts)")
- .regex(".*[^a-zA-Z\\d]dto\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_entity", "extra-icons/nestjs_entity.svg", "NestJS: *.entity.(js|ts)")
- .regex(".*[^a-zA-Z\\d]entity\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_filter", "extra-icons/nestjs_filter.svg", "NestJS: *.filter.(js|ts)")
- .regex(".*[^a-zA-Z\\d]filter\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_gateway", "extra-icons/nestjs_gateway.svg", "NestJS: *.gateway.(js|ts)")
- .regex(".*[^a-zA-Z\\d]gateway\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_guard", "extra-icons/nestjs_guard.svg", "NestJS: *.guard.(js|ts)")
- .regex(".*[^a-zA-Z\\d]guard\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_interceptor", "extra-icons/nestjs_interceptor.svg", "NestJS: *.interceptor.(js|ts)")
- .regex(".*[^a-zA-Z\\d]interceptor\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_middleware", "extra-icons/nestjs_middleware.svg", "NestJS: *.middleware.(js|ts)")
- .regex(".*[^a-zA-Z\\d]middleware\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_model", "extra-icons/nestjs_model.svg", "NestJS: *.model.(js|ts)")
- .regex(".*[^a-zA-Z\\d]model\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_module", "extra-icons/nestjs_module.svg", "NestJS: *.module.(js|ts)")
- .regex(".*[^a-zA-Z\\d]module\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_pipe", "extra-icons/nestjs_pipe.svg", "NestJS: *.pipe.(js|ts)")
- .regex(".*[^a-zA-Z\\d]pipe\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_service", "extra-icons/nestjs_service.svg", "NestJS: *.service.(js|ts)")
- .regex(".*[^a-zA-Z\\d]service\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- ofFile("nestjs_service_test", "extra-icons/nestjs_service_test.svg", "NestJS: *.service.spec.(js|ts)")
- .regex(".*[^a-zA-Z\\d]service\\.spec\\.(js|ts)")
- .tags(ModelTag.NESTJS),
- //
-
- //
- ofFile("babel", "extra-icons/babel.svg", "Babel: babel.config.[json|js|cjs|mjs]|.babelrc.[json|js|cjs|mjs]|.babelrc")
- .regex(".*/babel\\.config\\.(?:js(?:on)?|[cm]js)|\\.babelrc(?:\\.(?:js(?:on)?|[cm]js))?")
- .altIcons("extra-icons/babel_alt.svg"),
- ofFile("cookie", "extra-icons/cookie.svg", "Cookie (regex): .*cookie[a-zA-Z\\d_-]*\\.txt")
- .regex(".*cookie[a-zA-Z\\d._\\-]*\\.txt$"),
- ofFile("dotenv", "extra-icons/env.svg", "Dotenv: .*\\.env(\\.[a-zA-Z0-9]+)*")
- .regex(".*\\.env[a-zA-Z\\d._\\-]*$")
- .altIcons("extra-icons/env_alt.svg", "extra-icons/env_alt2.svg"),
- ofFile("eslint", "extra-icons/eslint.svg", "Eslint (regex): .*\\.eslintrc(\\.[cm]?js(on)?|\\.y(a)?ml)?$")
- .regex(".*\\.eslintrc(\\.[cm]?js(on)?|\\.y(a)?ml)?$"),
- ofFile("githubactions", "extra-icons/github_action.svg", "GitHub Actions: .github/workflows/.*\\.yml")
- .regex(".*/\\.github/workflows/.*\\.yml"),
- ofFile("nodemon", "extra-icons/nodemon.svg", "Nodemon: ^\\.?nodemon\\.json$")
- .regex(".^\\.?nodemon\\.json$"),
- ofFile("tsconfig", "extra-icons/tsconfig.svg", "TSConfig: .*/\\.?tsconfig.*\\.(js|json)$")
- .regex(".*/\\.?tsconfig.*\\.(js|json)$"),
- ofFile("jsconfig", "extra-icons/jsconfig.svg", "JSConfig: .*/\\.?jsconfig.*\\.(js|json)$")
- .regex(".*/\\.?jsconfig.*\\.(js|json)$"),
- ofFile("typescript-def", "extra-icons/typescript-def.svg", "TypescriptDef: .*\\.d\\.ts$")
- .regex(".*\\.d\\.ts$"),
- ofFile("post-css", "extra-icons/postcss.svg", "PostCSS: .*\\.(pcss|postcss)$")
- .regex(".*\\.(pcss|postcss)$"),
- ofFile("post-css-config", "extra-icons/postcss.svg", "PostCSS Configuration: .*(\\.postcssrc|postcss\\.config)(\\.[cm]?js|ts|json|ya?ml)?$")
- .regex(".*(\\.postcssrc|postcss\\.config)(\\.[cm]?js|ts|json|ya?ml)?$"),
- ofFile("sequelize", "extra-icons/sequelize.svg", "Sequelize: .*\\.sequelizerc(\\.[cm]?js|\\.json)?$")
- .regex(".*\\.sequelizerc(\\.[cm]?js|\\.json)?$"),
- ofFile("svelte", "extra-icons/svelte.svg", "Svelte: .*\\.(svelte|svx)")
- .regex(".*\\.(svelte|svx)"),
- ofFile("tailwindcss", "extra-icons/tailwindcss.svg", "Tailwindcss Configuration: .*\\.?tailwind.*\\.[cm]?[jt]s$")
- .regex(".*\\.?tailwind.*\\.[cm]?[jt]s$"),
- ofFile("test-typescript", "extra-icons/test-ts.svg", "TestTypescript: .*\\.?(test|spec)\\.(ts|tsx)$")
- .regex(".*\\.?(test|spec)\\.(ts|tsx)$")
- .altIcons("extra-icons/test-ts_alt.svg"),
- ofFile("test-javascript", "extra-icons/test-javascript.svg", "TestJavascript: .*\\.?(test|spec)\\.js$")
- .regex(".*\\.?(test|spec)\\.js$")
- .altIcons("extra-icons/test-javascript_alt.svg"),
- ofFile("flyway", "extra-icons/flyway.svg", "Flyway (regex): '.*/db/migration/.*\\.sql'")
- .regex(".*/db/migration/.*\\.sql")
- .tags(ModelTag.FLYWAY)
- .altIcons("extra-icons/flyway_alt.svg", "extra-icons/flyway_alt2.png"),
- ofFile("liquibase", "extra-icons/liquibase.svg", "Liquibase (regex): '.*/db/changelog/.*\\.(sql|xml)'")
- .regex(".*/db/changelog/.*\\.(sql|xml)")
- .tags(ModelTag.LIQUIBASE)
- .altIcons("extra-icons/liquibase_alt.svg"),
- ofFile("mockk", "extra-icons/mockk.svg", "Mockk: io/mockk/settings.properties")
- .regex(".*/io/mockk/settings\\.properties"),
- ofFile("storybook", "extra-icons/storybook.svg", "Storybook: *.stor(y|ies).(js|jsx|ts|tsx|mdx)")
- .regex(".*\\.stor(y|ies)\\.(js|jsx|ts|tsx|mdx)$")
- .tags(ModelTag.STORYBOOK),
- //
-
- //
- ofFile("dependabot_config", "extra-icons/dependabot.svg", "Dependabot: .dependabot/config.yml")
- .eq("config.yml").parents(".dependabot")
- .altIcons("extra-icons/dependabot_alt.svg"),
- ofFile("dependabot_github", "extra-icons/dependabot.svg", "Dependabot: .github/dependabot.yml")
- .eq("dependabot").end(YML).parents(".github")
- .altIcons("extra-icons/dependabot_alt.svg"),
- ofFile("dependabot_gitlab", "extra-icons/dependabot.svg", "Dependabot: .gitlab/dependabot.yml")
- .eq("dependabot").end(YML).parents(".gitlab")
- .altIcons("extra-icons/dependabot_alt.svg"),
- ofFile("golwroot", "extra-icons/glowroot.svg", "Glowroot: glowroot/admin.json and glowroot/config.json")
- .eq("admin.json", "config.json").parents("glowroot"),
- ofFile("jgitver", "extra-icons/jgitver.svg", "jgitver: .mvn/jgitver.config.xml")
- .eq("jgitver.config.xml").parents(".mvn"),
- ofFile("mergify1", "extra-icons/mergify.svg", "Mergify: .mergify.yml")
- .eq(".mergify.yml"),
- ofFile("mergify2", "extra-icons/mergify.svg", "Mergify: .mergify/config.yml")
- .eq("config.yml").parents(".mergify"),
- ofFile("mergify3", "extra-icons/mergify.svg", "Mergify: .github/mergify.yml")
- .eq("mergify.yml").parents(".github"),
- ofFile("nuget", "extra-icons/nuget.svg", "Nuget: .nuget/packages.config")
- .eq("packages.config").parents(".nuget"),
- ofFile("onap_cba_blueprint", "extra-icons/onap-cba-blueprint.svg", "ONAP CBA: Definitions/*blueprint.json")
- .end("blueprint.json").parents("definitions")
- .autoLoadNewUIIconVariant(),
- ofFile("onap_cba_definitions", "extra-icons/onap-cba-definitions.svg", "ONAP CBA: Definitions/*(artifact_types, data_types, node_types, relationship_types, resources_definition_types).json")
- .end("artifact_types.json", "data_types.json", "node_types.json", "relationship_types.json", "resources_definition_types.json").parents("definitions")
- .autoLoadNewUIIconVariant(),
- ofFile("onap_cba_tosca", "extra-icons/onap-cba-tosca.svg", "ONAP CBA: TOSCA-Metadata/*TOSCA.meta")
- .end("tosca.meta").parents("tosca-metadata"),
- ofFile("semaphoreci", "extra-icons/semaphoreci.svg", "Semaphore: .semaphore/semaphore.yml")
- .eq("semaphore.yml").parents(".semaphore"),
- ofFile("vscode_settings", "extra-icons/vscode.svg", "Visual Studio Code: .vscode/settings.json")
- .eq("settings.json").parents(".vscode"),
- //
-
- //
- ofFile("vcskeep", "extra-icons/keep.svg", "Various VCS: .keep, .gitkeep, .hgkeep, .svnkeep")
- .eq(".keep", ".gitkeep", ".hgkeep", ".svnkeep"),
- ofFile("htaccess", "extra-icons/htaccess.svg", "Apache: .htaccess")
- .eq(".htaccess"),
- ofFile("android_manifest", "extra-icons/android.svg", "Android: androidmanifest.xml")
- .eq("androidmanifest.xml")
- .altIcons("extra-icons/android_alt.svg"),
- ofFile("appveyor", "extra-icons/appveyor.svg", "Appveyor: appveyor.yml, .appveyor.yml")
- .eq("appveyor.yml", ".appveyor.yml"),
- ofFile("allcontributors", "extra-icons/allcontributors.svg", "All Contributors: .all-contributorsrc")
- .eq(".all-contributorsrc"),
- ofFile("archunit", "extra-icons/archunit.svg", "ArchUnit: archunit.properties")
- .eq("archunit.properties"),
- ofFile("author", "extra-icons/authors.svg", "Author: author(.md,.txt,.adoc,.rst), authors")
- .eq("author", "authors").mayEnd(TXT)
- .altIcons("extra-icons/authors_alt.svg", "extra-icons/authors_alt2.svg",
- "extra-icons/authors_alt3.svg", "extra-icons/authors_alt4.svg"),
- ofFile("bamboo", "extra-icons/bamboo.svg", "Bamboo: bamboo.yml")
- .eq("bamboo.yml"),
- ofFile("caddyfile", "extra-icons/caddy.svg", "Caddy: Caddyfile")
- .eq("caddyfile"),
- ofFile("cargo", "extra-icons/cargo.svg", "Cargo: cargo.toml")
- .eq("cargo.toml"),
- ofFile("commitlint", "extra-icons/commitlint.svg", "Commitlint: .commitlintrc, .commitlintrc.json, .commitlintrc.yaml, etc.")
- .eq(".commitlintrc", ".commitlintrc.json", ".commitlintrc.yaml", ".commitlintrc.yml",
- ".commitlintrc.js", ".commitlintrc.cjs", ".commitlintrc.ts", "commitlint.config.js",
- "commitlint.config.cjs", "commitlint.config.ts"),
- ofFile("coveralls", "extra-icons/coveralls.svg", "Coveralls: coveralls.json")
- .eq("coveralls.json"),
- ofFile("gradle_main", "extra-icons/gradle.svg", "Gradle: build.gradle, gradle.properties, settings.gradle")
- .eq("build.gradle", "gradle.properties", "settings.gradle"),
- ofFile("gradle_kotlin", "extra-icons/gradle_kotlin_colored.svg", "Gradle (Kotlin DSL): build.gradle.kts, settings.gradle.kts")
- .eq("build.gradle.kts", "settings.gradle.kts")
- .altIcons("extra-icons/gradle_kotlin.svg"),
- ofFile("gradle", "extra-icons/gradlew.svg", "Gradle: gradlew")
- .eq("gradlew"),
- ofFile("gradlew", "extra-icons/gradlew.svg", "Gradle (Windows): gradlew.bat, gradlew.cmd")
- .eq("gradlew.bat", "gradlew.cmd"),
- ofFile("gradle_wrapper", "extra-icons/gradle.svg", "Gradle Wrapper: gradle-wrapper.jar, gradle-wrapper.properties")
- .eq("gradle-wrapper.jar", "gradle-wrapper.properties"),
- ofFile("gradle_lock", "extra-icons/gradle_lock.svg", "Gradle dependency versions lock: gradle.lockfile")
- .eq("gradle.lockfile"),
- ofFile("gradle_buildscriptlock", "extra-icons/gradle_lock.svg", "Gradle dependency versions lock: buildscript-gradle.lockfile")
- .eq("buildscript-gradle.lockfile"),
- ofFile("mvnw_linux", "extra-icons/mvnw.svg", "Maven: mvnw")
- .eq("mvnw"),
- ofFile("berksfile", "extra-icons/berkshelf.svg", "Berkshelf: berksfile")
- .eq("berksfile"),
- ofFile("berksfilelock", "extra-icons/berkshelflock.svg", "Berkshelf: berksfile.lock")
- .eq("berksfile.lock"),
- ofFile("bitbucket", "extra-icons/bitbucket.svg", "Bitbucket: bitbucket-pipelines.yml")
- .eq("bitbucket-pipelines").end(YML),
- ofFile("bower", "extra-icons/bower.svg", "Bower: bower.json, .bowerrc")
- .eq("bower.json", ".bowerrc"),
- ofFile("browserslist", "extra-icons/browserslist.svg", "Browserslist: browserslist, .browserslistrc")
- .eq("browserslist", ".browserslistrc"),
- ofFile("build", "extra-icons/build.svg", "Build: build(.md,.txt,.adoc,.rst), building")
- .eq("build", "building").mayEnd(TXT),
- ofFile("cache2k", "extra-icons/cache2k.svg", "cache2k: cache2k.xml")
- .eq("cache2k.xml"),
- ofFile("cassandra", "extra-icons/cassandra.svg", "Cassandra: cassandra(.yml,.yaml)")
- .eq("cassandra").mayEnd(YML),
- ofFile("cassandra1", "extra-icons/cassandra.svg", "Cassandra: start by 'cassandra' and end by '.yml,.yaml'")
- .start("cassandra").end(YML),
- ofFile("changelog", "extra-icons/changelog.svg", "Changelog: changelog(.md,.txt,.adoc,.rst), changes, release-notes, release_notes, releasenotes")
- .eq("changelog", "changes", "release-notes", "release_notes", "releasenotes").mayEnd(TXT),
- ofFile("circle", "extra-icons/circleci.svg", "Circle CI: circle.yml")
- .eq("circle.yml"),
- ofFile("circle1", "extra-icons/circleci.svg", "Circle CI: .circleci/config.yml")
- .eq("config.yml").parents(".circleci"),
- ofFile("cirrus", "extra-icons/cirrus.svg", "Cirrus CI: .cirrus.yml")
- .eq(".cirrus.yml"),
- ofFile("composer", "extra-icons/composer.svg", "Composer: composer.json, composer.lock")
- .eq("composer.json", "composer.lock"),
- ofFile("cypress", "extra-icons/cypress.svg", "Cypress: cypress.json")
- .eq("cypress.json"),
- ofFile("mvnw_windows", "extra-icons/mvnw.svg", "Maven (Windows): mvnw.bat, mvnw.cmd")
- .eq("mvnw.bat", "mvnw.cmd"),
- ofFile("codecov", "extra-icons/codecov.svg", "CodeCov: .codecov.yml, codecov.yml")
- .eq(".codecov.yml", "codecov.yml"),
- ofFile("codefresh", "extra-icons/codefresh.svg", "Codefresh: codefresh.yml")
- .eq("codefresh.yml"),
- ofFile("codacy", "extra-icons/codacy.svg", "Codacy: .codacy(.yml,.yaml), codacy(.yml,.yaml)")
- .eq(".codacy", "codacy").mayEnd(YML),
- ofFile("codeception", "extra-icons/codeception.svg", "Codeception: codeception.dist(.yml,.yaml)")
- .eq("codeception.dist.yml").mayEnd(YML),
- ofFile("codeship", "extra-icons/codeship.svg", "Codeship steps: codeship-steps(.xml,.yml,...)")
- .eq("codeship-steps").mayEnd(CFG)
- .altIcons("extra-icons/codeship_alt.png"),
- ofFile("contact", "extra-icons/contact.svg", "Contact: contact(.md,.txt,.adoc,.rst), contacts")
- .eq("contact", "contacts").mayEnd(TXT),
- ofFile("contribute", "extra-icons/contributing.svg", "Contribution: contribute(.md,.txt,.adoc,.rst), contributing, contribution")
- .eq("contribute", "contributing", "contribution").mayEnd(TXT)
- .altIcons("extra-icons/contributing_alt.png", "extra-icons/contributing_alt2.svg"),
- ofFile("coveragerc", "extra-icons/coveragerc.svg", "Python coverage: .coveragerc")
- .eq(".coveragerc"),
- ofFile("crowdin", "extra-icons/crowdin.svg", "Crowdin: .crowdin.yml")
- .eq(".crowdin.yml"),
- ofFile("deno", "extra-icons/deno.svg", "Deno: deno.json, deno.jsonc")
- .eq("deno.json", "deno.jsonc"),
- ofFile("deptective", "extra-icons/deptective.svg", "Deptective: deptective.json")
- .eq("deptective.json"),
- ofFile("docker", "extra-icons/docker_.svg", "Docker: dockerfile(.xml,.yml,...)")
- .eq("dockerfile").mayEnd(CFG)
- .altIcons("extra-icons/docker_alt.svg", "extra-icons/docker_alt2.svg")
- .tags(ModelTag.DOCKER),
- ofFile("dockercompose", "extra-icons/dockercompose_.svg", "Docker: docker-compose")
- .eq("docker-compose").mayEnd(CFG)
- .altIcons("extra-icons/dockercompose_alt.svg", "extra-icons/dockercompose_alt2.svg")
- .tags(ModelTag.DOCKER),
- ofFile("docker1", "extra-icons/docker_.svg", "Docker: start by 'dockerfile' and end by '.xml,.yml,...'")
- .start("dockerfile").end(CFG)
- .altIcons("extra-icons/docker_alt.svg", "extra-icons/docker_alt2.svg")
- .tags(ModelTag.DOCKER),
- ofFile("dockercompose1", "extra-icons/dockercompose_.svg", "Docker: start by 'docker-compose' and end by '.xml,.yml,...'")
- .start("docker-compose").end(CFG)
- .altIcons("extra-icons/dockercompose_alt.svg", "extra-icons/dockercompose_alt2.svg")
- .tags(ModelTag.DOCKER),
- ofFile("dockerignore", "extra-icons/dockerignore.svg", "Docker: .dockerignore")
- .eq(".dockerignore")
- .altIcons("extra-icons/dockerignore_alt.svg", "extra-icons/dockerignore_alt2.svg")
- .tags(ModelTag.DOCKER),
- ofFile("editorconfig", "extra-icons/editorconfig.svg", "EditorConfig: .editorconfig")
- .eq(".editorconfig").mayEnd(CFG)
- .altIcons("extra-icons/editorconfig_alt.svg", "extra-icons/editorconfig_alt2.svg"),
- ofFile("elastic", "extra-icons/elasticsearch.svg", "Elasticsearch: elastic(.yml,.yaml)")
- .eq("elastic").mayEnd(YML),
- ofFile("elastic1", "extra-icons/elasticsearch.svg", "Elasticsearch: start by 'elastic' and end by '.yml,.yaml'")
- .start("elastic").end(YML),
- ofFile("expo_eas", "extra-icons/expo.svg", "Expo EAS: eas.json")
- .eq("eas.json"),
- ofFile("cerebro", "extra-icons/elastic-cerebro.svg", "Cerebro: cerebro(.conf)")
- .eq("cerebro").mayEnd(".conf"),
- ofFile("cerebro1", "extra-icons/elastic-cerebro.svg", "Cerebro: start by 'cerebro' and end by '.conf'")
- .start("cerebro").end(".conf"),
- ofFile("detekt", "extra-icons/detekt.svg", "Detekt: end by 'detekt-config.yml' or 'detekt.yml'")
- .end("detekt-config.yml", "detekt.yml"),
- ofFile("faq", "extra-icons/faq.svg", "FAQ: faq(.md,.txt,.adoc,.rst)")
- .eq("faq").mayEnd(TXT)
- .altIcons("extra-icons/faq_alt.svg", "extra-icons/faq_alt2.svg",
- "extra-icons/faq_alt3.svg", "extra-icons/faq_alt4.svg"),
- ofFile("help", "extra-icons/faq.svg", "HELP: help(.md,.txt,.adoc,.rst)")
- .eq("help").mayEnd(TXT)
- .altIcons("extra-icons/faq_alt.svg", "extra-icons/faq_alt2.svg",
- "extra-icons/faq_alt3.svg", "extra-icons/faq_alt4.svg"),
- ofFile("intellijcodestyle", "extra-icons/jetbrains.svg", "IntelliJ: intellijcodestyle.xml")
- .eq("intellijcodestyle.xml"),
- ofFile("mailmap", "extra-icons/email.svg", "Mailmap: .mailmap")
- .eq(".mailmap"),
- ofFile("msazure", "extra-icons/msazure.svg", "Microsoft Azure: azure-pipelines.yml")
- .eq("azure-pipelines.yml"),
- ofFile("msazure1", "extra-icons/msazure.svg", "Microsoft Azure: start by 'azure-pipelines' and end by '.yml'")
- .start("azure-pipelines").end(".yml"),
- ofFile("gatling", "extra-icons/gatling.svg", "Gatling: gatling(.conf)")
- .eq("gatling").mayEnd(".conf"),
- ofFile("gatling1", "extra-icons/gatling.svg", "Gatling: start by 'gatling' and end by '.conf'")
- .start("gatling").end(".conf"),
- ofFile("gitpod", "extra-icons/gitpod.svg", "Gitpod: .gitpod.yml")
- .start(".gitpod").end(YML),
- ofFile("golangarchlinter", "extra-icons/golangarchlinter.svg", "GoLang Arch Linter: .go-arch-lint.yml")
- .start(".go-arch-lint.yml"),
- ofFile("goreleaser", "extra-icons/goreleaser.svg", "GoReleaser: .goreleaser.yml")
- .start(".goreleaser.yml")
- .altIcons("extra-icons/goreleaser_alt.svg"),
- ofFile("grunt", "extra-icons/grunt.svg", "Grunt: Gruntfile.js")
- .eq("gruntfile.js"),
- ofFile("git", "extra-icons/git.svg", "Git: .gitattributes, .gitignore, .gitmodules, .gitreview")
- .eq(".gitattributes", ".gitignore", ".gitmodules", ".gitreview"),
- ofFile("gitblameignorerevs", "extra-icons/git.svg", "Git: .git-blame-ignore-revs")
- .eq(".git-blame-ignore-revs"),
- ofFile("gitlab", "extra-icons/gitlab.svg", "Gitlab: .gitlab-ci.yml")
- .eq(".gitlab-ci.yml")
- .altIcons("extra-icons/gitlab_next.svg", "extra-icons/gitlab_alt.svg"),
- ofFile("grafana", "extra-icons/grafana.svg", "Grafana: grafana.ini")
- .eq("grafana.ini"),
- ofFile("graphqlconfig", "extra-icons/graphql_config.svg", "GraphQL: graphql.config.json")
- .eq("graphql.config.json"),
- ofFile("graphqlresolver", "extra-icons/graphql.svg", "GraphQL Resolvers: *.resolver.*")
- .regex(".+\\.resolver\\..+")
- .iconEnabler(IconEnablerType.IS_IN_GRAPHQL_FOLDER),
- ofFile("graphqlschema", "extra-icons/graphql_schema.svg", "GraphQL: graphql.schema.json")
- .eq("graphql.schema.json"),
- ofFile("gocd", "extra-icons/gocd.svg", "Gocd: .gocd(.xml,.yml,...)")
- .eq(".gocd").mayEnd(CFG),
- ofFile("gomod", "extra-icons/gomod.svg", "Go: go.mod")
- .eq("go.mod")
- .altIcons("extra-icons/gomod_alt.svg"),
- ofFile("hadolint", "extra-icons/hadolint.svg", "Hadolint: .hadolint.yaml, .hadolint.yml")
- .eq(".hadolint").end(YML),
- ofFile("hibernate", "extra-icons/hibernate.svg", "Hibernate: hibernate.properties")
- .eq("hibernate.properties"),
- ofFile("java", "extra-icons/java.svg", "JVM properties (e.g. Tomcat or Maven JVM configuration): jvm.properties, jvm.config")
- .eq("jvm.properties", "jvm.config")
- .altIcons("extra-icons/java_alt.png"),
- ofFile("imgbot", "extra-icons/imgbot.svg", "ImgBot: .imgbotconfig")
- .eq(".imgbotconfig"),
- ofFile("jenkins", "extra-icons/jenkins.svg", "Jenkins: jenkinsfile(.xml,.yml,...), jenkins")
- .eq("jenkinsfile", "jenkins").mayEnd(CFG)
- .altIcons("extra-icons/jenkins_alt.png"),
- ofFile("jenkins1", "extra-icons/jenkins.svg", "Jenkins: start by 'jenkins and end by '.xml,.yml,...'")
- .start("jenkins").end(CFG)
- .altIcons("extra-icons/jenkins_alt.png"),
- ofFile("jenkins2", "extra-icons/jenkins.svg", "Jenkins: start by 'jenkins' and contain no dot")
- .start("jenkins").noDot()
- .altIcons("extra-icons/jenkins_alt.png"),
- ofFile("jenkins3", "extra-icons/jenkins.svg", "Jenkins: end by '.jenkinsfile'")
- .end(".jenkinsfile")
- .altIcons("extra-icons/jenkins_alt.png"),
- ofFile("jest_js", "extra-icons/jest.svg", "Jest: jest.config.js")
- .eq("jest.config.js"),
- ofFile("jest_ts", "extra-icons/jest.svg", "Jest: jest.config.ts")
- .eq("jest.config.ts"),
- ofFile("jitpack", "extra-icons/jitpack.svg", "JitPack: jitpack.yml")
- .eq("jitpack.yml"),
- ofFile("jsbeautify", "extra-icons/jsbeautify.svg", "JSBeautify: .jsbeautifyrc(.xml,.yml,...)")
- .eq(".jsbeautifyrc").mayEnd(CFG)
- .altIcons("extra-icons/jsbeautify_alt.svg"),
- ofFile("jshint", "extra-icons/jshint.svg", "JSHint: .jshintrc(.xml,.yml,...)")
- .eq(".jshintrc").mayEnd(CFG),
- ofFile("junit", "extra-icons/junit5_transparent.svg", "JUnit: junit-platform.properties")
- .eq("junit-platform.properties")
- .altIcons("extra-icons/junit5_white.svg", "extra-icons/junit5.png"),
- ofFile("just", "extra-icons/just.svg", "Just: justfile")
- .eq("justfile")
- .altIcons("extra-icons/just_alt.svg"),
- ofFile("karate", "extra-icons/karate.svg", "Karate: karate-config.js")
- .eq("karate-config.js"),
- ofFile("karma_js", "extra-icons/karma.svg", "Karma: karma.conf.js")
- .eq("karma.conf.js"),
- ofFile("karma_ts", "extra-icons/karma.svg", "Karma: karma.conf.ts")
- .eq("karma.conf.ts"),
- ofFile("kibana", "extra-icons/kibana.svg", "Kibana: kibana(.xml,.yml,...)")
- .eq("kibana").mayEnd(YML),
- ofFile("kibana1", "extra-icons/kibana.svg", "Kibana: start by 'kibana' and end by '.xml,.yml,...'")
- .start("kibana").end(YML),
- ofFile("knownissues", "extra-icons/bug.svg", "Known issues: known_issues(.md,.txt,.adoc,.rst)")
- .start("known_issues").mayEnd(TXT),
- ofFile("kubernetes", "extra-icons/kubernetes.svg", "Kubernetes: kubernetes(.xml,.yml,...)")
- .eq("kubernetes").mayEnd(YML)
- .altIcons("extra-icons/kubernetes_alt.svg", "extra-icons/kubernetes_alt2.svg")
- .tags(ModelTag.KUBERNETES),
- ofFile("kubernetes1", "extra-icons/kubernetes.svg", "Kubernetes: start by 'kubernetes' and end by '.xml,.yml,...'")
- .start("kubernetes").end(YML)
- .altIcons("extra-icons/kubernetes_alt.svg", "extra-icons/kubernetes_alt2.svg")
- .tags(ModelTag.KUBERNETES),
- ofFile("lerna", "extra-icons/lerna.svg", "Lerna: lerna.json")
- .eq("lerna.json"),
- ofFile("lgtm", "extra-icons/lgtm.svg", "LGTM: .lgtm.yml, lgtm.yml")
- .eq("lgtm", ".lgtm").end(YML)
- .altIcons("extra-icons/lgtm_alt.svg"),
- ofFile("license", "extra-icons/license.svg", "License: license(.md,.txt,.adoc,.rst), copying, license_info, additional_license_info")
- .eq("license", "copying", "license_info", "additional_license_info").mayEnd(TXT)
- .altIcons("extra-icons/license_alt.png"),
- ofFile("lighttpd", "extra-icons/lighttpd.svg", "Lighttpd: lighttpd.conf")
- .eq("lighttpd.conf"),
- ofFile("log4j", "extra-icons/log4j.svg", "Log4j: log4j(.xml,.yml,...), log4j-test")
- .eq("log4j", "log4j-test").mayEnd(CFG),
- ofFile("logback", "extra-icons/logback.svg", "Logback: logback(.xml,.yml,...)")
- .eq("logback").mayEnd(CFG),
- ofFile("logback1", "extra-icons/logback.svg", "Logback: start by 'logback-' and end by '.xml,.yml,...'")
- .start("logback-").mayEnd(CFG),
- ofFile("logstash", "extra-icons/logstash.svg", "Logstash: logstash(.cfg,.conf,.yml,.yaml)")
- .eq("logstash").mayEnd(".cfg", ".conf", ".yml", ".yaml"),
- ofFile("logstash1", "extra-icons/logstash.svg", "Logstash: start by 'logstash' and end by '.cfg,.conf,.yml,.yaml'")
- .start("logstash").end(".cfg", ".conf", ".yml", ".yaml"),
- ofFile("logstash2", "extra-icons/logstash.svg", "Logstash: start by 'logstash-' and end by '.cfg,.conf,.yml,.yaml,.txt'")
- .start("logstash-").end(".cfg", ".conf", ".yml", ".yaml", ".txt"),
- ofFile("lombok", "extra-icons/lombok.svg", "Lombok: lombok.config")
- .eq("lombok.config"),
- ofFile("maven_shade_plugin", "extra-icons/generated_pom.svg", "Maven Shade Plugin: dependency-reduced-pom.xml")
- .eq("dependency-reduced-pom.xml")
- .altIcons("extra-icons/generated_pom_alt.svg"),
- ofFile("metro", "extra-icons/metro.svg", "Metro config: metro.config.js")
- .eq("metro.config.js"),
- ofFile("mkdocs", "extra-icons/mkdocs.svg", "MkDocs: mkdocs.yml")
- .eq("mkdocs.yml"),
- ofFile("moduleinfojava", "extra-icons/moduleinfo.svg", "Java module: module-info.java")
- .eq("module-info.java")
- .altIcons("extra-icons/moduleinfo_alt.svg"),
- ofFile("mongodb", "extra-icons/mongodb.svg", "MongoDB related files: *.mongo.*)")
- .regex(".*\\.mongo\\..+"),
- ofFile("muse", "extra-icons/muse.svg", "Muse: .muse.toml")
- .eq(".muse.toml"),
- ofFile("mysql", "extra-icons/my.svg", "MySQL: my.ini")
- .eq("my.ini"),
- ofFile("netlify", "extra-icons/netlify.svg", "Netlify: netlify.toml")
- .eq("netlify.toml"),
- ofFile("nginx", "extra-icons/nginx.svg", "Nginx: nginx(.conf)")
- .eq("nginx").mayEnd(".conf"),
- ofFile("nginx1", "extra-icons/nginx.svg", "Nginx: start by 'nginx' and end by '.conf'")
- .start("nginx").end(".conf"),
- ofFile("npmrc", "extra-icons/npm.svg", "NPM: .npmrc")
- .eq(".npmrc"),
- ofFile("npmignore", "extra-icons/npmignore.svg", "NPM: .npmignore")
- .eq(".npmignore"),
- ofFile("noai", "extra-icons/noai.svg", "AI Assistant: .noai (block AI features for the project)")
- .eq(".noai")
- .inProjectRootFolder()
- .altIcons("extra-icons/noai_alt.svg"),
- ofFile("notice", "extra-icons/notice.svg", "Notice: notice(.md,.txt,.adoc,.rst)")
- .eq("notice").mayEnd(TXT),
- ofFile("nox", "extra-icons/nox.svg", "Nox: noxfile.py")
- .eq("noxfile.py"),
- ofFile("nx", "extra-icons/nx.svg", "Nx: nx.json")
- .eq("nx.json")
- .altIcons("extra-icons/nx_alt.svg"),
- ofFile("openissues", "extra-icons/bug.svg", "Open issues: open_issues(.md,.txt,.adoc,.rst)")
- .start("open_issues").mayEnd(TXT),
- ofFile("packageinfojava", "extra-icons/packageinfojava.svg", "Java package info: package-info.java")
- .eq("package-info.java"),
- ofFile("packagejson", "extra-icons/npm.svg", "NPM: package.json")
- .eq("package.json"),
- ofFile("packagejsonlock", "extra-icons/packagejsonlock.svg", "NPM: package-lock.json")
- .eq("package-lock.json"),
- ofFile("poetry-poetry-lock", "extra-icons/poetry_lock.svg", "Poetry: poetry.lock")
- .eq("poetry.lock"),
- ofFile("poetry-poetry-toml", "extra-icons/poetry.svg", "Poetry: poetry.toml")
- .eq("poetry.toml"),
- ofFile("pdd", "extra-icons/pdd.svg", "Puzzle Driven Development: .pdd")
- .eq(".pdd"),
- ofFile("pdd_yml", "extra-icons/pdd.svg", "Puzzle Driven Development: .0pdd.yml")
- .eq(".0pdd.yml"),
- ofFile("pnpmlock", "extra-icons/pnpm.svg", "PNPM: pnpm-lock.yaml")
- .eq("pnpm-lock.yaml"),
- ofFile("prettier", "extra-icons/prettier.svg", "Prettier: .prettierrc")
- .eq(".prettierrc")
- .tags(ModelTag.PRETTIER)
- .altIcons("extra-icons/prettier_alt.svg"),
- ofFile("prettier-yml", "extra-icons/prettier.svg", "Prettier: .prettierrc.yml, .prettierrc.yaml")
- .eq(".prettierrc.yml", ".prettierrc.yaml")
- .tags(ModelTag.PRETTIER)
- .altIcons("extra-icons/prettier_alt.svg"),
- ofFile("prettier-json", "extra-icons/prettier.svg", "Prettier: .prettierrc.json, .prettierrc.json5")
- .eq(".prettierrc.json", ".prettierrc.json5")
- .tags(ModelTag.PRETTIER)
- .altIcons("extra-icons/prettier_alt.svg"),
- ofFile("prettier-js", "extra-icons/prettier.svg", "Prettier: .prettierrc.js, prettier.config.js")
- .eq(".prettierrc.js", "prettier.config.js")
- .tags(ModelTag.PRETTIER)
- .altIcons("extra-icons/prettier_alt.svg"),
- ofFile("prettier-cjs", "extra-icons/prettier.svg", "Prettier: .prettierrc.cjs, prettier.config.cjs")
- .eq(".prettierrc.cjs", "prettier.config.cjs")
- .tags(ModelTag.PRETTIER)
- .altIcons("extra-icons/prettier_alt.svg"),
- ofFile("prettier-toml", "extra-icons/prettier.svg", "Prettier: .prettierrc.toml")
- .eq(".prettierrc.toml")
- .tags(ModelTag.PRETTIER)
- .altIcons("extra-icons/prettier_alt.svg"),
- ofFile("prettier-config-mjs", "extra-icons/prettier.svg", "Prettier: prettier.config.mjs")
- .eq("prettier.config.mjs")
- .tags(ModelTag.PRETTIER)
- .altIcons("extra-icons/prettier_alt.svg"),
- ofFile("prettirrc-mjs", "extra-icons/prettier.svg", "Prettier: .prettirrc.mjs")
- .eq(".prettirrc.mjs")
- .tags(ModelTag.PRETTIER)
- .altIcons("extra-icons/prettier_alt.svg"),
- ofFile("prettierignore", "extra-icons/prettierignore.svg", "Prettier: .prettierignore")
- .eq(".prettierignore")
- .tags(ModelTag.PRETTIER),
- ofFile("privacy", "extra-icons/privacy.svg", "Privacy: privacy(.md,.txt,.adoc,.rst)")
- .eq("privacy").mayEnd(TXT),
- ofFile("proguard", "extra-icons/proguard.svg", "Proguard: proguard-rules.pro")
- .eq("proguard-rules.pro"),
- ofFile("prometheus", "extra-icons/prometheus.svg", "Prometheus: prometheus(.yml,.yaml)")
- .eq("prometheus").end(YML),
- ofFile("puppet", "extra-icons/puppet.svg", "Puppet: puppet(.conf)")
- .eq("puppet").mayEnd(".conf"),
- ofFile("puppet1", "extra-icons/puppet.svg", "Puppet: start by 'puppet' and end by '.conf'")
- .start("puppet").end(".conf"),
- ofFile("pytest", "extra-icons/pytest.svg", "Pytest: pytest.ini")
- .eq("pytest.ini"),
- ofFile("qodana", "extra-icons/qodana.svg", "Qodana: qodana.yaml")
- .eq("qodana.yaml")
- .altIcons("extra-icons/qodana_alt.svg"),
- ofFile("readme", "extra-icons/readme.svg", "Readme: readme(.md,.txt,.adoc,.rst), lisezmoi")
- .eq("readme", "lisezmoi").mayEnd(TXT)
- .altIcons("extra-icons/readme_alt.svg", "extra-icons/readme_alt2.svg"),
- ofFile("redis", "extra-icons/redis.svg", "Redis: redis(.conf)")
- .eq("redis").mayEnd(".conf"),
- ofFile("redis1", "extra-icons/redis.svg", "Redis: start by 'redis' and end by '.conf'")
- .start("redis").end(".conf"),
- ofFile("rego", "extra-icons/rego.svg", "Rego (Open Policy Agent): end by '.rego' or '.opa'")
- .end(".opa", ".rego"),
- ofFile("renovate", "extra-icons/renovate.svg", "Renovate: renovate.json, renovate.json5, .renovaterc.json, .renovaterc")
- .eq("renovate.json", "renovate.json5", ".renovaterc.json", ".renovaterc"),
- ofFile("requirementstxt_python", "extra-icons/requirementstxt_python.svg", "Python: requirements.txt (Python facet only)")
- .eq("requirements.txt")
- .facets("python")
- .altIcons("extra-icons/requirementstxt_python_alt.svg"),
- ofFile("restyled", "extra-icons/restyled.svg", "Restyled: .restyled.yaml")
- .eq(".restyled.yaml")
- .altIcons("extra-icons/restyled_alt.svg", "extra-icons/restyled_alt2.svg"),
- ofFile("roadmap", "extra-icons/roadmap.svg", "Roadmap: roadmap(.md,.txt,.adoc,.rst)")
- .eq("roadmap").mayEnd(TXT),
- ofFile("rollup", "extra-icons/rollup.svg", "Rollup: rollup.config.js")
- .eq("rollup.config.js"),
- ofFile("rultor", "extra-icons/rultor.svg", "Rultor: .rultor.yml")
- .eq(".rultor.yml"),
- ofFile("scalingo", "extra-icons/scalingo.svg", "Scalingo: scalingo.json")
- .eq("scalingo.json"),
- ofFile("security", "extra-icons/security.svg", "Security: security(.md,.txt,.adoc,.rst)")
- .eq("security").mayEnd(TXT),
- ofFile("snapcraft", "extra-icons/snap.svg", "Snapcraft: snapcraft.yaml")
- .eq("snapcraft.yaml"),
- ofFile("screwdriver", "extra-icons/screwdriver.svg", "Screwdriver: screwdriver.yaml")
- .eq("screwdriver.yaml"),
- ofFile("stacksmith", "extra-icons/bitnami.svg", "Bitnami Stacksmith: stackerfile.yml")
- .eq("stackerfile.yml"),
- ofFile("sonar", "extra-icons/sonar.svg", "Sonar: sonar-project.properties")
- .eq("sonar-project.properties", ".sonarcloud.properties"),
- ofFile("svgo", "extra-icons/svgo.svg", "SVGO: svgo(.yml,.yaml)")
- .eq("svgo").end(YML)
- .altIcons("extra-icons/svgo_alt.svg"),
- ofFile("svgo2", "extra-icons/svgo.svg", "SVGO: svgo.config.js")
- .eq("svgo.config.js")
- .altIcons("extra-icons/svgo_alt.svg"),
- ofFile("swaggerconfig", "extra-icons/swagger.svg", "Swagger: swagger-config.yaml")
- .eq("swagger-config.yaml")
- .altIcons("extra-icons/swagger_alt.svg"),
- ofFile("swaggerignore", "extra-icons/swaggerignore.svg", "Swagger: .swagger-codegen-ignore")
- .eq(".swagger-codegen-ignore"),
- ofFile("tinylogproperties", "extra-icons/tinylog_properties.svg", "Tinylog: tinylog.properties")
- .eq("tinylog.properties"),
- ofFile("testing", "extra-icons/testing.svg", "Test: test(.md,.txt,.adoc,.rst), testing")
- .eq("test", "testing").mayEnd(TXT),
- ofFile("todo", "extra-icons/todo.svg", "To-Do: todo(.md,.txt,.adoc,.rst)")
- .eq("todo").mayEnd(TXT)
- .altIcons("extra-icons/todo_alt.svg"),
- ofFile("tox", "extra-icons/tox.svg", "Tox: tox.ini")
- .eq("tox.ini"),
- ofFile("travis", "extra-icons/travis.svg", "Travis CI: .travis.yml")
- .eq(".travis.yml")
- .altIcons("extra-icons/travis_alt.svg", "extra-icons/travis_alt02.svg",
- "extra-icons/travis_alt03.svg", "extra-icons/travis_alt04.svg",
- "extra-icons/travis_alt05.svg", "extra-icons/travis_alt06.svg",
- "extra-icons/travis_alt07.svg", "extra-icons/travis_alt08.svg",
- "extra-icons/travis_alt09.svg", "extra-icons/travis_alt10.svg",
- "extra-icons/travis_alt11.svg", "extra-icons/travis_alt12.svg",
- "extra-icons/travis_alt13.svg", "extra-icons/travis_alt14.svg")
- .tags(ModelTag.TRAVIS),
- ofFile("vagrant", "extra-icons/vagrant.svg", "Vagrant: vagrantfile")
- .eq("vagrantfile"),
- ofFile("version", "extra-icons/version.svg", "Version: (.)version(s)(.md,.txt,.adoc,.rst)")
- .eq("version", ".version", "versions", ".versions").mayEnd(TXT),
- ofFile("version_json", "extra-icons/version.svg", "Version: (.)version(s).json")
- .eq("version", ".version", "versions", ".versions").end(".json"),
- ofFile("version_properties", "extra-icons/version.svg", "Version: (.)version(s).properties")
- .eq("version", ".version", "versions", ".versions").end(".properties"),
- ofFile("version_yml", "extra-icons/version.svg", "Version: (.)version(s).y(a)ml")
- .eq("version", ".version", "versions", ".versions").end(YML),
- ofFile("version_xml", "extra-icons/version.svg", "Version: (.)version(s).xml")
- .eq("version", ".version", "versions", ".versions").end(".xml"),
- ofFile("vite", "extra-icons/vite.svg", "Vite: ^vite\\.config\\.[jt]s$")
- .start("vite.config.").end(".js", ".ts")
- .altIcons("extra-icons/vite_alt.svg"),
- ofFile("vitest", "extra-icons/vitest.svg", "Vitest: vitest.config.ts")
- .eq("vitest.config.ts"),
- ofFile("weblate", "extra-icons/weblate.svg", "Weblate: .weblate")
- .eq(".weblate"),
- ofFile("webpack", "extra-icons/webpack.svg", "Webpack: webpack.conf.js")
- .start("webpack.config.").end(".js", ".ts")
- .altIcons("extra-icons/webpack_alt.svg"),
- ofFile("werf", "extra-icons/werf.svg", "Werf: werf.yaml")
- .eq("werf.yaml"),
- ofFile("writerside", "extra-icons/writerside_cfg.svg", "Writerside: writerside.cfg")
- .eq("writerside.cfg")
- .tags(ModelTag.WRITERSIDE),
- ofFile("zalando", "extra-icons/zalando.svg", "Zalando Zappr: .zappr.yaml")
- .eq(".zappr.yaml"),
- //
-
- //
- ofFile("ext_aac", "extra-icons/aac.svg", "Advanced Audio Coding: *.aac")
- .end(".aac"),
- ofFile("ext_archive", "extra-icons/archive.svg", "Archive: *.zip, *.tar, *.gz, *.bz2, *.xz, *.tgz")
- .end(".zip", ".tar", ".gz", ".bz2", ".xz", ".tgz")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_archive_7z", "extra-icons/archive.svg", "Archive: *.7z")
- .end(".7z")
- .altIcons("extra-icons/7zip.svg")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_adoc", "extra-icons/asciidoc.svg", "Asciidoc: *.adoc, *.asciidoc")
- .end(".adoc", ".asciidoc")
- .altIcons("extra-icons/asciidoc_alt.svg"),
- ofFile("ext_monkeys-audio", "extra-icons/monkey's_audio.svg", "Monkey's Audio: *.ape")
- .end(".ape"),
- ofFile("ext_apk", "extra-icons/apk.svg", "Android application package (APK): *.apk, *.xapk")
- .end(".apk", ".xapk"),
- ofFile("ext_apple-audio", "extra-icons/apple.svg", "Apple Audio: *.aiff, *.aifc, *.caf")
- .end(".aiff", ".aifc", ".caf"),
- ofFile("ext_apple-video", "extra-icons/apple.svg", "Apple Video: *.mov, *.qt")
- .end(".mov", ".qt"),
- ofFile("ext_avro_avsc", "extra-icons/avro.svg", "Avro: *.avsc")
- .end(".avsc")
- .autoLoadNewUIIconVariant(),
- ofFile("bicep", "extra-icons/bicep.svg", "Bicep: *.bicep")
- .altIcons("extra-icons/bicep_alt.svg", "extra-icons/bicep_alt2.svg")
- .end("bicep"),
- ofFile("ext_bin", "extra-icons/binary.svg", "Binary: *.bin")
- .end(".bin")
- .altIcons("extra-icons/binary_alt.svg", "extra-icons/binary_alt2.svg"),
- ofFile("ext_back", "extra-icons/backup.svg", "Backup: *.versionbackup, *.versionsbackup, *.bak, *.back, *.backup, *.old, *.prev, *.revert, *.releaseBackup")
- .end(".versionbackup", ".versionsbackup", ".bak", ".back", ".backup", ".old", ".prev", ".revert", ".releasebackup"),
- ofFile("ext_sh", "extra-icons/bash.svg", "Bash: *.sh")
- .end(".sh"),
- ofFile("ext_c", "extra-icons/c.svg", "C: *.c")
- .end(".c")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_cc", "extra-icons/cpp.svg", "C++: *.cc")
- .end(".cc")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_cpp", "extra-icons/cpp.svg", "C++: *.cpp")
- .end(".cpp")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_h", "extra-icons/h.svg", "C/C++: *.h")
- .end(".h")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_hpp", "extra-icons/h.svg", "C/C++: *.hpp")
- .end(".hpp")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_cert", "extra-icons/certificate.svg", "Certificate: *.jks, *.pem, *.crt, *.cert, *.ca-bundle, *.cer, ...")
- .end(".jks", ".pem", ".crt", ".cert", ".ca-bundle", ".cer", ".jceks", ".p12", ".p7b", ".p7s", ".pfx", ".pubkey")
- .altIcons("extra-icons/certificate_alt.svg"),
- ofFile("ext_cmd", "extra-icons/cmd.svg", "Windows script: *.cmd, *.bat, *.ps1")
- .end(".cmd", ".bat", ".ps1"),
- ofFile("ext_csv", "extra-icons/officedocs/msexcel-papirus.svg", "CSV: *.csv")
- .end(".csv")
- .altIcons("extra-icons/csv_alt.svg"),
- ofFile("ext_dar", "extra-icons/jar.svg", "Diffusion Archive / XL Deploy Archive: *.dar")
- .end(".dar"),
- ofFile("ext_deb", "extra-icons/deb.svg", "Debian package: *.deb")
- .end(".deb"),
- ofFile("ext_dll", "extra-icons/binary.svg", "Windows DLL: *.dll")
- .end(".dll")
- .altIcons("extra-icons/binary_alt.svg", "extra-icons/binary_alt2.svg"),
- ofFile("ext_drawio", "extra-icons/drawio.svg", "Draw.io: *.drawio, *.dio")
- .end(".drawio", ".dio")
- .altIcons("extra-icons/drawio_alt.svg", "extra-icons/drawio_alt2.png"),
- ofFile("ext_epub", "extra-icons/epub.svg", "Epub: *.epub, *.mobi, *.azw, *.azw3")
- .end(".epub", ".mobi", ".azw", ".azw3"),
- ofFile("ext_exe", "extra-icons/msexe.svg", "Windows executable: *.exe")
- .end(".exe"),
- ofFile("ext_form", "extra-icons/form.svg", "Form (e.g. IntelliJ Swing xml form): *.form")
- .end(".form"),
- ofFile("ext_graphqls", "extra-icons/graphql.svg", "GraphQL: *.graphqls")
- .end(".graphqls"),
- ofFile("ext_haxe", "extra-icons/haxe.svg", "Haxe: *.hx")
- .end(".hx"),
- ofFile("ext_haxexml", "extra-icons/haxehxml.svg", "Haxe: *.hxml")
- .end(".hxml"),
- ofFile("ext_http", "extra-icons/http.png", "HTTP (e.g. IntelliJ HTTP Client queries file): *.http")
- .end(".http")
- .altIcons("extra-icons/http_alt.svg"),
- ofFile("ext_iml", "extra-icons/jetbrains.svg", "IntelliJ project: *.iml")
- .end(".iml"),
- ofFile("ext_jfr", "extra-icons/jfr.svg", "JFR snapshot: *.jfr")
- .end(".jfr"),
- ofFile("ext_jinja", "extra-icons/jinja.svg", "Jinja: *.jinja, *.jinja2")
- .end(".jinja", ".jinja2"),
- ofFile("ext_cfg_ini", "extra-icons/config.svg", "Configuration: *.ini")
- .end(".ini")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_cfg_cfg", "extra-icons/config.svg", "Configuration: *.cfg")
- .end(".cfg")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_cfg_conf", "extra-icons/config.svg", "Configuration: *.conf")
- .end(".conf")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_cfg_config", "extra-icons/config.svg", "Configuration: *.config")
- .end(".config")
- .autoLoadNewUIIconVariant(),
- ofFile("ext_jar", "extra-icons/jar.svg", "Java archive: *.jar")
- .end(".jar"),
- ofFile("ext_jaroriginal", "extra-icons/jar.svg", "Java archive (copy): *.jar.original")
- .end(".jar.original"),
- ofFile("ext_jsmap", "extra-icons/javascript-map.svg", "Javascript Source Maps: *.js.map")
- .end(".js.map"),
- ofFile("ext_cssmap", "extra-icons/css-map.svg", "Css Source Maps: *.css.map")
- .end(".css.map"),
- ofFile("ext_css", "extra-icons/css.svg", "Css Files: *.css")
- .end(".css"),
- ofFile("ext_js", "extra-icons/javascript.svg", "Javascript: *.js")
- .end(".js")
- .altIcons("extra-icons/javascript_alt.svg"),
- ofFile("ext_js_react", "extra-icons/jsx.svg", "JSX (Javascript + React): *.jsx")
- .end(".jsx"),
- ofFile("ext_kdbx", "extra-icons/keepass.svg", "KeePass: *.kdbx")
- .end(".kdbx")
- .altIcons("extra-icons/keepass_alt2.svg", "extra-icons/keepass_alt.png"),
- ofFile("ext_matroska", "extra-icons/matroska.svg", "Matroska: *.mkv, *.mka")
- .end(".mkv", ".mka"),
- ofFile("ext_md", "extra-icons/markdown.svg", "Markdown: *.md")
- .end(".md")
- .altIcons("extra-icons/markdown_alt.svg", "extra-icons/markdown_alt2.svg",
- "extra-icons/markdown_alt3.svg"),
- ofFile("ext_mdx", "extra-icons/mdx.svg", "MDX: *.mdx")
- .end(".mdx")
- .altIcons("extra-icons/mdx_alt.svg", "extra-icons/mdx_alt2.svg"),
- ofFile("ext_mmd", "extra-icons/mindmap.svg", "IDEA MindMap plugin: *.mmd")
- .end(".mmd"),
- ofFile("ext_mermaid", "extra-icons/mermaid.svg", "Mermaid: *.mermaid")
- .end(".mermaid"),
- ofFile("ext_mermaid_mmd", "extra-icons/mermaid.svg", "Mermaid: *.mmd")
- .end(".mmd"),
- ofFile("ext_mpeg", "extra-icons/mpeg.svg", "MPEG-1/2 Audio: *.mp3, *.mp1, *.m1a, *.mp2, *.m2a, *.mpa")
- .end(".mp3", ".mp1", ".m1a", ".mp2", ".m2a", ".mpa"),
- ofFile("ext_mwb", "extra-icons/mysqlworkbench.svg", "MySQL Workbench: *.mwb")
- .end(".mwb"),
- ofFile("ext_nsi", "extra-icons/nsis.svg", "NSIS Nullsoft Scriptable Install System: *.nsi")
- .end(".nsi"),
- ofFile("ext_opentofu_tf", "extra-icons/opentofu.svg", "OpenTofu: *.tf")
- .end(".tf"),
- ofFile("ext_opentofu_tf_json", "extra-icons/opentofu.svg", "OpenTofu: *.tf.json")
- .end(".tf.json"),
- ofFile("ext_pdf", "extra-icons/pdf.svg", "PDF: *.pdf")
- .end(".pdf")
- .altIcons("extra-icons/pdf_alt.svg", "extra-icons/pdf_alt2.svg",
- "extra-icons/pdf_alt3.svg"),
- ofFile("ext_pid", "extra-icons/pid.svg", "PID: *.pid")
- .end(".pid"),
- ofFile("ext_postmanconfig", "extra-icons/postman.svg", "Postman config: *.postman.json")
- .end(".postman.json"),
- ofFile("ext_puml", "extra-icons/uml.svg", "PlantUML: *.puml")
- .end(".puml"),
- ofFile("ext_postmancollection", "extra-icons/postman_col.svg", "Postman collection: *postman_collection.json")
- .end("postman_collection.json")
- .altIcons("extra-icons/postman.svg"),
- ofFile("ext_postmanenvironment", "extra-icons/postman_env.svg", "Postman environment: *postman_environment.json")
- .end("postman_environment.json")
- .altIcons("extra-icons/postman.svg"),
- ofFile("ext_rpm", "extra-icons/rpm.svg", "Red Hat package: *.rpm")
- .end(".rpm"),
- ofFile("ext_robotframework", "extra-icons/robotframework.svg", "Robot Framework: *.robot")
- .end(".robot")
- .altIcons("extra-icons/robotframework_alt.svg"),
- ofFile("sass", "extra-icons/sass.svg", "SASS: *.sass")
- .end(".sass"),
- ofFile("scss", "extra-icons/scss.svg", "SASS: *.scss")
- .end(".scss"),
- ofFile("less", "extra-icons/less.svg", "LESS CSS: *.less")
- .end(".less"),
- ofFile("ext_stylus-browserext", "extra-icons/stylus-browserext.svg", "Stylus (browser extension): *.styl")
- .end(".styl"),
- ofFile("ext_svg", "extra-icons/svg.svg", "SVG: *.svg")
- .end(".svg")
- .altIcons("extra-icons/svg_alt.svg"),
- ofFile("ext_tf", "extra-icons/terraform.svg", "Terraform: *.hcl, *.tf, *.tf.json")
- .end(".hcl", ".tf", ".tf.json"),
- ofFile("ext_toml", "extra-icons/toml.svg", "TOML: *.toml")
- .end(".toml"),
- ofFile("typescript", "extra-icons/test-ts.svg", "Typescript: *.spec.ts")
- .end(".spec.ts")
- .altIcons("extra-icons/test-ts_alt.svg"),
- ofFile("typescript-ts", "extra-icons/typescript.svg", "Typescript: *.ts")
- .end(".ts"),
- ofFile("typescript-react", "extra-icons/tsx.svg", "TSX (Typescript + React): *.tsx")
- .end(".tsx"),
- ofFile("ext_video", "extra-icons/video.svg", "Video: *.3gp, *.avi, *.flv, *.mkv, *.mp4, *.mpeg, *.ogm, *.webm, ...")
- .end(".3g2", ".3gp", ".avi", ".divx", ".f4a", ".f4b", ".f4p", ".f4v", ".flv", ".m2t", ".m4p",
- ".m4v", ".mp4", ".mpg", ".mpeg", ".ogm", ".ogv", ".ts", ".tsa", ".tsv", ".vob", ".webm", ".wmv", ".xvid")
- .altIcons("extra-icons/video_alt.svg", "extra-icons/video_alt2.svg",
- "extra-icons/video_alt3.svg"),
- ofFile("ext_velocity", "extra-icons/velocity.svg", "Velocity: *.vtl")
- .end(".vtl"),
- ofFile("ext_vscode-workspace", "extra-icons/vscode.svg", "Visual Studio Code: : *.code-workspace")
- .end(".code-workspace"),
- ofFile("ext_war", "extra-icons/tomcat.svg", "Java WAR: *.war")
- .end(".war"),
- ofFile("ext_wheel", "extra-icons/wheel.svg", "Python Wheel: *.whl")
- .end(".whl"),
- ofFile("ext_wma", "extra-icons/wma.svg", "Windows Media Audio: *.wma")
- .end(".wma")
- .altIcons("extra-icons/video_alt3.svg"),
- ofFile("ext_xiph", "extra-icons/xiph.svg", "Xiph audio: *.flac, *.oga, *.ogg, *.opus, *.spx")
- .end(".flac", ".oga", ".ogg", ".opus", ".spx"),
- ofFile("ext_yang", "extra-icons/yang.svg", "YANG: *.yang")
- .end(".yang"),
- //
-
- //
- ofFile("ext_libreoffice_calc", "extra-icons/officedocs/libo-calc.svg", "LibreOffice Calc: *.ods")
- .end(".ods")
- .altIcons("extra-icons/officedocs/localc.svg", "extra-icons/officedocs/libo-symbol-black.svg", "extra-icons/officedocs/lomain.svg")
- .tags(ModelTag.LIBRE_OFFICE),
- ofFile("ext_libreoffice_draw", "extra-icons/officedocs/libo-draw.svg", "LibreOffice Draw: *.odg")
- .end(".odg")
- .altIcons("extra-icons/officedocs/lodraw.svg", "extra-icons/officedocs/libo-symbol-black.svg", "extra-icons/officedocs/lomain.svg")
- .tags(ModelTag.LIBRE_OFFICE),
- ofFile("ext_libreoffice_impress", "extra-icons/officedocs/libo-impress.svg", "LibreOffice Impress: *.odp")
- .end(".odp")
- .altIcons("extra-icons/officedocs/loimpress.svg", "extra-icons/officedocs/libo-symbol-black.svg", "extra-icons/officedocs/lomain.svg")
- .tags(ModelTag.LIBRE_OFFICE),
- ofFile("ext_libreoffice_math", "extra-icons/officedocs/libo-math.svg", "LibreOffice Math: *.odf")
- .end(".odf")
- .altIcons("extra-icons/officedocs/lomath.svg", "extra-icons/officedocs/libo-symbol-black.svg", "extra-icons/officedocs/lomain.svg")
- .tags(ModelTag.LIBRE_OFFICE),
- ofFile("ext_libreoffice_writer", "extra-icons/officedocs/libo-writer.svg", "LibreOffice Writer: *.odt")
- .end(".odt")
- .altIcons("extra-icons/officedocs/lowriter.svg", "extra-icons/officedocs/libo-symbol-black.svg", "extra-icons/officedocs/lomain.svg")
- .tags(ModelTag.LIBRE_OFFICE),
- //
-
- //
- ofFile("ext_msoffice_excel", "extra-icons/officedocs/msexcel-2019.svg", "MSOffice Excel: *.xls, *.xlsx")
- .end(".xls", ".xlsx")
- .altIcons("extra-icons/officedocs/msexcel.png", "extra-icons/officedocs/msexcel-papirus.svg")
- .tags(ModelTag.MS_OFFICE),
- ofFile("ext_msoffice_onenote", "extra-icons/officedocs/msonenote-2019.svg", "MSOffice OneNote: *.one, *.onetoc2")
- .end(".one", ".onetoc2")
- .altIcons("extra-icons/officedocs/msonenote.png")
- .tags(ModelTag.MS_OFFICE),
- ofFile("ext_msoffice_powerpoint", "extra-icons/officedocs/mspowerpoint-2019.svg", "MSOffice Powerpoint: *.ppt, *.pptx")
- .end(".ppt", ".pptx")
- .altIcons("extra-icons/officedocs/mspowerpoint.png", "extra-icons/officedocs/mspowerpoint-papirus.svg")
- .tags(ModelTag.MS_OFFICE),
- ofFile("ext_msoffice_project", "extra-icons/officedocs/msproject-2019.svg", "MSOffice Project: *.mpd, *.mpp, *.mpt")
- .end(".mpd", ".mpp", ".mpt")
- .altIcons("extra-icons/officedocs/msproject.png")
- .tags(ModelTag.MS_OFFICE),
- ofFile("ext_msoffice_visio", "extra-icons/officedocs/msvisio-2019.svg", "MSOffice Visio: *.vsd, *.vsdx, *.vss, *.vssx, *.vst, *.vstx")
- .end(".vsd", ".vsdx", ".vss", ".vssx", ".vst", ".vstx")
- .altIcons("extra-icons/officedocs/msvisio.png")
- .tags(ModelTag.MS_OFFICE),
- ofFile("ext_msoffice_word", "extra-icons/officedocs/msword-2019.svg", "MSOffice Word: *.doc, *.docx")
- .end(".doc", ".docx")
- .altIcons("extra-icons/officedocs/msword.png", "extra-icons/officedocs/msword-papirus.svg")
- .tags(ModelTag.MS_OFFICE),
- //
-
- //
- ofFile("docker_generic", "extra-icons/docker_.svg", "Docker (generic): start by 'dockerfile'")
- .start("dockerfile")
- .altIcons("extra-icons/docker_alt.svg", "extra-icons/docker_alt2.svg")
- .tags(ModelTag.DOCKER),
- ofFile("docker_generic_2", "extra-icons/docker_.svg", "Docker (generic): end with 'dockerfile'")
- .end("dockerfile")
- .altIcons("extra-icons/docker_alt.svg", "extra-icons/docker_alt2.svg")
- .tags(ModelTag.DOCKER)
- //
- )
- .flatMap(ExtraIconProvider::modelList)
- //.filter(Model::isInFreemium) // TODO prepare a potential freemium mode. Free mode may include a limited set of bundled icons, allow user to define personal icons, and download icon packs
- .collect(Collectors.toList());
- }
-
- public ExtraIconProvider() {
- super();
- }
-
- @Override
- protected List getAllModels() {
- return allModels();
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/Globals.java b/src/main/java/lermitage/intellij/extra/icons/Globals.java
deleted file mode 100644
index 210d418c..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/Globals.java
+++ /dev/null
@@ -1,14 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-public class Globals {
-
- /** Reflects notificationGroup id
in META-INF/settings.xml
. */
- public static final String PLUGIN_GROUP_DISPLAY_ID = "ExtraIcons";
-
- // Icons can be SVG or PNG only. Never allow user to pick GIF, JPEG, etc., otherwise
- // we should convert these files to PNG in IconUtils:toBase64 method.
- public static final String[] ALLOWED_ICON_FILE_EXTENSIONS = new String[]{"svg", "png"}; //NON-NLS
- public static final String ALLOWED_ICON_FILE_EXTENSIONS_FILE_SELECTOR_LABEL = "*.svg, *.png"; //NON-NLS
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/IconType.java b/src/main/java/lermitage/intellij/extra/icons/IconType.java
deleted file mode 100644
index 0a13002d..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/IconType.java
+++ /dev/null
@@ -1,13 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-/** The type of icon: the path of a bundled icon, or a Base64 encoded user icon stored in config. */
-public enum IconType {
- /** The relative path of a bundled icon. */
- PATH,
- /** SVG user icon stored in config as Base64. */
- SVG,
- /** PNG user icon stored in config as Base64. */
- IMG
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/Model.java b/src/main/java/lermitage/intellij/extra/icons/Model.java
deleted file mode 100644
index 03e00a2c..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/Model.java
+++ /dev/null
@@ -1,418 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-import com.intellij.openapi.project.Project;
-import com.intellij.util.xmlb.annotations.OptionTag;
-import com.intellij.util.xmlb.annotations.XCollection;
-import lermitage.intellij.extra.icons.cfg.services.SettingsService;
-import lermitage.intellij.extra.icons.enablers.IconEnablerType;
-import lermitage.intellij.extra.icons.enablers.services.GitSubmoduleFolderEnablerService;
-import org.jetbrains.annotations.Contract;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-public class Model {
-
- @OptionTag
- private String id;
- @OptionTag
- private String ideIcon;
- @OptionTag
- private String icon;
- @OptionTag
- private String description;
- @OptionTag
- private String iconPack;
- @OptionTag
- private ModelType modelType;
- @OptionTag
- private IconType iconType;
- /** Indicates if this model is offered for the old or the new UI. If null, both UIs are supported. */
- @OptionTag
- private UIType uiType;
- /**
- * Indicates if a user model is enabled. To know if a built-in model
- * is enabled, see {@link SettingsService#getDisabledModelIds()}.
- */
- @OptionTag
- private boolean enabled = true;
- @XCollection
- private List conditions = new ArrayList<>(Collections.singletonList(new ModelCondition()));
-
- // transient fields are excluded from IconPack items
-
- /** Alternative icons. Extra Icons will automatically generate alt icons (and ids, names, etc.) based on on this list. */
- private transient String[] altIcons; // transient because computed dynamically
-
- /** Tags associated to this model. Used to easily (de)activate models linked to specific tags. */
- private transient List tags; // transient because not exposed to user models
-
- /** For a model representing an alternative icon, the ID of the base model, otherwise null. */
- private transient Object parentId = null; // transient because computed dynamically
-
- private boolean autoLoadNewUIIconVariant = false;
-
- private boolean inFreemium = false;
-
- // For XML deserializer (IntelliJ internals)
- @SuppressWarnings("unused")
- private Model() {
- }
-
- /**
- * Create a rule (Model) to apply given icon to a file. Once created, you need to
- * apply condition(s) to rule, like {@link #start(String...)}, {@link #eq(String...)}, etc.
- * @param id a unique id.
- * @param icon the path of the icon to apply, located in plugin resources folder.
- * @param description human readable description.
- */
- @NotNull
- @Contract("_, _, _ -> new")
- public static Model ofFile(String id, String icon, String description) {
- return createFileOrFolderModel(id, icon, description, ModelType.FILE, IconType.PATH, null);
- }
-
- /**
- * Create a rule (Model) to apply given icon to a folder. Once created, you need to
- * apply condition(s) to rule, like {@link #start(String...)}, {@link #eq(String...)}, etc.
- * @param id a unique id.
- * @param icon the path of the icon to apply, located in plugin resources folder.
- * @param description human readable description.
- */
- @NotNull
- @Contract("_, _, _ -> new")
- public static Model ofDir(String id, String icon, String description) {
- return createFileOrFolderModel(id, icon, description, ModelType.DIR, IconType.PATH, null);
- }
-
- /**
- * Create a rule (Model) to override given icon (ideIcon) with new icon (icon). Once created,
- * you must NOT apply conditions (like {@link #start(String...)}, {@link #eq(String...)}, etc.) to this rule,
- * they will be ignored.
- * @param id a unique id.
- * @param ideIcon the name of the icon to override. You can find icon
- * names here: pick
- * an icon and open the ZIP file; you can use the non-dark SVG file name.
- * @param icon the path of the icon to apply, located in plugin resources folder.
- * @param description human readable description.
- */
- @NotNull
- @Contract("_, _, _, _ -> new")
- public static Model ofIcon(String id, String ideIcon, String icon, String description) {
- return createIdeIconModel(id, ideIcon, icon, description, ModelType.ICON, IconType.PATH, null);
- }
-
- @NotNull
- @Contract("_, _, _, _, _, _ -> new")
- public static Model createFileOrFolderModel(String id, String icon, String description,
- ModelType modelType, IconType iconType, String iconPack) {
- Model model = new Model();
- model.id = id;
- model.icon = icon;
- model.description = description;
- model.modelType = modelType;
- model.iconType = iconType;
- model.iconPack = iconPack;
- return model;
- }
-
- @NotNull
- @Contract("_, _, _, _, _, _, _ -> new")
- public static Model createFileOrFolderModel(String id, String icon, String description,
- ModelType modelType, IconType iconType, String iconPack,
- List conditions) {
- Model model = createFileOrFolderModel(id, icon, description, modelType, iconType, iconPack);
- model.conditions = conditions;
- return model;
- }
-
- @NotNull
- @Contract("_, _, _, _, _, _, _ -> new")
- public static Model createIdeIconModel(String id, String ideIcon, String icon, String description,
- ModelType modelType, IconType iconType, String iconPack) {
- Model model = new Model();
- model.id = id;
- model.ideIcon = ideIcon;
- model.icon = icon;
- model.description = description;
- model.modelType = modelType;
- model.iconType = iconType;
- model.iconPack = iconPack;
- return model;
- }
-
- @NotNull
- @Contract("_, _, _, _, _ -> new")
- public static Model createAltModel(Model baseModel, String altId, String altIdeIcon,
- String altIcon, String altDescription) {
- Model altModel = new Model();
- altModel.id = altId;
- altModel.ideIcon = altIdeIcon;
- altModel.icon = altIcon;
- altModel.description = altDescription;
- altModel.modelType = baseModel.getModelType();
- altModel.iconType = baseModel.getIconType();
- altModel.enabled = baseModel.isEnabled();
- altModel.conditions = baseModel.getConditions();
- altModel.tags = baseModel.getTags();
- altModel.parentId = baseModel.getId();
- altModel.uiType = baseModel.getUiType();
- altModel.autoLoadNewUIIconVariant = baseModel.isAutoLoadNewUIIconVariant();
- altModel.inFreemium = baseModel.isInFreemium();
- return altModel;
- }
-
- public String getId() {
- return id;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getIdeIcon() {
- return ideIcon;
- }
-
- public String getIcon() {
- return icon;
- }
-
- public ModelType getModelType() {
- return modelType;
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-
- @Nullable
- public Object getParentId() {
- return parentId;
- }
-
- @Nullable
- public String getIconPack() {
- return iconPack;
- }
-
- /**
- * Condition: has given parent directory(s).
- * @param parents one or multiple possible directories, lowercase.
- */
- public Model parents(@NotNull String... parents) {
- getCurrentCondition().setParents(parents);
- return this;
- }
-
- /**
- * Condition: file or folder (does not apply to {@link ModelType#ICON} model types) is located in the project folder, not in any subfolder.
- */
- public Model inProjectRootFolder() {
- getCurrentCondition().setIsInProjectRootFolder();
- return this;
- }
-
- /**
- * Condition: file/folder name starts with given string(s).
- * @param start strings, lowercase.
- */
- public Model start(@NotNull String... start) {
- getCurrentCondition().setStart(start);
- return this;
- }
-
- /**
- * Condition: file/folder name is equal to given string(s).
- * @param name strings, lowercase.
- */
- public Model eq(@NotNull String... name) {
- getCurrentCondition().setEq(name);
- return this;
- }
-
- /**
- * Condition: file/folder name may end with given string(s). This condition is optional.
- * Example: to catch README and README.md files, you will use {@code model.eq("readme").mayEnd(".md")}
- * @param end strings, lowercase.
- */
- public Model mayEnd(@NotNull String... end) {
- getCurrentCondition().setMayEnd(end);
- return this;
- }
-
- /**
- * Condition: file/folder name ends with given string(s).
- * @param end strings, lowercase.
- */
- public Model end(@NotNull String... end) {
- getCurrentCondition().setEnd(end);
- return this;
- }
-
- /**
- * Condition: file/folder name must not contain a dot.
- */
- public Model noDot() {
- getCurrentCondition().setNoDot();
- return this;
- }
-
- /**
- * Condition: file/folder absolute path satisfies given regular expression.
- * @param regex regular expression.
- */
- public Model regex(@NotNull String regex) {
- getCurrentCondition().setRegex(regex);
- return this;
- }
-
- /**
- * Condition: project has given facet, like 'andoid', 'kotlin', 'python', 'spring' etc. You
- * can see and add facets in Project Structure / Project Settings / Facets.
- * @param facets facet(s), lowercase.
- */
- public Model facets(@NotNull String... facets) {
- getCurrentCondition().setFacets(Arrays.stream(facets).map(String::toLowerCase).toArray(String[]::new));
- return this;
- }
-
- /**
- * Condition: use an {@link lermitage.intellij.extra.icons.enablers.IconEnablerType},
- * like {@link GitSubmoduleFolderEnablerService}.
- * @param type IconEnablerType.
- */
- public Model iconEnabler(@NotNull IconEnablerType type) {
- getCurrentCondition().setIconEnablerType(type);
- return this;
- }
-
- /**
- * Register alternate icons.
- * @param altIcons an array of icons.
- */
- public Model altIcons(@NotNull String... altIcons) {
- this.altIcons = altIcons;
- return this;
- }
-
- /** This model is offered for the old UI only. */
- public Model oldUIOnly() {
- this.uiType = UIType.OLD_UI;
- return this;
- }
-
- /** This model is offered for the new UI only. */
- public Model newUIOnly() {
- this.uiType = UIType.NEW_UI;
- return this;
- }
-
- /** Model has a new UI icon in "./newui/": plugin will use it if the new UI is active. */
- public Model autoLoadNewUIIconVariant() {
- this.autoLoadNewUIIconVariant = true;
- return this;
- }
-
- /** Indicates if model has a new UI icon in "./newui/". */
- public boolean isAutoLoadNewUIIconVariant() {
- return autoLoadNewUIIconVariant;
- }
-
- /** This model is available in freemium (free) mode. If not, it requires a paid licence. */
- public Model inFreemium() {
- this.inFreemium = true;
- return this;
- }
-
- public boolean isInFreemium() {
- return inFreemium;
- }
-
- /**
- * Associate this model to one or multiple tags. User will be able to enable and disable multiple models by tag.
- * @param tags an array of tags.
- */
- public Model tags(@NotNull ModelTag... tags) {
- this.tags = Arrays.stream(tags).collect(Collectors.toList());
- return this;
- }
-
- /** Add a possible condition to current model: file/folder will have to satisfy one of configured conditions. */
- public Model or() {
- this.conditions.add(new ModelCondition());
- return this;
- }
-
- private ModelCondition getCurrentCondition() {
- return conditions.get(conditions.size() - 1);
- }
-
- public boolean check(String parentName, String fileName, @Nullable String fullPath, Set facets, Project project) {
- for (ModelCondition condition : conditions) {
- if (condition.check(parentName, fileName, fullPath, facets, project)) {
- return true;
- }
- }
- return false;
- }
-
- public IconType getIconType() {
- return iconType;
- }
-
- public UIType getUiType() {
- return uiType;
- }
-
- public List getConditions() {
- return conditions;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- public String[] getAltIcons() {
- return altIcons;
- }
-
- public List getTags() {
- return tags == null ? Collections.emptyList() : tags;
- }
-
- public void setIconPack(String iconPack) {
- this.iconPack = iconPack;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Model model = (Model) o;
- return enabled == model.enabled &&
- Objects.equals(id, model.id) &&
- Objects.equals(ideIcon, model.ideIcon) &&
- Objects.equals(icon, model.icon) &&
- Objects.equals(iconPack, model.iconPack) &&
- description.equals(model.description) &&
- modelType == model.modelType &&
- uiType == model.uiType &&
- iconType == model.iconType &&
- conditions.equals(model.conditions);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(id, ideIcon, icon, iconPack, description, modelType, uiType, iconType, enabled, conditions);
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/ModelCondition.java b/src/main/java/lermitage/intellij/extra/icons/ModelCondition.java
deleted file mode 100644
index 9293bddb..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/ModelCondition.java
+++ /dev/null
@@ -1,400 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.util.xmlb.annotations.OptionTag;
-import com.intellij.util.xmlb.annotations.Tag;
-import lermitage.intellij.extra.icons.enablers.IconEnabler;
-import lermitage.intellij.extra.icons.enablers.IconEnablerProvider;
-import lermitage.intellij.extra.icons.enablers.IconEnablerType;
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import org.jetbrains.annotations.Nullable;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-@Tag
-public class ModelCondition {
-
- @OptionTag
- private boolean start = false;
- @OptionTag
- private boolean eq = false;
- @OptionTag
- private boolean mayEnd = false;
- @OptionTag
- private boolean end = false;
- @OptionTag
- private boolean noDot = false;
- @OptionTag
- private boolean checkParent = false;
- @OptionTag
- private boolean hasRegex = false;
- @OptionTag
- private boolean enabled = true;
- @OptionTag
- private boolean checkFacets = false;
- @OptionTag
- private boolean hasIconEnabler = false;
- @OptionTag
- private boolean isInProjectRootFolder = false;
-
- @OptionTag
- private String[] names = new String[0];
- @OptionTag
- private Set parentNames = Collections.emptySet();
- @OptionTag
- private String[] extensions = new String[0];
- @OptionTag
- private String regex;
- @OptionTag
- private String[] facets = new String[0];
-
- // transient fields are excluded from IconPack items
-
- private transient Pattern pattern; // transient because computed dynamically
- private transient IconEnablerType iconEnablerType; // transient because not exposed to user models
-
- private static final ResourceBundle i18n = I18nUtils.getResourceBundle();
-
- public void setParents(String... parents) {
- this.checkParent = true;
- this.parentNames = toLowerCaseSet(parents);
- }
-
- public void setStart(String... base) {
- this.start = true;
- this.names = toLowerCaseArray(base);
- }
-
- public void setEq(String... base) {
- this.eq = true;
- this.names = toLowerCaseArray(base);
- }
-
- public void setMayEnd(String... extensions) {
- this.mayEnd = true;
- this.extensions = toLowerCaseArray(extensions);
- }
-
- public void setEnd(String... extensions) {
- this.end = true;
- this.extensions = toLowerCaseArray(extensions);
- }
-
- public void setNoDot() {
- this.noDot = true;
- }
-
- public void setRegex(String regex) {
- this.hasRegex = true;
- this.regex = regex;
- this.pattern = Pattern.compile(regex);
- }
-
- public void setFacets(String[] facets) {
- this.checkFacets = true;
- this.facets = facets;
- }
-
- public void setIconEnablerType(IconEnablerType iconEnablerType) {
- this.hasIconEnabler = true;
- this.iconEnablerType = iconEnablerType;
- }
-
- public void setIsInProjectRootFolder() {
- this.isInProjectRootFolder = true;
- }
-
- public boolean check(String parentName, String fileName, @Nullable String fullPath, Set prjFacets, Project project) {
- if (!enabled) {
- return false;
- }
-
- if (isInProjectRootFolder) {
- if (fullPath == null || !fullPath.equalsIgnoreCase(project.getBasePath() + "/" + fileName)) {
- return false;
- }
- }
-
- if (hasIconEnabler && fullPath != null) {
- Optional iconEnabler = IconEnablerProvider.getIconEnabler(project, iconEnablerType);
- if (iconEnabler.isPresent()) {
- boolean iconEnabledVerified = iconEnabler.get().verify(project, fullPath);
- if (!iconEnabledVerified) {
- return false;
- } else if (iconEnabler.get().terminatesConditionEvaluation()) {
- return true;
- }
- }
- }
-
- // facet is a pre-condition, should always be associated with other conditions
- if (checkFacets && facets != null) {
- boolean facetChecked = false;
- for (String modelFacet : facets) {
- if (prjFacets.contains(modelFacet)) {
- facetChecked = true;
- break;
- }
- }
- if (!facetChecked) {
- return false;
- }
- }
-
- if (checkParent) {
- if (!(start || eq || end || mayEnd)) {
- if (parentNames.contains(parentName)) {
- return true; // To style all files in a subdirectory
- }
- } else {
- if (!parentNames.contains(parentName)) {
- return false;
- }
- }
- }
-
- if (hasRegex && fullPath != null) {
- if (pattern == null) {
- pattern = Pattern.compile(regex);
- }
- if (pattern.matcher(fullPath).matches()) {
- return true;
- }
- }
-
- if (eq) {
- if (end) {
- for (String n : names) {
- for (String e : extensions) {
- if (fileName.equals(n + e)) {
- return true;
- }
- }
- }
- } else if (mayEnd) {
- for (String n : names) {
- if (fileName.equals(n)) {
- return true;
- }
- for (String e : extensions) {
- if (fileName.equals(n + e)) {
- return true;
- }
- }
- }
- } else {
- for (String n : names) {
- if (fileName.equals(n)) {
- return true;
- }
- }
- }
- }
-
- if (start) {
- if (end) {
- for (String n : names) {
- for (String e : extensions) {
- if (fileName.startsWith(n) && fileName.endsWith(e)) {
- return true;
- }
- }
- }
- } else if (mayEnd) {
- for (String n : names) {
- if (fileName.startsWith(n)) {
- return true;
- }
- for (String e : extensions) {
- if (fileName.startsWith(n) && fileName.endsWith(e)) {
- return true;
- }
- }
- }
- } else if (noDot) {
- for (String n : names) {
- if (fileName.startsWith(n) && !fileName.contains(".")) {
- return true;
- }
- }
- } else {
- for (String n : names) {
- if (fileName.startsWith(n)) {
- return true;
- }
- }
- }
- }
-
- if (end & !eq & !start) {
- for (String e : extensions) {
- if (fileName.endsWith(e)) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- public boolean hasStart() {
- return start;
- }
-
- public boolean hasEq() {
- return eq;
- }
-
- public boolean hasMayEnd() {
- return mayEnd;
- }
-
- public boolean hasEnd() {
- return end;
- }
-
- public boolean hasNoDot() {
- return noDot;
- }
-
- public boolean hasCheckParent() {
- return checkParent;
- }
-
- public boolean hasRegex() {
- return hasRegex;
- }
-
- public boolean hasFacets() {
- return checkFacets;
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public boolean isValid() {
- return hasRegex || checkParent || start || eq || end || mayEnd;
- }
-
- public String[] getNames() {
- return names;
- }
-
- public String[] getExtensions() {
- return extensions;
- }
-
- public Set getParents() {
- return parentNames;
- }
-
- public String getRegex() {
- return regex;
- }
-
- public String[] getFacets() {
- return facets;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- public String asReadableString(String delimiter) {
- ArrayList parameters = new ArrayList<>();
- if (hasRegex) {
- parameters.add(MessageFormat.format(i18n.getString("model.condition.regex"), this.regex));
- }
-
- if (checkParent) {
- parameters.add(MessageFormat.format(i18n.getString("model.condition.check.parents"), String.join(delimiter, this.parentNames)));
- }
-
- if (start || eq) {
- String names = String.join(delimiter, this.names);
- if (start) {
- names = MessageFormat.format(i18n.getString("model.condition.name.starts.with"), names);
- if (noDot) {
- names += i18n.getString("model.condition.name.starts.with.and.no.dot");
- }
- } else {
- names = MessageFormat.format(i18n.getString("model.condition.name.equals"), names);
- }
- parameters.add(names);
- }
-
- if (mayEnd || end) {
- String extensions = String.join(delimiter, this.extensions);
- if (mayEnd) {
- extensions = MessageFormat.format(i18n.getString("model.condition.name.may.end.with"), extensions);
- } else {
- extensions = MessageFormat.format(i18n.getString("model.condition.name.ends.with"), extensions);
- }
- parameters.add(extensions);
- }
-
- if (checkFacets) {
- parameters.add(MessageFormat.format(i18n.getString("model.condition.facets"), Arrays.toString(this.facets)));
- }
-
- return StringUtil.capitalize(String.join(", ", parameters));
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- ModelCondition that = (ModelCondition) o;
- return start == that.start &&
- eq == that.eq &&
- mayEnd == that.mayEnd &&
- end == that.end &&
- noDot == that.noDot &&
- checkParent == that.checkParent &&
- hasRegex == that.hasRegex &&
- enabled == that.enabled &&
- Arrays.equals(names, that.names) &&
- parentNames.equals(that.parentNames) &&
- Arrays.equals(extensions, that.extensions) &&
- Objects.equals(regex, that.regex) &&
- Arrays.equals(facets, that.facets);
- }
-
- @Override
- public int hashCode() {
- int result = Objects.hash(start, eq, mayEnd, end, noDot, checkParent, hasRegex, enabled, parentNames, regex);
- result = 31 * result + Arrays.hashCode(names);
- result = 31 * result + Arrays.hashCode(extensions);
- result = 31 * result + Arrays.hashCode(facets);
- return result;
- }
-
- private String[] toLowerCaseArray(String... s) {
- String[] res = new String[s.length];
- for (int i = 0; i < s.length; i++) {
- res[i] = s[i].toLowerCase();
- }
- return res;
- }
-
- private Set toLowerCaseSet(String... s) {
- Set res = new HashSet<>(s.length);
- for (String str : s) {
- res.add(str.toLowerCase());
- }
- return res;
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/ModelTag.java b/src/main/java/lermitage/intellij/extra/icons/ModelTag.java
deleted file mode 100644
index 0cf01255..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/ModelTag.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-@SuppressWarnings("HardCodedStringLiteral")
-public enum ModelTag {
-
- ANGULAR2("Angular", "extra-icons/angular2.svg"),
- DOCKER("Docker", "extra-icons/docker_.svg"),
- FLUTTER("Flutter", "extra-icons/flutter.svg"),
- FLYWAY("Flyway", "extra-icons/flyway.svg"),
- HELM("Helm", "extra-icons/helm.svg"),
- HTML("HTML", "extra-icons/html5.svg"),
- KUBERNETES("Kubernetes", "extra-icons/kubernetes.svg"),
- LIBRE_OFFICE("LibreOffice", "extra-icons/officedocs/lowriter.svg"),
- LIQUIBASE("Liquibase", "extra-icons/liquibase.svg"),
- MS_OFFICE("MS Office", "extra-icons/officedocs/msword-2019.svg"),
- NESTJS("NestJS", "extra-icons/nestjs.svg"),
- PRETTIER("Prettier", "extra-icons/prettier.svg"),
- STORYBOOK("Storybook", "extra-icons/storybook.svg"),
- TRAVIS("Travis CI", "extra-icons/travis.svg"),
- WRITERSIDE("Writerside", "extra-icons/writerside.svg");
-
- ModelTag(String name, String icon) {
- this.name = name;
- this.icon = icon;
- }
-
- private final String name;
- private final String icon;
-
- public String getName() {
- return name;
- }
-
- public String getIcon() {
- return icon;
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/ModelType.java b/src/main/java/lermitage/intellij/extra/icons/ModelType.java
deleted file mode 100644
index ea2ed8c5..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/ModelType.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import org.jetbrains.annotations.Contract;
-
-import java.util.ResourceBundle;
-
-public enum ModelType {
- FILE,
- DIR,
- ICON;
-
- private static final ResourceBundle i18n = I18nUtils.getResourceBundle();
-
- /**
- * {@link ModelType} comparator: {@link ModelType#DIR} > {@link ModelType#FILE} > {@link ModelType#ICON}.
- */
- @Contract(pure = true)
- public static int compare(ModelType o1, ModelType o2) {
- if (o1 == o2) {
- return 0;
- }
- if (o1 == null) {
- return 1;
- }
- if (o2 == null) {
- return -1;
- }
- if (o1 == DIR && (o2 == FILE || o2 == ICON)) {
- return -1;
- }
- if (o1 == FILE && o2 == ICON) {
- return -1;
- }
- return 1;
- }
-
- public String getI18nFriendlyName() {
- return switch (this) {
- case FILE -> i18n.getString("model.type.file");
- case DIR -> i18n.getString("model.type.directory");
- case ICON -> i18n.getString("model.type.icon");
- };
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/UIType.java b/src/main/java/lermitage/intellij/extra/icons/UIType.java
deleted file mode 100644
index 9990eb9e..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/UIType.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-public enum UIType {
- NEW_UI,
- OLD_UI
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/UITypeIconsPreference.java b/src/main/java/lermitage/intellij/extra/icons/UITypeIconsPreference.java
deleted file mode 100644
index c9726728..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/UITypeIconsPreference.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons;
-
-public enum UITypeIconsPreference {
- BASED_ON_ACTIVE_UI_TYPE,
- PREFER_NEW_UI_ICONS,
- PREFER_OLD_UI_ICONS
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/activity/EnablerServicesProjectActivity.java b/src/main/java/lermitage/intellij/extra/icons/activity/EnablerServicesProjectActivity.java
deleted file mode 100644
index 7952506f..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/activity/EnablerServicesProjectActivity.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.activity;
-
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.startup.ProjectActivity;
-import kotlin.Unit;
-import kotlin.coroutines.Continuation;
-import lermitage.intellij.extra.icons.messaging.RefreshIconsNotifierService;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Re-init icon enablers on project init, once indexing tasks are done. May fix init issues when querying IDE filename index while indexing.
- * At least, it fixes icons reloading (Enablers) after long indexing tasks (example: after you asked to invalidate caches).
- */
-public class EnablerServicesProjectActivity implements ProjectActivity {
-
- @Nullable
- @Override
- public Object execute(@NotNull Project project, @NotNull Continuation super Unit> continuation) {
- RefreshIconsNotifierService.getInstance().triggerProjectIconEnablersReinit(project);
- return null;
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/activity/ExtraIconsLicenseCheckIDEActivity.java b/src/main/java/lermitage/intellij/extra/icons/activity/ExtraIconsLicenseCheckIDEActivity.java
deleted file mode 100644
index 4850f108..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/activity/ExtraIconsLicenseCheckIDEActivity.java
+++ /dev/null
@@ -1,130 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.activity;
-
-import com.intellij.ide.plugins.PluginManager;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.extensions.PluginDescriptor;
-import com.intellij.openapi.extensions.PluginId;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.startup.ProjectActivity;
-import kotlin.Unit;
-import kotlin.coroutines.Continuation;
-import lermitage.intellij.extra.icons.lic.ExtraIconsLicenseCheck;
-import lermitage.intellij.extra.icons.lic.ExtraIconsLicenseStatus;
-import lermitage.intellij.extra.icons.lic.ExtraIconsPluginType;
-import lermitage.intellij.extra.icons.messaging.RefreshIconsNotifierService;
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Optional;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.stream.Collectors;
-
-/**
- * Check Extra Icons licence periodically.
- */
-public class ExtraIconsLicenseCheckIDEActivity implements ProjectActivity {
-
- private static final @NonNls Logger LOGGER = Logger.getInstance(ExtraIconsLicenseCheckIDEActivity.class);
-
- private static final ResourceBundle i18n = I18nUtils.getResourceBundle();
-
- private static boolean started = false; // TODO improve workaround and start once per IDE, not per project opening
-
- private static boolean requestLicenseShown = false;
-
- @Nullable
- @Override
- public Object execute(@NotNull Project project, @NotNull Continuation super Unit> continuation) {
- if (started) {
- return null; // workaround in order to keep only once timer per IDE instead of one timer per project opening
- }
- started = true;
- LOGGER.info("Started Extra Icons license checker");
-
- int fiest_check_delay = 60_000; // 1 min
- int second_check_delay = 3_600_000; // 1 hr
- int other_checks_period = 3 * 3_600_000; // 3 hrs
- if ("true".equals(System.getProperty("extra.icons.license.check.fast", "false"))) {
- LOGGER.warn("Detected property extra.icons.license.check.fast = true, which will dramatically " +
- "increase Extra Icons license check frequency. " +
- "Reminder: you should enable this property for testing purpose only");
- fiest_check_delay = 3_000; // 3 sec
- second_check_delay = 30_000; // 30 sec
- other_checks_period = 180_000; // 3 min
- }
-
- long t1 = System.currentTimeMillis();
- ExtraIconsPluginType installedPluginType = findInstalledPluginType();
- long t2 = System.currentTimeMillis();
- LOGGER.info("Found Extra Icons configured for license type in " + (t2 - t1) + " ms: " + installedPluginType);
-
- if (installedPluginType.isRequiresLicense()) {
- try {
- ExtraIconsLicenseStatus.setLicenseActivated(true);
- LOGGER.info("Will check Extra Icons license in " + fiest_check_delay / 1000 + " sec, " +
- "in " + second_check_delay / 1000 + " sec, " +
- "then every " + other_checks_period / 1000 + " sec");
- new Timer().schedule(createLicenseCheckerTimerTask(installedPluginType), fiest_check_delay);
- new Timer().scheduleAtFixedRate(createLicenseCheckerTimerTask(installedPluginType), second_check_delay, other_checks_period);
- } catch (Exception e) {
- LOGGER.warn(e);
- }
- } else {
- ExtraIconsLicenseStatus.setLicenseActivated(true);
- }
- return null;
- }
-
- private TimerTask createLicenseCheckerTimerTask(ExtraIconsPluginType installedPluginType) {
- return new TimerTask() {
- @Override
- public void run() {
- long t1 = System.currentTimeMillis();
- Boolean isLicensed = ExtraIconsLicenseCheck.isLicensed(installedPluginType.getProductCode());
- long t2 = System.currentTimeMillis();
- LOGGER.info("Checked Extra Icons license in " + (t2 - t1) + " ms. User has a valid license: " + isLicensed);
- if (isLicensed == null) {
- LOGGER.warn("Extra Icons license check returned null. Let's consider user has a valid license, " +
- "and retry license check later");
- }
- if (isLicensed != null && !isLicensed) {
- ExtraIconsLicenseStatus.setLicenseActivated(false);
- LOGGER.warn("Failed to validate Extra Icons license. Disable all Extra Icons until license activation");
- RefreshIconsNotifierService.getInstance().triggerAllIconsRefreshAndIconEnablersReinit();
- if (!requestLicenseShown) {
- requestLicenseShown = true;
- ExtraIconsLicenseCheck.requestLicense(installedPluginType.getProductCode(), i18n.getString("license.required.msg"));
- }
- }
- }
- };
- }
-
- private ExtraIconsPluginType findInstalledPluginType() {
- PluginDescriptor pluginDesc = PluginManager.getPluginByClass(ExtraIconsLicenseCheckIDEActivity.class);
- if (pluginDesc == null) { // should never happen, as two plugins with same service class names will crash the IDE
- LOGGER.warn("Failed to find installed Extra Icons plugin by class, will list all installed plugins and try to find it");
- Set registeredIds = PluginId.getRegisteredIds().stream()
- .map(PluginId::getIdString)
- .collect(Collectors.toSet());
- Optional extraIconsPluginTypeFound = ExtraIconsPluginType.getFindableTypes().stream()
- .filter(extraIconsPluginType -> registeredIds.contains(extraIconsPluginType.getPluginId()))
- .findFirst();
- return extraIconsPluginTypeFound.orElse(ExtraIconsPluginType.NOT_FOUND);
- } else {
- LOGGER.info("Found installed Extra Icons plugin by class: " + pluginDesc);
- String installedPluginId = pluginDesc.getPluginId().getIdString();
- Optional extraIconsPluginTypeFound = ExtraIconsPluginType.getFindableTypes().stream()
- .filter(extraIconsPluginType -> installedPluginId.equals(extraIconsPluginType.getPluginId()))
- .findFirst();
- return extraIconsPluginTypeFound.orElse(ExtraIconsPluginType.NOT_FOUND);
- }
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/activity/HintNotificationsProjectActivity.java b/src/main/java/lermitage/intellij/extra/icons/activity/HintNotificationsProjectActivity.java
deleted file mode 100644
index 3bfc4e05..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/activity/HintNotificationsProjectActivity.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.activity;
-
-import com.intellij.notification.Notification;
-import com.intellij.notification.NotificationAction;
-import com.intellij.notification.NotificationType;
-import com.intellij.notification.Notifications;
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.options.ShowSettingsUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.startup.ProjectActivity;
-import com.intellij.openapi.ui.Messages;
-import kotlin.Unit;
-import kotlin.coroutines.Continuation;
-import lermitage.intellij.extra.icons.Globals;
-import lermitage.intellij.extra.icons.cfg.SettingsForm;
-import lermitage.intellij.extra.icons.cfg.services.SettingsIDEService;
-import lermitage.intellij.extra.icons.messaging.RefreshIconsNotifierService;
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import lermitage.intellij.extra.icons.utils.IJUtils;
-import lermitage.intellij.extra.icons.utils.ProjectUtils;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-import java.util.ResourceBundle;
-
-/**
- * Display some useful hints in notifications on startup, a single time only.
- */
-public class HintNotificationsProjectActivity implements ProjectActivity {
-
- private static final @NonNls Logger LOGGER = Logger.getInstance(HintNotificationsProjectActivity.class);
-
- private static final ResourceBundle i18n = I18nUtils.getResourceBundle();
-
- @Nullable
- @Override
- public Object execute(@NotNull Project project, @NotNull Continuation super Unit> continuation) {
- if (!ProjectUtils.isProjectAlive(project)) {
- LOGGER.info(this.getClass().getName() + " started before project is ready. Will not show startup notifications this time");
- return null;
- }
- SettingsIDEService settingsIDEService = SettingsIDEService.getInstance();
-
- boolean alwaysShowNotifications = System.getProperty("extra-icons.always.show.notifications", "false").equals("true"); //NON-NLS
-
- try {
- if (!settingsIDEService.getPluginIsConfigurableHintNotifDisplayed() || alwaysShowNotifications) {
- Notification notif = new Notification(Globals.PLUGIN_GROUP_DISPLAY_ID,
- i18n.getString("notif.tips.plugin.config.title"),
- i18n.getString("notif.tips.plugin.config.content"),
- NotificationType.INFORMATION);
- notif.addAction(new NotificationAction(i18n.getString("notif.tips.plugin.config.btn")) {
- @Override
- public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) {
- ShowSettingsUtil.getInstance().showSettingsDialog(project, SettingsForm.class);
- }
- });
- Notifications.Bus.notify(notif);
- }
- } finally {
- settingsIDEService.setPluginIsConfigurableHintNotifDisplayed(true);
- }
-
- // TODO uncomment once Lifetime licences are available
- /*if (!IJUtils.isExtraIconsLifetimeLoaded()) {
- try {
- if (!settingsIDEService.getLifetimeLicIntroHintNotifDisplayed() || alwaysShowNotifications) {
- Notification notif = new Notification(Globals.PLUGIN_GROUP_DISPLAY_ID,
- i18n.getString("notif.tips.lifetime.lic.intro.title"),
- i18n.getString("notif.tips.lifetime.lic.intro.content"),
- NotificationType.INFORMATION);
- notif.addAction(new NotificationAction(i18n.getString("notif.tips.lifetime.lic.intro.btn")) {
- @Override
- public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) {
- BrowserUtil.browse("https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/docs/LICENSE_FAQ.md#how-to-get-a-lifetime-license");
- }
- });
- Notifications.Bus.notify(notif);
- }
- } finally {
- settingsIDEService.setLifetimeLicIntroHintNotifDisplayed(true);
- }
- }*/
-
- if (IJUtils.isIconViewer2Loaded()) {
- try {
- if (!settingsIDEService.getIconviewerShouldRenderSVGHintNotifDisplayed() || alwaysShowNotifications) {
- List disabledModelIds = settingsIDEService.getDisabledModelIds();
- if (!disabledModelIds.contains("ext_svg") || !disabledModelIds.contains("ext_svg_alt")) { //NON-NLS
- Notification notif = new Notification(Globals.PLUGIN_GROUP_DISPLAY_ID,
- i18n.getString("notif.tips.plugin.config.title"),
- i18n.getString("notif.tips.iconviewer.should.render.svg"),
- NotificationType.INFORMATION);
- notif.addAction(new NotificationAction(i18n.getString("notif.tips.iconviewer.should.render.svg.accept.btn")) {
- @Override
- public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) {
- disabledModelIds.add("ext_svg"); //NON-NLS
- disabledModelIds.add("ext_svg_alt"); //NON-NLS
- settingsIDEService.setDisabledModelIds(disabledModelIds);
- RefreshIconsNotifierService.getInstance().triggerAllIconsRefreshAndIconEnablersReinit();
- Messages.showInfoMessage(
- i18n.getString("configured.iconviewer.for.svg.rendering"),
- i18n.getString("configured.iconviewer.for.svg.rendering.title")
- );
- notif.hideBalloon();
- notif.expire();
- }
- });
- Notifications.Bus.notify(notif);
- }
- }
- } finally {
- settingsIDEService.setIconviewerShouldRenderSVGHintNotifDisplayed(true);
- }
- }
-
- return null;
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/activity/RefreshIconsListenerProjectActivity.java b/src/main/java/lermitage/intellij/extra/icons/activity/RefreshIconsListenerProjectActivity.java
deleted file mode 100644
index 2ebd08ef..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/activity/RefreshIconsListenerProjectActivity.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.activity;
-
-import com.intellij.ide.projectView.ProjectView;
-import com.intellij.ide.projectView.impl.AbstractProjectViewPane;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
-import com.intellij.openapi.fileEditor.impl.EditorWindow;
-import com.intellij.openapi.project.DumbService;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.startup.ProjectActivity;
-import com.intellij.ui.IconDeferrer;
-import kotlin.Unit;
-import kotlin.coroutines.Continuation;
-import lermitage.intellij.extra.icons.enablers.IconEnabler;
-import lermitage.intellij.extra.icons.enablers.IconEnablerProvider;
-import lermitage.intellij.extra.icons.enablers.IconEnablerType;
-import lermitage.intellij.extra.icons.messaging.RefreshIconsNotifier;
-import lermitage.intellij.extra.icons.utils.IJUtils;
-import lermitage.intellij.extra.icons.utils.ProjectUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Optional;
-
-// TODO migrate to Listener https://plugins.jetbrains.com/docs/intellij/plugin-listeners.html#defining-project-level-listeners
-public class RefreshIconsListenerProjectActivity implements ProjectActivity {
-
- private static final Logger LOGGER = Logger.getInstance(RefreshIconsListenerProjectActivity.class);
-
- @Nullable
- @Override
- public Object execute(@NotNull Project project, @NotNull Continuation super Unit> continuation) {
- String projectName = project.getName();
- project.getMessageBus().connect().subscribe(RefreshIconsNotifier.EXTRA_ICONS_REFRESH_ICONS_NOTIFIER_TOPIC,
- new RefreshIconsNotifier() {
-
- @Override
- public void refreshProjectIcons(@Nullable Project project) {
- if (LOGGER.isDebugEnabled()) {
- // activate with Help > Diagnostic Tools > Debug Log Settings > #lermitage.intellij.extra.icons.RefreshIconsListenerProjectActivity
- LOGGER.debug("refreshProjectIcons on project: " + projectName); //NON-NLS
- }
- refreshIcons(project);
- }
-
- @Override
- public void reinitProjectIconEnablers(@Nullable Project project) {
- if (LOGGER.isDebugEnabled()) {
- // activate with Help > Diagnostic Tools > Debug Log Settings > #lermitage.intellij.extra.icons.RefreshIconsListenerProjectActivity
- LOGGER.debug("reinitProjectIconEnablers on project: " + projectName); //NON-NLS
- }
- reinitIconEnablers(project);
- }
- });
- return null;
- }
-
- private void reinitIconEnablers(@Nullable Project project) {
- IJUtils.runInBGT("reinit icon enablers", () -> { //NON-NLS
- if (ProjectUtils.isProjectAlive(project)) {
- assert project != null;
- DumbService.getInstance(project).runReadActionInSmartMode(() -> {
- for (IconEnablerType iconEnablerType : IconEnablerType.values()) {
- if (ProjectUtils.isProjectAlive(project)) {
- Optional iconEnabler = IconEnablerProvider.getIconEnabler(project, iconEnablerType);
- iconEnabler.ifPresent(enabler -> enabler.init(project));
- }
- }
- });
- }
- }, true);
- }
-
- private void refreshIcons(@Nullable Project project) {
- if (IJUtils.IS_IDE_2023_OR_OLDER) {
- IconDeferrer.getInstance().clearCache();
- }
- IJUtils.runInEDT("refresh icons", () -> { //NON-NLS
- ApplicationManager.getApplication().runReadAction(() -> {
-
- if (ProjectUtils.isProjectAlive(project)) {
- assert project != null;
-
- ProjectView view = ProjectView.getInstance(project);
- if (view != null) {
-
- view.refresh();
- //IJUtils.runInBGT("refresh ProjectView", view::refresh, true); //NON-NLS
-
- AbstractProjectViewPane currentProjectViewPane = view.getCurrentProjectViewPane();
- if (currentProjectViewPane != null) {
-
- currentProjectViewPane.updateFromRoot(true);
- //IJUtils.runInBGT("update AbstractProjectViewPane", () -> currentProjectViewPane.updateFromRoot(true), true); //NON-NLS
-
- } else {
- if (LOGGER.isDebugEnabled()) {
- LOGGER.warn("Project view pane is null"); //NON-NLS
- }
- }
- try {
- EditorWindow[] editorWindows = FileEditorManagerEx.getInstanceEx(project).getWindows();
- for (EditorWindow editorWindow : editorWindows) {
- try {
-
- editorWindow.getManager().refreshIcons();
- //IJUtils.runInBGT("refresh EditorWindow icons", () -> editorWindow.getManager().refreshIcons(), true); //NON-NLS
-
- } catch (Exception e) {
- LOGGER.warn("Failed to refresh editor tabs icon (EditorWindow manager failed to refresh icons)", e); //NON-NLS
- }
- }
- } catch (Exception e) {
- LOGGER.warn("Failed to refresh editor tabs icon (can't get FileEditorManagerEx instance or project's windows)", e); //NON-NLS
- }
- } else {
- if (LOGGER.isDebugEnabled()) {
- LOGGER.warn("Project view is null"); //NON-NLS
- }
- }
- }
- });
- });
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/activity/VFSChangesListenersProjectActivity.java b/src/main/java/lermitage/intellij/extra/icons/activity/VFSChangesListenersProjectActivity.java
deleted file mode 100644
index 4b124f34..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/activity/VFSChangesListenersProjectActivity.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.activity;
-
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.project.DumbService;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.ProjectFileIndex;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.startup.ProjectActivity;
-import com.intellij.openapi.vfs.VirtualFileManager;
-import com.intellij.openapi.vfs.newvfs.BulkFileListener;
-import com.intellij.openapi.vfs.newvfs.events.VFileEvent;
-import kotlin.Unit;
-import kotlin.coroutines.Continuation;
-import lermitage.intellij.extra.icons.enablers.IconEnablerProvider;
-import lermitage.intellij.extra.icons.enablers.IconEnablerType;
-import lermitage.intellij.extra.icons.enablers.services.GitSubmoduleFolderEnablerService;
-import lermitage.intellij.extra.icons.messaging.RefreshIconsNotifierService;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-// TODO migrate to Listener https://plugins.jetbrains.com/docs/intellij/plugin-listeners.html#defining-project-level-listeners
-public class VFSChangesListenersProjectActivity implements ProjectActivity {
-
- private static final Logger LOGGER = Logger.getInstance(VFSChangesListenersProjectActivity.class);
-
- @Nullable
- @Override
- public Object execute(@NotNull Project project, @NotNull Continuation super Unit> continuation) {
- project.getMessageBus().connect().subscribe(VirtualFileManager.VFS_CHANGES, new BulkFileListener() {
- @Override
- public void after(@NotNull List extends @NotNull VFileEvent> events) {
- refreshGitSubmodules(events, project);
- }
- });
- return null;
- }
-
- // TODO big refactoring: update all enablers with modified files, this way there is no need to re-init manually from the UI, which would eliminate the problem of enablers (IDE filename index queries) from EDT
- private void refreshGitSubmodules(@NotNull List extends VFileEvent> events, @NotNull Project project) {
- try {
- DumbService.getInstance(project).runReadActionInSmartMode(() -> {
- final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
- boolean gitmodulesUpdated = events.stream()
- .anyMatch(vFileEvent -> vFileEvent.getFile() != null
- && vFileEvent.isFromSave()
- && fileIndex.isInProject(vFileEvent.getFile())
- && vFileEvent.getPath().endsWith(GitSubmoduleFolderEnablerService.GIT_MODULES_FILENAME)
- );
- if (gitmodulesUpdated) {
- IconEnablerProvider.getIconEnabler(project, IconEnablerType.IS_GIT_SUBMODULE_FOLDER).ifPresent(iconEnabler ->
- iconEnabler.init(project)
- );
- RefreshIconsNotifierService.getInstance().triggerProjectIconsRefresh(project);
- }
- });
- } catch (Exception e) {
- LOGGER.warn(e);
- }
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/IconPack.java b/src/main/java/lermitage/intellij/extra/icons/cfg/IconPack.java
deleted file mode 100644
index 462d2449..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/IconPack.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.cfg;
-
-import lermitage.intellij.extra.icons.Model;
-
-import java.util.List;
-
-/**
- * A downloadable and exportable list of {@link Model} objects (icons and conditions).
- */
-public class IconPack {
-
- /**
- * Icon Pack's name, used to identify the icon pack in user icons table.
- */
- private String name;
-
- /**
- * List of models.
- */
- private List models;
-
- public IconPack(String name, List models) {
- this.name = name;
- this.models = models;
- }
-
- @SuppressWarnings("unused")
- public IconPack() {
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public List getModels() {
- return models;
- }
-
- public void setModels(List models) {
- this.models = models;
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/SettingsForm.form b/src/main/java/lermitage/intellij/extra/icons/cfg/SettingsForm.form
deleted file mode 100644
index 4a702a0f..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/SettingsForm.form
+++ /dev/null
@@ -1,639 +0,0 @@
-
-
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/SettingsForm.java b/src/main/java/lermitage/intellij/extra/icons/cfg/SettingsForm.java
deleted file mode 100644
index 73a52523..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/SettingsForm.java
+++ /dev/null
@@ -1,871 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.cfg;
-
-import com.google.common.base.Strings;
-import com.intellij.ide.BrowserUtil;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.options.Configurable;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.ui.ComboboxSpeedSearch;
-import com.intellij.ui.IdeBorderFactory;
-import com.intellij.ui.ToolbarDecorator;
-import com.intellij.ui.components.JBLabel;
-import com.intellij.ui.table.JBTable;
-import lermitage.intellij.extra.icons.Model;
-import lermitage.intellij.extra.icons.ModelTag;
-import lermitage.intellij.extra.icons.ModelType;
-import lermitage.intellij.extra.icons.UITypeIconsPreference;
-import lermitage.intellij.extra.icons.cfg.dialogs.AskSingleTextDialog;
-import lermitage.intellij.extra.icons.cfg.dialogs.IconPackUninstallerDialog;
-import lermitage.intellij.extra.icons.cfg.dialogs.ModelDialog;
-import lermitage.intellij.extra.icons.cfg.models.PluginIconsSettingsTableModel;
-import lermitage.intellij.extra.icons.cfg.models.UserIconsSettingsTableModel;
-import lermitage.intellij.extra.icons.cfg.services.SettingsIDEService;
-import lermitage.intellij.extra.icons.cfg.services.SettingsProjectService;
-import lermitage.intellij.extra.icons.cfg.services.SettingsService;
-import lermitage.intellij.extra.icons.lic.ExtraIconsLicenseStatus;
-import lermitage.intellij.extra.icons.messaging.RefreshIconsNotifierService;
-import lermitage.intellij.extra.icons.utils.ComboBoxWithImageItem;
-import lermitage.intellij.extra.icons.utils.ComboBoxWithImageRenderer;
-import lermitage.intellij.extra.icons.utils.FileChooserUtils;
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import lermitage.intellij.extra.icons.utils.IconPackUtils;
-import lermitage.intellij.extra.icons.utils.IconUtils;
-import lermitage.intellij.extra.icons.utils.OS;
-import org.apache.commons.collections4.CollectionUtils;
-import org.jetbrains.annotations.Nls;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.Icon;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTabbedPane;
-import javax.swing.JTextField;
-import javax.swing.ListSelectionModel;
-import javax.swing.RowFilter;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableColumnModel;
-import javax.swing.table.TableModel;
-import javax.swing.table.TableRowSorter;
-import javax.swing.table.TableStringConverter;
-import java.awt.event.ItemEvent;
-import java.io.File;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-import java.util.Optional;
-import java.util.ResourceBundle;
-import java.util.regex.PatternSyntaxException;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-import java.util.stream.Stream;
-
-public class SettingsForm implements Configurable, Configurable.NoScroll {
-
- private static final @NonNls Logger LOGGER = Logger.getInstance(SettingsForm.class);
-
- private JPanel pane;
- private JButton buttonEnableAll;
- private JButton buttonDisableAll;
- private JCheckBox overrideSettingsCheckbox;
- private JTextField ignoredPatternTextField;
- private JBLabel ignoredPatternTitle;
- private JTabbedPane iconsTabbedPane;
- private JBTable pluginIconsTable;
- private JPanel userIconsTablePanel;
- private final JBTable userIconsTable = new JBTable();
- private JPanel overrideSettingsPanel;
- private JCheckBox addToIDEUserIconsCheckbox;
- private JLabel filterLabel;
- private JTextField filterTextField;
- private JButton filterResetBtn;
- private JBLabel bottomTip;
- private JLabel additionalUIScaleTitle;
- private JTextField additionalUIScaleTextField;
- private JComboBox comboBoxIconsGroupSelector;
- private JLabel disableOrEnableOrLabel;
- private JLabel disableOrEnableLabel;
- private JButton buttonReloadProjectsIcons;
- private JLabel iconPackLabel;
- private JButton buttonImportIconPackFromFile;
- private JButton buttonExportUserIconsAsIconPack;
- private JButton buttonUninstallIconPack;
- private JLabel iconPackContextHelpLabel;
- private JButton buttonShowIconPacksFromWeb;
- private JPanel iconPackPanel;
- private JComboBox uiTypeSelector;
- private JLabel uiTypeSelectorTitle;
- private JLabel uiTypeSelectorHelpLabel;
- private JTabbedPane mainTabbedPane;
- private JPanel experimentalPanel;
- private JCheckBox useIDEFilenameIndexCheckbox;
- private JBLabel useIDEFilenameIndexTip;
- private JButton detectAdditionalUIScaleButton;
- private JLabel resetHintsTitle;
- private JButton resetHintsButton;
- private JButton buttonKnownIssue1;
- private JButton buttonKnownIssue2;
- private JLabel labelKnownIssue1;
- private JLabel labelKnownIssue2;
- private JLabel labelKnownIssueTitle;
- private JLabel labelKnownIssue3;
- private JButton buttonKnownIssue3;
- private JLabel licenseMissingLabel;
-
- private PluginIconsSettingsTableModel pluginIconsSettingsTableModel;
- private UserIconsSettingsTableModel userIconsSettingsTableModel;
- private @Nullable Project project;
- private List customModels = new ArrayList<>();
-
- private boolean forceUpdate = false;
-
- private static final ResourceBundle i18n = I18nUtils.getResourceBundle();
-
- public SettingsForm() {
- buttonEnableAll.addActionListener(e -> enableAll(true));
- buttonDisableAll.addActionListener(e -> enableAll(false));
- filterResetBtn.addActionListener(e -> resetFilter());
- filterTextField.getDocument().addDocumentListener(new DocumentListener() {
- @Override
- public void insertUpdate(DocumentEvent e) {
- applyFilter();
- }
-
- @Override
- public void removeUpdate(DocumentEvent e) {
- applyFilter();
- }
-
- @Override
- public void changedUpdate(DocumentEvent e) {
- applyFilter();
- }
- });
- buttonReloadProjectsIcons.addActionListener(al -> {
- try {
- RefreshIconsNotifierService.getInstance().triggerAllIconsRefreshAndIconEnablersReinit();
- Messages.showInfoMessage(
- i18n.getString("icons.reloaded"),
- i18n.getString("icons.reloaded.title")
- );
- } catch (Exception e) {
- LOGGER.warn("Config updated, but failed to reload icons for project", e);
- Messages.showErrorDialog(
- i18n.getString("icons.failed.to.reload"),
- i18n.getString("icons.failed.to.reload.title")
- );
- }
- });
- buttonImportIconPackFromFile.addActionListener(al -> {
- try {
- Optional iconPackPath = FileChooserUtils.chooseFile(i18n.getString("dialog.import.icon.pack.title"),
- this.pane, "*.json", "json"); //NON-NLS
- if (iconPackPath.isPresent()) {
- IconPack iconPack = IconPackUtils.fromJsonFile(new File(iconPackPath.get()));
- for (Model model : iconPack.getModels()) {
- if (iconPack.getName() != null && !iconPack.getName().isBlank()) {
- model.setIconPack(iconPack.getName());
- }
- customModels.add(model);
- }
- foldersFirst(customModels);
- setUserIconsTableModel();
- apply();
- Messages.showInfoMessage(
- i18n.getString("dialog.import.icon.pack.success"),
- i18n.getString("dialog.import.icon.pack.success.title")
- );
- }
- } catch (Exception e) {
- LOGGER.error("Failed to import Icon Pack", e); // TODO replace by error dialog
- }
- });
- buttonShowIconPacksFromWeb.addActionListener(al ->
- BrowserUtil.browse("https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/themes/THEMES.md#downloadable-icon-packs"));
- buttonExportUserIconsAsIconPack.addActionListener(al -> {
- try {
- Optional folderPath = FileChooserUtils.chooseFolder(i18n.getString("dialog.export.icon.pack.title"), this.pane);
- if (folderPath.isPresent()) {
- String filename = "extra-icons-" + System.currentTimeMillis() + "-icon-pack.json"; //NON-NLS
- AskSingleTextDialog askSingleTextDialog = new AskSingleTextDialog( // TODO replace by Messages.showInputDialog
- i18n.getString("dialog.export.ask.icon.pack.name.window.title"),
- i18n.getString("dialog.export.ask.icon.pack.name.title"));
- String iconPackName = "";
- if (askSingleTextDialog.showAndGet()) {
- iconPackName = askSingleTextDialog.getTextFromInput();
- }
- File exportFile = new File(folderPath.get() + "/" + filename);
- IconPackUtils.writeToJsonFile(exportFile, new IconPack(iconPackName, getBestSettingsService(project).getCustomModels()));
- Messages.showInfoMessage(
- i18n.getString("dialog.export.icon.pack.success") + "\n" + exportFile.getAbsolutePath(),
- i18n.getString("dialog.export.icon.pack.success.title")
- );
- }
- } catch (Exception e) {
- LOGGER.error("Failed to export user icons", e); // TODO replace by error dialog
- }
- });
- buttonUninstallIconPack.addActionListener(al -> {
- try {
- apply();
- IconPackUninstallerDialog iconPackUninstallerDialog = new IconPackUninstallerDialog(customModels);
- if (iconPackUninstallerDialog.showAndGet()) {
- String iconPackToUninstall = iconPackUninstallerDialog.getIconPackNameFromInput();
- if (!iconPackToUninstall.isBlank()) {
- customModels = customModels.stream()
- .filter(model -> !iconPackToUninstall.equals(model.getIconPack()))
- .collect(Collectors.toList());
- foldersFirst(customModels);
- setUserIconsTableModel();
- apply();
- }
- }
- } catch (Exception e) {
- LOGGER.error("Failed to uninstall Icon Pack", e); // TODO replace by error dialog
- }
- });
- detectAdditionalUIScaleButton.addActionListener(al -> {
- String uiScale = Double.toString(SettingsService.DEFAULT_ADDITIONAL_UI_SCALE);
- additionalUIScaleTextField.setText(uiScale);
- additionalUIScaleTextField.grabFocus();
- Messages.showInfoMessage(
- MessageFormat.format(i18n.getString("btn.scalefactor.detect.infomessage.message"), uiScale),
- i18n.getString("btn.scalefactor.detect.infomessage.title"));
- });
- resetHintsButton.addActionListener(al -> {
- SettingsIDEService settingsIDEService = SettingsIDEService.getInstance();
- settingsIDEService.setIconviewerShouldRenderSVGHintNotifDisplayed(false);
- settingsIDEService.setPluginIsConfigurableHintNotifDisplayed(false);
- settingsIDEService.setLifetimeLicIntroHintNotifDisplayed(false);
- resetHintsButton.setEnabled(false);
- Messages.showInfoMessage(
- i18n.getString("reset.hints.success.subtitle"),
- i18n.getString("reset.hints.success.title")
- );
- });
- }
-
- public SettingsForm(@NotNull Project project) {
- this();
- this.project = project;
- }
-
- public boolean isProjectForm() {
- return project != null;
- }
-
- @Nls(capitalization = Nls.Capitalization.Title)
- @Override
- public String getDisplayName() {
- return "Extra Icons"; //NON-NLS
- }
-
- @Nullable
- @Override
- public String getHelpTopic() {
- return null;
- }
-
- @Nullable
- @Override
- public JComponent createComponent() {
- initComponents();
- return pane;
- }
-
- @Override
- public boolean isModified() {
- if (forceUpdate) {
- return true;
- }
-
- SettingsService bestSettingsService = getBestSettingsService(project);
- SettingsIDEService settingsIDEService = SettingsIDEService.getInstance();
-
- if (isProjectForm()) {
- //noinspection DataFlowIssue
- SettingsProjectService projectService = SettingsProjectService.getInstance(project);
- if (projectService.isOverrideIDESettings() != overrideSettingsCheckbox.isSelected()) {
- return true;
- }
- if (projectService.isAddToIDEUserIcons() != addToIDEUserIconsCheckbox.isSelected()) {
- return true;
- }
- }
- if (!CollectionUtils.isEqualCollection(collectDisabledModelIds(), bestSettingsService.getDisabledModelIds())) {
- return true;
- }
- if (!CollectionUtils.isEqualCollection(customModels, bestSettingsService.getCustomModels())) {
- return true;
- }
- if (!CollectionUtils.isEqualCollection(customModels.stream().map(Model::isEnabled).collect(Collectors.toList()), collectUserIconEnabledStates())) {
- return true;
- }
- if (settingsIDEService.getUiTypeIconsPreference() != getSelectedUITypeIconsPreference()) {
- return true;
- }
- if (!bestSettingsService.getIgnoredPattern().equals(ignoredPatternTextField.getText())) {
- return true;
- }
- if (settingsIDEService.getUseIDEFilenameIndex2() != useIDEFilenameIndexCheckbox.isSelected()) {
- return true;
- }
- return !ignoredPatternTextField.getText().equals(bestSettingsService.getIgnoredPattern())
- || !additionalUIScaleTextField.getText().equals(Double.toString(settingsIDEService.getAdditionalUIScale2()));
- }
-
- private List collectDisabledModelIds() {
- if (pluginIconsSettingsTableModel == null) {
- return Collections.emptyList();
- }
-
- List disabledModelIds = new ArrayList<>();
- for (int settingsTableRow = 0; settingsTableRow < pluginIconsSettingsTableModel.getRowCount(); settingsTableRow++) {
- boolean iconEnabled = (boolean) pluginIconsSettingsTableModel.getValueAt(settingsTableRow, PluginIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER);
- if (!iconEnabled) {
- disabledModelIds.add((String) pluginIconsSettingsTableModel.getValueAt(settingsTableRow, PluginIconsSettingsTableModel.ICON_ID_COL_NUMBER));
- }
- }
- return disabledModelIds;
- }
-
- private List collectUserIconEnabledStates() {
- if (userIconsSettingsTableModel == null) {
- return Collections.emptyList();
- }
-
- return IntStream.range(0, userIconsSettingsTableModel.getRowCount()).mapToObj(
- index -> ((boolean) userIconsSettingsTableModel.getValueAt(index, UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER))
- ).collect(Collectors.toList());
- }
-
- private UITypeIconsPreference getSelectedUITypeIconsPreference() {
- int selectedIndex = uiTypeSelector.getSelectedIndex();
- if (selectedIndex == 0) {
- return UITypeIconsPreference.BASED_ON_ACTIVE_UI_TYPE;
- } else if (selectedIndex == 1) {
- return UITypeIconsPreference.PREFER_OLD_UI_ICONS;
- } else {
- return UITypeIconsPreference.PREFER_NEW_UI_ICONS;
- }
- }
-
- private void setSelectedUITypeIconsPreference(UITypeIconsPreference uiTypeIconsPreference) {
- switch (uiTypeIconsPreference) {
- case BASED_ON_ACTIVE_UI_TYPE -> uiTypeSelector.setSelectedIndex(0);
- case PREFER_OLD_UI_ICONS -> uiTypeSelector.setSelectedIndex(1);
- case PREFER_NEW_UI_ICONS -> uiTypeSelector.setSelectedIndex(2);
- }
- }
-
- @Override
- public void apply() {
- SettingsService bestSettingsService = getBestSettingsService(project);
- SettingsIDEService settingsIDEService = SettingsIDEService.getInstance();
-
- if (isProjectForm()) {
- //noinspection DataFlowIssue
- SettingsProjectService projectService = SettingsProjectService.getInstance(project);
- projectService.setOverrideIDESettings(overrideSettingsCheckbox.isSelected());
- projectService.setAddToIDEUserIcons(addToIDEUserIconsCheckbox.isSelected());
- }
- settingsIDEService.setUseIDEFilenameIndex2(useIDEFilenameIndexCheckbox.isSelected());
- settingsIDEService.setUiTypeIconsPreference(getSelectedUITypeIconsPreference());
- bestSettingsService.setDisabledModelIds(collectDisabledModelIds());
- bestSettingsService.setIgnoredPattern(ignoredPatternTextField.getText());
- try {
- settingsIDEService.setAdditionalUIScale2(Double.valueOf(additionalUIScaleTextField.getText()));
- } catch (NumberFormatException e) {
- Messages.showErrorDialog(
- MessageFormat.format(i18n.getString("invalid.ui.scalefactor"), additionalUIScaleTextField.getText()),
- i18n.getString("invalid.ui.scalefactor.title")
- );
- }
- List enabledStates = collectUserIconEnabledStates();
- for (int i = 0; i < customModels.size(); i++) {
- Model model = customModels.get(i);
- model.setEnabled(enabledStates.get(i));
- }
- bestSettingsService.setCustomModels(customModels);
-
- try {
- if (isProjectForm()) {
- RefreshIconsNotifierService.getInstance().triggerProjectIconEnablersReinit(project);
- RefreshIconsNotifierService.getInstance().triggerProjectIconsRefresh(project);
- } else {
- RefreshIconsNotifierService.getInstance().triggerAllIconsRefreshAndIconEnablersReinit();
- }
- } catch (Exception e) {
- LOGGER.warn("Config updated, but failed to reload icons", e);
- }
-
- forceUpdate = false;
- }
-
- @Nullable
- public Project getProject() {
- return this.project;
- }
-
- private void initComponents() {
- licenseMissingLabel.setText(i18n.getString("license.not.found.config.title"));
- licenseMissingLabel.setVisible(!ExtraIconsLicenseStatus.isLicenseActivated());
-
- uiTypeSelector.setRenderer(new ComboBoxWithImageRenderer());
- uiTypeSelector.addItem(new ComboBoxWithImageItem(
- "extra-icons/plugin-internals/auto.svg", //NON-NLS
- i18n.getString("uitype.selector.auto.select")));
- uiTypeSelector.addItem(new ComboBoxWithImageItem(
- "extra-icons/plugin-internals/folder_oldui.svg",//NON-NLS
- i18n.getString("uitype.selector.prefer.old")));
- uiTypeSelector.addItem(new ComboBoxWithImageItem(
- "extra-icons/plugin-internals/folder_newui.svg", //NON-NLS
- i18n.getString("uitype.selector.prefer.new")));
- setSelectedUITypeIconsPreference(SettingsIDEService.getInstance().getUiTypeIconsPreference());
-
- disableOrEnableLabel.setText(i18n.getString("quick.action.label"));
-
- buttonEnableAll.setText(i18n.getString("btn.enable.all"));
- buttonEnableAll.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/gutterCheckBoxSelected.svg", SettingsForm.class)); //NON-NLS
-
- buttonDisableAll.setText(i18n.getString("btn.disable.all"));
- buttonDisableAll.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/gutterCheckBox.svg", SettingsForm.class)); //NON-NLS
-
- ignoredPatternTitle.setText(i18n.getString("label.regex.ignore.relative.paths"));
- ignoredPatternTextField.setToolTipText(i18n.getString("field.regex.ignore.relative.paths"));
- additionalUIScaleTitle.setText(i18n.getString("label.ui.scalefactor"));
- additionalUIScaleTextField.setToolTipText(i18n.getString("field.ui.scalefactor"));
- detectAdditionalUIScaleButton.setText(i18n.getString("btn.scalefactor.detect"));
- additionalUIScaleTextField.setColumns(4);
- filterLabel.setText(i18n.getString("plugin.icons.table.filter"));
- filterTextField.setText("");
- filterTextField.setToolTipText(i18n.getString("plugin.icons.table.filter.tooltip"));
- filterResetBtn.setText(i18n.getString("btn.plugin.icons.table.filter.reset"));
- bottomTip.setText(i18n.getString("plugin.icons.table.bottom.tip"));
- resetHintsTitle.setText(i18n.getString("reset.hints.title"));
- resetHintsButton.setText(i18n.getString("reset.hints.btn"));
-
- initCheckbox();
-
- loadPluginIconsTable();
- //TableSpeedSearch.installOn(pluginIconsTable); // TODO install a SpeedSearch on icons table once 232 is the new IDE min version, and make it work (for now, the settings search field steals focus)
-
- userIconsTable.setShowHorizontalLines(false);
- userIconsTable.setShowVerticalLines(false);
- userIconsTable.setFocusable(false);
- userIconsTable.setRowSelectionAllowed(true);
- userIconsTablePanel.add(createToolbarDecorator());
- loadUserIconsTable();
- loadIgnoredPattern();
- loadAdditionalUIScale();
-
- if (isProjectForm()) {
- additionalUIScaleTitle.setVisible(false);
- additionalUIScaleTextField.setVisible(false);
- buttonReloadProjectsIcons.setVisible(false);
- iconPackPanel.setVisible(false);
- uiTypeSelector.setVisible(false);
- uiTypeSelectorTitle.setVisible(false);
- uiTypeSelectorHelpLabel.setVisible(false);
- experimentalPanel.setVisible(false);
- detectAdditionalUIScaleButton.setVisible(false);
- resetHintsTitle.setVisible(false);
- resetHintsButton.setVisible(false);
- }
-
- overrideSettingsCheckbox.setText(i18n.getString("checkbox.override.ide.settings"));
- overrideSettingsCheckbox.setToolTipText(i18n.getString("checkbox.override.ide.settings.tooltip"));
- overrideSettingsCheckbox.addItemListener(item -> {
- boolean enabled = item.getStateChange() == ItemEvent.SELECTED;
- setComponentState(enabled);
- });
-
- addToIDEUserIconsCheckbox.setText(i18n.getString("checkbox.dont.overwrite.ide.user.icons"));
- addToIDEUserIconsCheckbox.setToolTipText(i18n.getString("checkbox.dont.overwrite.ide.user.icons.tooltip"));
-
- buttonReloadProjectsIcons.setText(i18n.getString("btn.reload.project.icons"));
- buttonReloadProjectsIcons.setToolTipText(i18n.getString("btn.reload.project.icons.tooltip"));
- buttonReloadProjectsIcons.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/refresh.svg", SettingsForm.class)); //NON-NLS
-
- comboBoxIconsGroupSelector.setRenderer(new ComboBoxWithImageRenderer());
- comboBoxIconsGroupSelector.addItem(new ComboBoxWithImageItem(i18n.getString("icons")));
- Arrays.stream(ModelTag.values()).forEach(modelTag -> comboBoxIconsGroupSelector.addItem(
- new ComboBoxWithImageItem(modelTag, MessageFormat.format(i18n.getString("icons.tag.name"), modelTag.getName()))
- ));
- ComboboxSpeedSearch.installSpeedSearch(comboBoxIconsGroupSelector, ComboBoxWithImageItem::getTitle);
-
- iconPackLabel.setText(i18n.getString("icon.pack.label"));
-
- buttonImportIconPackFromFile.setText(i18n.getString("btn.import.icon.pack.file"));
- buttonImportIconPackFromFile.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/import.svg", SettingsForm.class)); //NON-NLS
-
- buttonShowIconPacksFromWeb.setText(i18n.getString("btn.import.icon.pack.web"));
- buttonShowIconPacksFromWeb.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/web.svg", SettingsForm.class)); //NON-NLS
- buttonShowIconPacksFromWeb.setToolTipText(i18n.getString("btn.import.icon.pack.web.tooltip"));
-
- buttonExportUserIconsAsIconPack.setText(i18n.getString("btn.export.icon.pack"));
- buttonExportUserIconsAsIconPack.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/export.svg", SettingsForm.class)); //NON-NLS
-
- iconPackContextHelpLabel.setText("");
- iconPackContextHelpLabel.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/contextHelp.svg", SettingsForm.class)); //NON-NLS
- iconPackContextHelpLabel.setToolTipText(i18n.getString("icon.pack.context.help"));
-
- uiTypeSelectorTitle.setText(i18n.getString("uitype.selector.context.title"));
- uiTypeSelectorHelpLabel.setText("");
- uiTypeSelectorHelpLabel.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/contextHelp.svg", SettingsForm.class)); //NON-NLS
- uiTypeSelectorHelpLabel.setToolTipText(i18n.getString("uitype.selector.context.help"));
-
- buttonUninstallIconPack.setText(i18n.getString("btn.uninstall.icon.pack"));
- buttonUninstallIconPack.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/remove.svg", SettingsForm.class)); //NON-NLS
-
- mainTabbedPane.setTitleAt(0, " " + i18n.getString("main.pane.main.config.title") + " ");
- mainTabbedPane.setTitleAt(1, " " + i18n.getString("main.pane.advanced.config.title") + " ");
- mainTabbedPane.setTitleAt(2, " " + i18n.getString("main.pane.known.issues.title") + " ");
-
- iconsTabbedPane.setTitleAt(0, " " + i18n.getString("plugin.icons.table.tab.name") + " ");
- iconsTabbedPane.setTitleAt(1, " " + i18n.getString("user.icons.table.tab.name") + " ");
-
- experimentalPanel.setBorder(IdeBorderFactory.createTitledBorder(i18n.getString("experimental.panel.title")));
-
- useIDEFilenameIndexCheckbox.setSelected(SettingsIDEService.getInstance().getUseIDEFilenameIndex2());
- useIDEFilenameIndexCheckbox.setText(i18n.getString("checkbox.use.ide.filename.index.label"));
- useIDEFilenameIndexTip.setText(i18n.getString("checkbox.use.ide.filename.index.tip"));
-
- labelKnownIssueTitle.setText(i18n.getString("known.issues.title"));
-
- labelKnownIssue1.setText(i18n.getString("known.issue.label1"));
- labelKnownIssue2.setText(i18n.getString("known.issue.label2"));
- labelKnownIssue3.setText(i18n.getString("known.issue.label3"));
- buttonKnownIssue1.setText(i18n.getString("known.issue.btn1"));
- buttonKnownIssue2.setText(i18n.getString("known.issue.btn2"));
- buttonKnownIssue3.setText(i18n.getString("known.issue.btn3"));
- buttonKnownIssue1.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/web.svg", SettingsForm.class)); //NON-NLS
- buttonKnownIssue2.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/web.svg", SettingsForm.class)); //NON-NLS
- buttonKnownIssue3.setIcon(IconLoader.getIcon("extra-icons/plugin-internals/web.svg", SettingsForm.class)); //NON-NLS
- buttonKnownIssue1.addActionListener(al ->
- BrowserUtil.browse("https://youtrack.jetbrains.com/issue/IDEA-247819"));
- buttonKnownIssue2.addActionListener(al ->
- BrowserUtil.browse("https://youtrack.jetbrains.com/issue/IDEA-339254"));
- buttonKnownIssue3.addActionListener(al ->
- BrowserUtil.browse("https://youtrack.jetbrains.com/issue/RIDER-101621"));
-
- initCheckbox();
- }
-
- private void createUIComponents() {
- // Use default project here because project is not available yet
- }
-
- private void initCheckbox() {
- if (!isProjectForm()) {
- overrideSettingsPanel.setVisible(false);
- return;
- }
- //noinspection DataFlowIssue project is not null here
- SettingsProjectService settingsService = SettingsProjectService.getInstance(project);
- boolean shouldOverride = settingsService.isOverrideIDESettings();
- overrideSettingsCheckbox.setSelected(shouldOverride);
- setComponentState(shouldOverride);
- boolean shouldAdd = settingsService.isAddToIDEUserIcons();
- addToIDEUserIconsCheckbox.setSelected(shouldAdd);
- }
-
- private void setComponentState(boolean enabled) {
- Stream.of(pluginIconsTable, userIconsTable, ignoredPatternTitle, ignoredPatternTextField,
- iconsTabbedPane, addToIDEUserIconsCheckbox, filterLabel,
- filterTextField, filterResetBtn, buttonEnableAll,
- disableOrEnableOrLabel, buttonDisableAll, disableOrEnableLabel,
- comboBoxIconsGroupSelector, mainTabbedPane).forEach(jComponent -> jComponent.setEnabled(enabled));
- }
-
- @Override
- public void reset() {
- initCheckbox();
- loadPluginIconsTable();
- loadUserIconsTable();
- loadIgnoredPattern();
- loadAdditionalUIScale();
- }
-
- private void loadUserIconsTable() {
- customModels = new ArrayList<>(getBestSettingsService(project).getCustomModels());
- foldersFirst(customModels);
- setUserIconsTableModel();
- }
-
- private void setUserIconsTableModel() {
- SettingsIDEService settingsIDEService = SettingsIDEService.getInstance();
-
- int currentSelected = userIconsSettingsTableModel != null ? userIconsTable.getSelectedRow() : -1;
- userIconsSettingsTableModel = new UserIconsSettingsTableModel();
- final Double additionalUIScale = settingsIDEService.getAdditionalUIScale2();
- final UITypeIconsPreference uiTypeIconsPreference = settingsIDEService.getUiTypeIconsPreference();
- customModels.forEach(m -> {
- try {
- userIconsSettingsTableModel.addRow(new Object[]{
- IconUtils.getIcon(m, additionalUIScale, uiTypeIconsPreference),
- m.isEnabled(),
- m.getDescription(),
- m.getIconPack()
- });
- } catch (Throwable e) {
- LOGGER.warn(e);
- }
- }
- );
- userIconsTable.setModel(userIconsSettingsTableModel);
- userIconsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- userIconsTable.setRowHeight(28);
- TableColumnModel columnModel = userIconsTable.getColumnModel();
- columnModel.getColumn(UserIconsSettingsTableModel.ICON_COL_NUMBER).setMaxWidth(28);
- columnModel.getColumn(UserIconsSettingsTableModel.ICON_COL_NUMBER).setWidth(28);
- columnModel.getColumn(UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER).setWidth(28);
- columnModel.getColumn(UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER).setMaxWidth(28);
- columnModel.getColumn(UserIconsSettingsTableModel.ICON_LABEL_COL_NUMBER).sizeWidthToFit();
- columnModel.getColumn(UserIconsSettingsTableModel.ICON_PACK_COL_NUMBER).setMinWidth(250);
- columnModel.getColumn(UserIconsSettingsTableModel.ICON_PACK_COL_NUMBER).setMaxWidth(450);
- columnModel.getColumn(UserIconsSettingsTableModel.ICON_PACK_COL_NUMBER).setPreferredWidth(280);
- if (currentSelected != -1 && currentSelected < userIconsTable.getRowCount()) {
- userIconsTable.setRowSelectionInterval(currentSelected, currentSelected);
- }
- }
-
- /**
- * Get the selected tag for quick action. Empty if "all icons" is selected, otherwise returns selected tag.
- */
- private Optional getSelectedTag() {
- int selectedItemIdx = comboBoxIconsGroupSelector.getSelectedIndex();
- if (selectedItemIdx == 0) {
- return Optional.empty();
- }
- return Optional.of(ModelTag.values()[selectedItemIdx - 1]);
- }
-
- private void enableAll(boolean enable) {
- boolean isPluginIconsSettingsTableModelSelected = iconsTabbedPane.getSelectedIndex() == 0;
- DefaultTableModel tableModel = isPluginIconsSettingsTableModelSelected ? pluginIconsSettingsTableModel : userIconsSettingsTableModel;
- for (int settingsTableRow = 0; settingsTableRow < tableModel.getRowCount(); settingsTableRow++) {
- Optional selectedTag = getSelectedTag();
- if (selectedTag.isEmpty()) {
- tableModel.setValueAt(enable, settingsTableRow, PluginIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER); // Enabled column number is the same for both models
- } else if (isPluginIconsSettingsTableModelSelected) {
- @SuppressWarnings("unchecked") List rowTags = (List) tableModel.getValueAt(settingsTableRow, PluginIconsSettingsTableModel.ICON_TAGS_ENUM_LIST_COL_NUMBER);
- if (rowTags.contains(selectedTag.get())) {
- tableModel.setValueAt(enable, settingsTableRow, PluginIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER);
- }
- }
- }
- }
-
- private void applyFilter() {
- String filter = filterTextField.getText();
- TableRowSorter sorter = new TableRowSorter<>(((PluginIconsSettingsTableModel) pluginIconsTable.getModel()));
- if (StringUtil.isEmpty(filter)) {
- filter = ".*";
- }
- try {
- sorter.setStringConverter(new TableStringConverter() {
- @Override
- public String toString(TableModel model, int row, int column) {
- String desc = model.getValueAt(row, PluginIconsSettingsTableModel.ICON_LABEL_COL_NUMBER).toString();
- return desc + " " + desc.toLowerCase(Locale.ENGLISH) + " " + desc.toUpperCase(Locale.ENGLISH);
- }
- });
- // "yes"/"no" to filter by icons enabled/disabled, otherwise regex filter
- boolean isYesFilter = "yes".equalsIgnoreCase(filter); //NON-NLS
- if (isYesFilter || "no".equalsIgnoreCase(filter)) { //NON-NLS
- sorter.setRowFilter(new RowFilter<>() {
- @Override
- public boolean include(Entry extends PluginIconsSettingsTableModel, ? extends Integer> entry) {
- boolean iconEnabled = ((boolean) entry.getValue(PluginIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER));
- if (isYesFilter) {
- return iconEnabled;
- } else {
- return !iconEnabled;
- }
- }
- });
- } else {
- sorter.setRowFilter(RowFilter.regexFilter(filter));
- }
- pluginIconsTable.setRowSorter(sorter);
- } catch (PatternSyntaxException pse) {
- LOGGER.warnWithDebug(pse);
- }
- }
-
- private void resetFilter() {
- filterTextField.setText("");
- applyFilter();
- }
-
- private void loadPluginIconsTable() {
- SettingsIDEService settingsIDEService = SettingsIDEService.getInstance();
-
- int currentSelected = pluginIconsSettingsTableModel != null ? pluginIconsTable.getSelectedRow() : -1;
- pluginIconsSettingsTableModel = new PluginIconsSettingsTableModel();
- List allRegisteredModels = SettingsService.getAllRegisteredModels();
- if (isProjectForm()) {
- // IDE icon overrides work at IDE level only, not a project level, that's why
- // the project-level icons list won't show IDE icons.
- allRegisteredModels = allRegisteredModels.stream()
- .filter(model -> model.getModelType() != ModelType.ICON)
- .collect(Collectors.toList());
- }
- foldersFirst(allRegisteredModels);
- List disabledModelIds = getBestSettingsService(project).getDisabledModelIds();
- final Double additionalUIScale = settingsIDEService.getAdditionalUIScale2();
- final UITypeIconsPreference uiTypeIconsPreference = settingsIDEService.getUiTypeIconsPreference();
- final Icon restartIcon = IconLoader.getIcon("extra-icons/plugin-internals/reboot.svg", SettingsForm.class); //NON-NLS
- allRegisteredModels.forEach(m -> pluginIconsSettingsTableModel.addRow(new Object[]{
- IconUtils.getIcon(m, additionalUIScale, uiTypeIconsPreference),
- !disabledModelIds.contains(m.getId()),
- m.getDescription(),
- Arrays.toString(m.getTags().stream().map(ModelTag::getName).toArray()).replaceAll("\\[|]*", "").trim(),
- Strings.isNullOrEmpty(m.getIdeIcon()) ? null : restartIcon,
- m.getTags(),
- m.getId()
- })
- );
- pluginIconsTable.setModel(pluginIconsSettingsTableModel);
- pluginIconsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- pluginIconsTable.setRowHeight(28);
- TableColumnModel columnModel = pluginIconsTable.getColumnModel();
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_COL_NUMBER).setMaxWidth(28);
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_COL_NUMBER).setWidth(28);
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER).setWidth(28);
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER).setMaxWidth(28);
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_LABEL_COL_NUMBER).sizeWidthToFit();
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_TAGS_LABEL_COL_NUMBER).setMaxWidth(120);
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_TAGS_LABEL_COL_NUMBER).setMinWidth(120);
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_TAGS_LABEL_COL_NUMBER).setMaxWidth(120);
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_TAGS_LABEL_COL_NUMBER).setMinWidth(120);
- int requireRestartColWidth = I18nUtils.isChineseUIEnabled() ? 100 : 80;
- if (OS.detectOS() == OS.WIN) {
- requireRestartColWidth -= 5;
- }
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_REQUIRE_IDE_RESTART).setMaxWidth(requireRestartColWidth);
- columnModel.getColumn(PluginIconsSettingsTableModel.ICON_REQUIRE_IDE_RESTART).setMinWidth(requireRestartColWidth);
-
- // set invisible but keep data
- columnModel.removeColumn(columnModel.getColumn(PluginIconsSettingsTableModel.ICON_ID_COL_NUMBER));
- columnModel.removeColumn(columnModel.getColumn(PluginIconsSettingsTableModel.ICON_TAGS_ENUM_LIST_COL_NUMBER));
- if (currentSelected != -1) {
- pluginIconsTable.setRowSelectionInterval(currentSelected, currentSelected);
- }
- }
-
- private void loadIgnoredPattern() {
- ignoredPatternTextField.setText(getBestSettingsService(project).getIgnoredPattern());
- }
-
- private void loadAdditionalUIScale() {
- additionalUIScaleTextField.setText(Double.toString(SettingsIDEService.getInstance().getAdditionalUIScale2()));
- }
-
- private JComponent createToolbarDecorator() {
- ToolbarDecorator decorator = ToolbarDecorator.createDecorator(userIconsTable)
-
- .setAddAction(anActionButton -> {
- ModelDialog modelDialog = new ModelDialog(this, this.project);
- if (modelDialog.showAndGet()) {
- Model newModel = modelDialog.getModelFromInput();
- customModels.add(newModel);
- foldersFirst(customModels);
- setUserIconsTableModel();
- }
- })
-
- .setEditAction(anActionButton -> {
- int currentSelected = userIconsTable.getSelectedRow();
- ModelDialog modelDialog = new ModelDialog(this, this.project);
- modelDialog.setModelToEdit(customModels.get(currentSelected));
- if (modelDialog.showAndGet()) {
- Model newModel = modelDialog.getModelFromInput();
- customModels.set(currentSelected, newModel);
- setUserIconsTableModel();
- }
- })
-
- .setRemoveAction(anActionButton -> {
- customModels.remove(userIconsTable.getSelectedRow());
- setUserIconsTableModel();
- })
-
- .setButtonComparator(i18n.getString("btn.add"), i18n.getString("btn.edit"), i18n.getString("btn.remove"))
-
- .setMoveUpAction(anActionButton -> reorderUserIcons(MoveDirection.UP, userIconsTable.getSelectedRow()))
-
- .setMoveDownAction(anActionButton -> reorderUserIcons(MoveDirection.DOWN, userIconsTable.getSelectedRow()));
- return decorator.createPanel();
- }
-
- private void reorderUserIcons(MoveDirection moveDirection, int selectedItemIdx) {
- Model modelToMove = customModels.get(selectedItemIdx);
- int newSelectedItemIdx = moveDirection == MoveDirection.UP ? selectedItemIdx - 1 : selectedItemIdx + 1;
- boolean selectedItemIsEnabled = (boolean) userIconsTable.getValueAt(selectedItemIdx, UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER);
- boolean newSelectedItemIsEnabled = (boolean) userIconsTable.getValueAt(newSelectedItemIdx, UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER);
- List itemsAreEnabled = new ArrayList<>();
- for (int i = 0; i < userIconsTable.getRowCount(); i++) {
- itemsAreEnabled.add((Boolean) userIconsTable.getValueAt(i, UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER));
- }
-
- customModels.set(selectedItemIdx, customModels.get(newSelectedItemIdx));
- customModels.set(newSelectedItemIdx, modelToMove);
- setUserIconsTableModel();
-
- // User may have enabled or disabled some items, but changes are not applied yet to customModels, so setUserIconsTableModel will reset
- // the Enabled column to previous state. We need to reapply user changes on this column.
- for (int i = 0; i < userIconsTable.getRowCount(); i++) {
- userIconsTable.setValueAt(itemsAreEnabled.get(i), i, UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER);
- }
- userIconsTable.setValueAt(selectedItemIsEnabled, newSelectedItemIdx, UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER);
- userIconsTable.setValueAt(newSelectedItemIsEnabled, selectedItemIdx, UserIconsSettingsTableModel.ICON_ENABLED_COL_NUMBER);
-
- userIconsTable.clearSelection();
- userIconsTable.setRowSelectionInterval(newSelectedItemIdx, newSelectedItemIdx);
-
- // TODO fix Model and ModelCondition equals & hashCode methods in order
- // to fix CollectionUtils.isEqualCollection(customModels, service.getCustomModels()).
- // For now, the comparison returns true when customModels ordering changed. It should return false.
- forceUpdate = true;
- }
-
- /**
- * Returns the Project settings service if the project is not null, otherwise returns the IDE settings service.
- */
- @NotNull
- private SettingsService getBestSettingsService(@Nullable Project project) {
- if (project != null) {
- return SettingsProjectService.getInstance(project);
- }
- return SettingsIDEService.getInstance();
- }
-
- private enum MoveDirection {
- UP,
- DOWN
- }
-
- private void foldersFirst(List models) {
- models.sort((o1, o2) -> {
- // folders first, then files
- return ModelType.compare(o1.getModelType(), o2.getModelType());
- });
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/AskSingleTextDialog.form b/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/AskSingleTextDialog.form
deleted file mode 100644
index c6c8563f..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/AskSingleTextDialog.form
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/AskSingleTextDialog.java b/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/AskSingleTextDialog.java
deleted file mode 100644
index ae099799..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/AskSingleTextDialog.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.cfg.dialogs;
-
-import com.intellij.openapi.ui.DialogWrapper;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-/**
- * A dialog which asks for a single text input. Input can be empty.
- */
-public class AskSingleTextDialog extends DialogWrapper {
-
- private JPanel pane;
- private JTextField textField;
- private JLabel label;
-
- @Override
- protected @Nullable JComponent createCenterPanel() {
- return pane;
- }
-
- public AskSingleTextDialog(String windowTitle, String fieldTitle) {
- super(true);
- init();
- setTitle(windowTitle);
- initComponents(fieldTitle);
- }
-
- private void initComponents(String fieldTitle) {
- label.setText(fieldTitle);
- }
-
- public String getTextFromInput() {
- return textField.getText();
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/IconPackUninstallerDialog.form b/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/IconPackUninstallerDialog.form
deleted file mode 100644
index 1b0100d8..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/IconPackUninstallerDialog.form
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/IconPackUninstallerDialog.java b/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/IconPackUninstallerDialog.java
deleted file mode 100644
index 8f879040..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/IconPackUninstallerDialog.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.cfg.dialogs;
-
-import com.intellij.openapi.ui.DialogWrapper;
-import lermitage.intellij.extra.icons.Model;
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import java.util.HashSet;
-import java.util.List;
-import java.util.ResourceBundle;
-import java.util.Set;
-
-/**
- * A dialog which asks to choose an icon pack name, or nothing.
- */
-public class IconPackUninstallerDialog extends DialogWrapper {
-
- private final List models;
-
- private JPanel pane;
- private JLabel iconPackChooserTitleLabel;
- private JComboBox iconPackComboBox;
-
- private static final ResourceBundle i18n = I18nUtils.getResourceBundle();
-
- @Override
- protected @Nullable JComponent createCenterPanel() {
- return pane;
- }
-
- public IconPackUninstallerDialog(List models) {
- super(true);
- this.models = models;
- init();
- setTitle(i18n.getString("model.dialog.uninstall.icon.pack.window.title"));
- initComponents();
- }
-
- private void initComponents() {
- iconPackChooserTitleLabel.setText(i18n.getString("model.dialog.uninstall.icon.pack.title"));
- Set iconPacks = new HashSet<>();
- models.forEach(model -> {
- if (model.getIconPack() != null && !model.getIconPack().isBlank()) {
- iconPacks.add(model.getIconPack());
- }
- });
- iconPacks.stream().sorted().forEach(s -> iconPackComboBox.addItem(s));
- }
-
- public String getIconPackNameFromInput() {
- return iconPackComboBox.getItemAt(iconPackComboBox.getSelectedIndex());
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelConditionDialog.form b/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelConditionDialog.form
deleted file mode 100644
index 78cb5346..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelConditionDialog.form
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelConditionDialog.java b/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelConditionDialog.java
deleted file mode 100644
index 12771aab..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelConditionDialog.java
+++ /dev/null
@@ -1,284 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.cfg.dialogs;
-
-import com.intellij.openapi.ui.DialogWrapper;
-import com.intellij.openapi.ui.ValidationInfo;
-import com.intellij.ui.components.JBLabel;
-import lermitage.intellij.extra.icons.ModelCondition;
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-import java.awt.event.ItemEvent;
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-public class ModelConditionDialog extends DialogWrapper {
-
- public static final String FIELD_SEPARATOR = ";";
- public static final String FIELD_SEPARATOR_NAME = "semicolon"; //NON-NLS
-
- private JPanel dialogPanel;
- private JCheckBox regexCheckBox;
- private JTextField regexTextField;
- private JCheckBox parentsCheckBox;
- private JTextField parentsTextField;
- private JCheckBox namesCheckBox;
- private JTextField namesTextField;
- private JCheckBox extensionsCheckBox;
- private JTextField extensionsTextField;
- private JRadioButton mayEndWithRadioButton;
- private JRadioButton endsWithRadioButton;
- private JRadioButton startsWithRadioButton;
- private JRadioButton equalsRadioButton;
- private JCheckBox noDotCheckBox;
- private JBLabel tipsLabel;
- private JCheckBox facetsCheckBox;
- private JTextField facetsTextField;
-
- private static final ResourceBundle i18n = I18nUtils.getResourceBundle();
-
- public ModelConditionDialog() {
- super(false);
- init();
- setTitle(i18n.getString("model.condition.dialog.title"));
- }
-
- @Nullable
- @Override
- protected JComponent createCenterPanel() {
- initComponents();
- return dialogPanel;
- }
-
- private void initComponents() {
- ButtonGroup endButtonGroup = new ButtonGroup();
- endButtonGroup.add(endsWithRadioButton);
- endButtonGroup.add(mayEndWithRadioButton);
- endsWithRadioButton.setSelected(true);
- endsWithRadioButton.setEnabled(false);
- mayEndWithRadioButton.setEnabled(false);
-
- ButtonGroup namesButtonGroup = new ButtonGroup();
- namesButtonGroup.add(startsWithRadioButton);
- namesButtonGroup.add(equalsRadioButton);
- startsWithRadioButton.setSelected(true);
- startsWithRadioButton.setEnabled(false);
- equalsRadioButton.setEnabled(false);
- noDotCheckBox.setEnabled(false);
-
- regexCheckBox.addItemListener(item -> {
- boolean selected = item.getStateChange() == ItemEvent.SELECTED;
- regexTextField.setEnabled(selected);
- });
-
- parentsCheckBox.addItemListener(item -> {
- boolean selected = item.getStateChange() == ItemEvent.SELECTED;
- parentsTextField.setEnabled(selected);
- });
-
- namesCheckBox.addItemListener(item -> {
- boolean selected = item.getStateChange() == ItemEvent.SELECTED;
- namesTextField.setEnabled(selected);
- startsWithRadioButton.setEnabled(selected);
- equalsRadioButton.setEnabled(selected);
- });
-
- extensionsCheckBox.addItemListener(item -> {
- boolean selected = item.getStateChange() == ItemEvent.SELECTED;
- extensionsTextField.setEnabled(selected);
- mayEndWithRadioButton.setEnabled(selected);
- endsWithRadioButton.setEnabled(selected);
- });
-
- startsWithRadioButton.addItemListener(item -> {
- boolean selected = item.getStateChange() == ItemEvent.SELECTED;
- noDotCheckBox.setEnabled(selected);
- });
-
- startsWithRadioButton.addPropertyChangeListener("enabled", propertyChange ->
- noDotCheckBox.setEnabled((boolean) propertyChange.getNewValue())
- );
-
- facetsCheckBox.addItemListener(item -> {
- boolean selected = item.getStateChange() == ItemEvent.SELECTED;
- facetsTextField.setEnabled(selected);
- });
-
- regexTextField.setEnabled(false);
- parentsTextField.setEnabled(false);
- namesTextField.setEnabled(false);
- extensionsTextField.setEnabled(false);
- facetsTextField.setEnabled(false);
-
- tipsLabel.setText(MessageFormat.format(i18n.getString("model.condition.dialog.tips"), FIELD_SEPARATOR_NAME));
-
- regexCheckBox.setText(i18n.getString("model.condition.dialog.regex.checkbox"));
- parentsCheckBox.setText(i18n.getString("model.condition.dialog.parents.checkbox"));
- namesCheckBox.setText(i18n.getString("model.condition.dialog.names.checkbox"));
- startsWithRadioButton.setText(i18n.getString("model.condition.dialog.startswith.checkbox"));
- equalsRadioButton.setText(i18n.getString("model.condition.dialog.equals.checkbox"));
- noDotCheckBox.setText(i18n.getString("model.condition.dialog.nodot.checkbox"));
- extensionsCheckBox.setText(i18n.getString("model.condition.dialog.extensions.checkbox"));
- endsWithRadioButton.setText(i18n.getString("model.condition.dialog.endswith.checkbox"));
- mayEndWithRadioButton.setText(i18n.getString("model.condition.dialog.mayendwith.checkbox"));
- facetsCheckBox.setText(i18n.getString("model.condition.dialog.facets.checkbox"));
- }
-
- private void createUIComponents() {
- }
-
- @Nullable
- @Override
- protected ValidationInfo doValidate() {
- if (regexCheckBox.isSelected()) {
- String regex = regexTextField.getText();
- PatternSyntaxException exception = tryCompileRegex(regex);
- if (regex.isEmpty() || exception != null) {
- String message = i18n.getString("model.condition.dialog.err.invalid.regex");
- if (exception != null) {
- message += " ( " + exception.getMessage() + ")";
- }
- return new ValidationInfo(message);
- }
- }
-
- if (parentsCheckBox.isSelected()) {
- if (parentsTextField.getText().isEmpty()) {
- return new ValidationInfo(i18n.getString("model.condition.dialog.err.parent.missing"), parentsTextField);
- }
- }
-
- if (namesCheckBox.isSelected()) {
- if (namesTextField.getText().isEmpty()) {
- return new ValidationInfo(i18n.getString("model.condition.dialog.err.name.missing"), namesTextField);
- }
- }
-
- if (extensionsCheckBox.isSelected()) {
- if (extensionsTextField.getText().isEmpty()) {
- return new ValidationInfo(i18n.getString("model.condition.dialog.err.extension.missing"), extensionsTextField);
- }
- }
-
- if (mayEndWithRadioButton.isSelected() && mayEndWithRadioButton.isEnabled()) {
- if (!namesCheckBox.isSelected()) {
- return new ValidationInfo(i18n.getString("model.condition.dialog.err.names.checkbox.if.may.end"), namesCheckBox);
- }
- }
-
- if (facetsCheckBox.isSelected()) {
- if (facetsTextField.getText().isEmpty()) {
- return new ValidationInfo(i18n.getString("model.condition.dialog.err.facet.missing"), facetsTextField);
- }
- }
-
- if (!getModelConditionFromInput().isValid()) {
- return new ValidationInfo(i18n.getString("model.condition.dialog.err.select.at.least.one.checkbox"));
- }
-
- return null;
- }
-
- /**
- * Creates a {@link ModelCondition} object from the user input.
- */
- public ModelCondition getModelConditionFromInput() {
- ModelCondition modelCondition = new ModelCondition();
-
- if (regexCheckBox.isSelected()) {
- modelCondition.setRegex(regexTextField.getText());
- }
-
- if (parentsCheckBox.isSelected()) {
- String[] parents = parentsTextField.getText().split(FIELD_SEPARATOR);
- modelCondition.setParents(parents);
- }
-
- if (namesCheckBox.isSelected()) {
- String[] names = namesTextField.getText().split(FIELD_SEPARATOR);
- if (startsWithRadioButton.isSelected()) {
- modelCondition.setStart(names);
- if (noDotCheckBox.isSelected()) {
- modelCondition.setNoDot();
- }
- } else {
- modelCondition.setEq(names);
- }
- }
-
- if (extensionsCheckBox.isSelected()) {
- String[] extensions = extensionsTextField.getText().split(FIELD_SEPARATOR);
- if (mayEndWithRadioButton.isSelected()) {
- modelCondition.setMayEnd(extensions);
- } else {
- modelCondition.setEnd(extensions);
- }
- }
-
- if (facetsCheckBox.isSelected()) {
- String[] facets = facetsTextField.getText().toLowerCase().split(FIELD_SEPARATOR);
- modelCondition.setFacets(facets);
- }
-
- return modelCondition;
- }
-
- /**
- * Sets a condition that can be edited using this dialog.
- */
- public void setCondition(ModelCondition modelCondition) {
- setTitle(i18n.getString("model.condition.dialog.edit.condition.title"));
-
- if (modelCondition.hasRegex()) {
- regexCheckBox.setSelected(true);
- regexTextField.setText(modelCondition.getRegex());
- }
-
- if (modelCondition.hasCheckParent()) {
- parentsCheckBox.setSelected(true);
- parentsTextField.setText(String.join(FIELD_SEPARATOR, modelCondition.getParents()));
- }
-
- if (modelCondition.hasStart() || modelCondition.hasEq()) {
- namesCheckBox.setSelected(true);
- namesTextField.setText(String.join(FIELD_SEPARATOR, modelCondition.getNames()));
- startsWithRadioButton.setSelected(modelCondition.hasStart());
- noDotCheckBox.setSelected(modelCondition.hasNoDot());
- equalsRadioButton.setSelected(modelCondition.hasEq());
- }
-
- if (modelCondition.hasEnd() || modelCondition.hasMayEnd()) {
- extensionsCheckBox.setSelected(true);
- extensionsTextField.setText(String.join(FIELD_SEPARATOR, modelCondition.getExtensions()));
- endsWithRadioButton.setSelected(modelCondition.hasEnd());
- mayEndWithRadioButton.setSelected(modelCondition.hasMayEnd());
- }
-
- if (modelCondition.hasFacets()) {
- facetsCheckBox.setSelected(true);
- facetsTextField.setText(String.join(FIELD_SEPARATOR, modelCondition.getFacets()));
- }
- }
-
- /**
- * Tries to compile a given regex and returns an exception if it failed.
- */
- @Nullable
- private PatternSyntaxException tryCompileRegex(String regex) {
- try {
- Pattern.compile(regex);
- return null;
- } catch (PatternSyntaxException ex) {
- return ex;
- }
- }
-}
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelDialog.form b/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelDialog.form
deleted file mode 100644
index a8a77489..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelDialog.form
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
diff --git a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelDialog.java b/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelDialog.java
deleted file mode 100644
index c8c236a4..00000000
--- a/src/main/java/lermitage/intellij/extra/icons/cfg/dialogs/ModelDialog.java
+++ /dev/null
@@ -1,497 +0,0 @@
-// SPDX-License-Identifier: MIT
-
-package lermitage.intellij.extra.icons.cfg.dialogs;
-
-import com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder;
-import com.intellij.openapi.actionSystem.ex.ActionUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.DialogWrapper;
-import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.ui.ValidationInfo;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.vfs.VirtualFileManager;
-import com.intellij.ui.CheckBoxList;
-import com.intellij.ui.ComboboxSpeedSearch;
-import com.intellij.ui.JBColor;
-import com.intellij.ui.ListUtil;
-import com.intellij.ui.ToolbarDecorator;
-import com.intellij.ui.components.JBLabel;
-import com.intellij.ui.components.JBTextField;
-import com.intellij.util.IconUtil;
-import lermitage.intellij.extra.icons.ExtraIconProvider;
-import lermitage.intellij.extra.icons.Globals;
-import lermitage.intellij.extra.icons.IconType;
-import lermitage.intellij.extra.icons.Model;
-import lermitage.intellij.extra.icons.ModelCondition;
-import lermitage.intellij.extra.icons.ModelType;
-import lermitage.intellij.extra.icons.cfg.SettingsForm;
-import lermitage.intellij.extra.icons.cfg.services.SettingsIDEService;
-import lermitage.intellij.extra.icons.utils.BundledIcon;
-import lermitage.intellij.extra.icons.utils.ComboBoxWithImageRenderer;
-import lermitage.intellij.extra.icons.utils.FileChooserUtils;
-import lermitage.intellij.extra.icons.utils.I18nUtils;
-import lermitage.intellij.extra.icons.utils.IconUtils;
-import lermitage.intellij.extra.icons.utils.ProjectUtils;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.SwingUtilities;
-import javax.swing.border.LineBorder;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import java.awt.BorderLayout;
-import java.awt.Cursor;
-import java.awt.Desktop;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ItemEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.net.URI;
-import java.nio.file.Path;
-import java.text.MessageFormat;
-import java.util.Collections;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.ResourceBundle;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
-import static lermitage.intellij.extra.icons.cfg.dialogs.ModelConditionDialog.FIELD_SEPARATOR;
-
-public class ModelDialog extends DialogWrapper {
-
- private final SettingsForm settingsForm;
- private final Project project;
-
- private CheckBoxList conditionsCheckboxList;
- private JPanel pane;
- private JBTextField modelIDField;
- private JBTextField descriptionField;
- private JComboBox typeComboBox;
- private JLabel iconLabel;
- private JButton chooseIconButton;
- private JPanel conditionsPanel;
- private JBLabel idLabel;
- private JComboBox