From 8b3f016145c2c2d34d642d8a1f80cf670f046a93 Mon Sep 17 00:00:00 2001 From: Matt Ellis Date: Mon, 9 Dec 2019 14:13:57 +0000 Subject: [PATCH 1/4] Make CSS an optional dependency Fixes RIDER-36523 --- .../unity/ui/UssDisabledEditorNotification.kt | 51 +++++++++++++++++++ .../plugins/unity/util/FileExtensions.kt | 3 +- .../META-INF/PluginCssPluginPart.xml | 17 +++++++ rider/src/main/resources/META-INF/plugin.xml | 13 ++--- 4 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ui/UssDisabledEditorNotification.kt create mode 100644 rider/src/main/resources/META-INF/PluginCssPluginPart.xml diff --git a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ui/UssDisabledEditorNotification.kt b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ui/UssDisabledEditorNotification.kt new file mode 100644 index 0000000000..c2b644c429 --- /dev/null +++ b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ui/UssDisabledEditorNotification.kt @@ -0,0 +1,51 @@ +package com.jetbrains.rider.plugins.unity.ui + +import com.intellij.ide.plugins.PluginManager +import com.intellij.ide.plugins.PluginManagerMain +import com.intellij.ide.util.PropertiesComponent +import com.intellij.openapi.fileEditor.FileEditor +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.Key +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.ui.EditorNotificationPanel +import com.intellij.ui.EditorNotifications +import com.jetbrains.rider.isUnityProject +import com.jetbrains.rider.plugins.unity.util.isUssFile + +class UssDisabledEditorNotification: EditorNotifications.Provider() { + + companion object { + private val KEY = Key.create("unity.uss.css.plugin.disabled.notification.panel") + private const val DO_NOT_SHOW_AGAIN_KEY = "unity.uss.css.plugin.disabled.do.not.show" + private const val CSS_PLUGIN_ID = "com.intellij.css" + } + + override fun getKey(): Key = KEY + + override fun createNotificationPanel(file: VirtualFile, fileEditor: FileEditor, project: Project): EditorNotificationPanel? { + if (project.isUnityProject() && isUssFile(file) && PluginManager.isDisabled(CSS_PLUGIN_ID)) { + if (PropertiesComponent.getInstance(project).getBoolean(DO_NOT_SHOW_AGAIN_KEY, false)) { + return null + } + + val panel = EditorNotificationPanel() + panel.text("USS support requires the CSS plugin to be enabled") + panel.createActionLabel("Enable CSS plugin") { + // TODO: Maybe in 2020.1 we can do this dynamically without restart? + // That would require enabling the CSS plugin dynamically, and then enabling our PluginCssPart.xml part + // dynamically, too + PluginManager.enablePlugin(CSS_PLUGIN_ID) + PluginManagerMain.notifyPluginsUpdated(project) + EditorNotifications.getInstance(project).updateAllNotifications() + } + panel.createActionLabel("Don't show again") { + // Project level - do not show again for this project + PropertiesComponent.getInstance(project).setValue(DO_NOT_SHOW_AGAIN_KEY, true) + EditorNotifications.getInstance(project).updateAllNotifications() + } + return panel + } + + return null + } +} \ No newline at end of file diff --git a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/FileExtensions.kt b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/FileExtensions.kt index 4c63d1bb4f..71a37f5373 100644 --- a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/FileExtensions.kt +++ b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/FileExtensions.kt @@ -52,4 +52,5 @@ fun isGeneratedUnityFile(file: VirtualFile): Boolean { return extension.equals("csproj", true) || extension.equals("sln", true) } -fun isUxmlFile(file: VirtualFile) = file.extension.equals("uxml", true) \ No newline at end of file +fun isUxmlFile(file: VirtualFile) = file.extension.equals("uxml", true) +fun isUssFile(file: VirtualFile) = file.extension.equals("uss", true) diff --git a/rider/src/main/resources/META-INF/PluginCssPluginPart.xml b/rider/src/main/resources/META-INF/PluginCssPluginPart.xml new file mode 100644 index 0000000000..e17fa1a856 --- /dev/null +++ b/rider/src/main/resources/META-INF/PluginCssPluginPart.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + diff --git a/rider/src/main/resources/META-INF/plugin.xml b/rider/src/main/resources/META-INF/plugin.xml index 7f876a8d18..5247df3714 100644 --- a/rider/src/main/resources/META-INF/plugin.xml +++ b/rider/src/main/resources/META-INF/plugin.xml @@ -5,9 +5,9 @@ JetBrains com.intellij.modules.rider - com.intellij.css org.jetbrains.plugins.yaml rider.intellij.plugin.appender + com.intellij.css @@ -78,17 +78,10 @@ + - - - - - - - - - + From 69638d213a735296cd741febf2c026f2fb63725e Mon Sep 17 00:00:00 2001 From: Matt Ellis Date: Mon, 9 Dec 2019 14:35:28 +0000 Subject: [PATCH 2/4] Add USS and UXML file icons --- .../ideaInterop/fileTypes/uss/UssFileType.kt | 2 +- .../fileTypes/uxml/UxmlFileType.kt | 2 +- rider/src/main/kotlin/icons/UnityIcons.kt | 6 ++++- .../main/resources/Icons/fileTypes/uss.svg | 22 +++++++++++++++++++ .../main/resources/Icons/fileTypes/uxml.svg | 6 +++++ 5 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 rider/src/main/resources/Icons/fileTypes/uss.svg create mode 100644 rider/src/main/resources/Icons/fileTypes/uxml.svg diff --git a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ideaInterop/fileTypes/uss/UssFileType.kt b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ideaInterop/fileTypes/uss/UssFileType.kt index 74f5f837dc..d4417f5b2f 100644 --- a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ideaInterop/fileTypes/uss/UssFileType.kt +++ b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ideaInterop/fileTypes/uss/UssFileType.kt @@ -4,7 +4,7 @@ import com.intellij.openapi.fileTypes.LanguageFileType import icons.UnityIcons object UssFileType: LanguageFileType(UssLanguage) { - override fun getIcon() = UnityIcons.FileTypes.Asset + override fun getIcon() = UnityIcons.FileTypes.Uss override fun getName() = "USS" override fun getDefaultExtension() = "uss" override fun getDescription() = "UIElement Style Sheet File (Unity)" diff --git a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ideaInterop/fileTypes/uxml/UxmlFileType.kt b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ideaInterop/fileTypes/uxml/UxmlFileType.kt index b454571c7c..2b7c41580b 100644 --- a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ideaInterop/fileTypes/uxml/UxmlFileType.kt +++ b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ideaInterop/fileTypes/uxml/UxmlFileType.kt @@ -4,7 +4,7 @@ import com.intellij.ide.highlighter.XmlLikeFileType import icons.UnityIcons object UxmlFileType : XmlLikeFileType(UxmlLanguage) { - override fun getIcon() = UnityIcons.FileTypes.Asset + override fun getIcon() = UnityIcons.FileTypes.Uxml override fun getName() = "UXML" override fun getDefaultExtension() = "uxml" override fun getDescription() = "UIElement UXML File (Unity)" diff --git a/rider/src/main/kotlin/icons/UnityIcons.kt b/rider/src/main/kotlin/icons/UnityIcons.kt index 2251a37b0b..94037cfa22 100644 --- a/rider/src/main/kotlin/icons/UnityIcons.kt +++ b/rider/src/main/kotlin/icons/UnityIcons.kt @@ -37,11 +37,15 @@ class UnityIcons { val AsmDef = ReSharperPsiJavaScriptIcons.Json - val UnityYaml: Icon = IconLoader.getIcon("/resharper/YamlFileType/FileYaml.svg") + val UnityYaml = IconLoader.getIcon("/resharper/YamlFileType/FileYaml.svg") val UnityScene = IconLoader.getIcon("/resharper/UnityFileType/FileUnity.svg") val Meta = IconLoader.getIcon("/resharper/UnityFileType/FileUnityMeta.svg") val Asset = IconLoader.getIcon("/resharper/UnityFileType/FileUnityAsset.svg") val Prefab = IconLoader.getIcon("/resharper/UnityFileType/FileUnityPrefab.svg") + + // These are front end only file types + val Uss = IconLoader.getIcon("/Icons/fileTypes/uss.svg") + val Uxml = IconLoader.getIcon("/Icons/fileTypes/uxml.svg") } } diff --git a/rider/src/main/resources/Icons/fileTypes/uss.svg b/rider/src/main/resources/Icons/fileTypes/uss.svg new file mode 100644 index 0000000000..85519465bd --- /dev/null +++ b/rider/src/main/resources/Icons/fileTypes/uss.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/rider/src/main/resources/Icons/fileTypes/uxml.svg b/rider/src/main/resources/Icons/fileTypes/uxml.svg new file mode 100644 index 0000000000..0236173998 --- /dev/null +++ b/rider/src/main/resources/Icons/fileTypes/uxml.svg @@ -0,0 +1,6 @@ + + + + + + From 3a790aede4153e868743511d705b7c3a86e68656 Mon Sep 17 00:00:00 2001 From: Matt Ellis Date: Mon, 9 Dec 2019 14:53:45 +0000 Subject: [PATCH 3/4] Update CHANGELOG and plugin metadata --- CHANGELOG.md | 17 ++++++- rider/src/main/resources/META-INF/plugin.xml | 48 ++------------------ 2 files changed, 19 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76b61a6c91..c8e132539e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0). This plugin has functionality that is common to both ReSharper and Rider. It also contains a plugin for the Unity editor that is used to communicate with Rider. Changes marked with a "Rider:" prefix are specific to Rider, while changes for the Unity editor plugin are marked with a "Unity editor:" prefix. No prefix means that the change is common to both Rider and ReSharper. +## 2019.3.1 +* [Commits](https://github.com/JetBrains/resharper-unity/compare/net193-eap7-rtm-2019.3.0...net193) +* [Milestone](https://github.com/JetBrains/resharper-unity/milestone/33?closed=1) + +### Added + +- Added proper file icons for `*.uxml` and `*.uss` ([RIDER-34788](https://youtrack.jetbrains.com/issue/RIDER-34788), [#1443](https://github.com/JetBrains/resharper-unity/pull/1443)) + +### Changed + +- Entire plugin is no longer disabled if the CSS plugin is disabled ([RIDER-36523](https://youtrack.jetbrains.com/issue/RIDER-36523), [#1443](https://github.com/JetBrains/resharper-unity/pull/1443)) + + + ## 2019.3 -* [Commits](https://github.com/JetBrains/resharper-unity/compare/192...net193) +* [Commits](https://github.com/JetBrains/resharper-unity/compare/192...net193-eap7-rtm-2019.3.0) * [Milestone](https://github.com/JetBrains/resharper-unity/milestone/29?closed=1) ### Added @@ -51,6 +65,7 @@ This plugin has functionality that is common to both ReSharper and Rider. It als - Fix orphan `.meta` file during "Safe Delete" refactoring ([#856](https://github.com/JetBrains/resharper-unity/issues/856), [#1389](https://github.com/JetBrains/resharper-unity/pull/1389)) - Fix correctly keeping `.meta` files up to date in `Packages` folder ([#1231](https://github.com/JetBrains/resharper-unity/issues/1231), [#1389](https://github.com/JetBrains/resharper-unity/pull/1389)) - Fix "Add RequireComponent" context action to correctly add second attribute ([#RIDER-34390](https://youtrack.jetbrains.com/issue/RIDER-34390), [#1416](https://github.com/JetBrains/resharper-unity/pull/1416]) +- Fix issues with ordering of multiplication of vector multiplication ([RIDER-33981](https://youtrack.jetbrains.com/issue/RIDER-33981), [RIDER-32798](https://youtrack.jetbrains.com/issue/RIDER-32798), [RIDER-32851](https://youtrack.jetbrains.com/issue/RIDER-32851), [#1168](https://github.com/JetBrains/resharper-unity/issues/1168), [#1428](https://github.com/JetBrains/resharper-unity/pull/1428)) - Rider: Fix race condition preventing "Attach to Unity Process" dialog from always listing players ([RIDER-34039](https://youtrack.jetbrains.com/issue/RIDER-34039), [#1298](https://github.com/JetBrains/resharper-unity/pull/1298)) - Rider: Prevent "Attach to Unity Process" attempting to attach to the same process multiple times ([#1129](https://github.com/JetBrains/resharper-unity/issues/1129), [#1298](https://github.com/JetBrains/resharper-unity/pull/1298)) - Rider: Fix show usages on Code Vision link for auto property event handlers ([#1142](https://github.com/JetBrains/resharper-unity/pull/1142)) diff --git a/rider/src/main/resources/META-INF/plugin.xml b/rider/src/main/resources/META-INF/plugin.xml index 5247df3714..22086b88ad 100644 --- a/rider/src/main/resources/META-INF/plugin.xml +++ b/rider/src/main/resources/META-INF/plugin.xml @@ -262,56 +262,14 @@ -New in 2019.3 +New in 2019.3.1 Added:
    -
  • Update API information to 2019.3.0b11 (#1412)
  • -
  • Methods with the [SettingsProvider] attribute are now marked as implicitly used (#1225, #1362)
  • -
  • Support Find Usages on UnityEvent based event handlers (#1142)
  • -
  • Add context action for creating method from unresolved string literal in StartCoroutine and StopCoroutine (RIDER-27707, #1416)
  • -
  • Rider: Add support for play mode tests (RIDER-19513, #1293)
  • -
  • Rider: Add code coverage and continuous testing for Unity tests (#1410)
  • -
  • Rider: Add syntax highlighting, schema generation and validation of UXML files (#1399)>
  • -
  • Rider: Add syntax highlighting, validation and completion for USS files (#957, RIDER-20576, #1402)
  • -
  • Rider: Add Unity performance options to new inspection control panel (#1408)
  • -
  • Rider: Show prompt to set Rider as default external editor when Unity is started by Rider (#1127), #1270)
  • -
  • Rider: Show prompt for Linux users to install Mono 5.16+ (#1375, #1383)
  • -
  • Rider: Show prompt if currently selected external editor does not match current Rider (RIDER-35297, #1409)
  • -
  • Rider: Add Unity specific Live Templates settings page (#1351)
  • -
  • Rider: Add project name to "Attach to Unity Process" and "Attach to Unity Editor" run configuration dialogs (#1009, RIDER-31184, #1298)
  • -
  • Rider: Add support for Clear on Play now in Rider's Unity log viewer (#1281, #1294)
  • -
  • Unity Editor: Bring Unity Editor to foreground when Rider is showing Unity asset usages (#1344)
  • +
  • Add proper file icons for *.uxml and *.uss files (RIDER-34788, #1443)
Changed:
    -
  • Improve performance parsing YAML scenes (#1408)
  • -
  • Rider: Return support for .asmdef files (RIDER-30018, #1373)
  • -
  • Rider: Improve UX of "Attach to Unity Process" dialog (#1278, #1298)
  • -
  • Rider: Improve display of count of merged log items (#1296, #1301)
  • -
  • Rider: Status bar icon will show when Unity Editor is paused (#1227, #1301)
  • -
  • Rider: Show Unity actions toolbar when opening a folder without a solution, to make it easy to launch Unity (#1325)
  • -
  • Rider: Show asset usage count on property setter and UnityEvent based event handlers (#1142)
  • -
  • Rider: Support Find Usages and show asset usage count for UnityEvent based event handlers (#1142)
  • -
  • Unity Editor: Use new 2019.2 API to open Rider at correct column as well as line (requires Rider package 1.1.0+) (#888)
  • -
  • Unity Editor: Don't create EditorInstance.json for Unity 2017.1+, since it does it itself (#1356)
  • -
  • Unity Editor: Reduce size of pre-compiled editor plugin for Unity 20192.2+ to help AppDomain restart performance (#1367, #1390)
  • -
-Fixed: -
    -
  • Fix overridden Update methods not acting as performance critical context (RIDER-33934, #1408)
  • -
  • Fix Quick Fix incorrectly converting LinecastAll to CapsuleCastNonAlloc instead of LinecastNonAlloc (#1324, RIDER-33443, #1408)
  • -
  • Fix finding usages of methods used as event handler from prefab (#1331, #1408)
  • -
  • Fix moving .meta file during "Move to Folder" refactoring (#1370, #1389)
  • -
  • Fix orphan .meta file during "Safe Delete" refactoring (#856, #1389)
  • -
  • Fix correctly keeping .meta files up to date in Packages folder (#1231, #1389)
  • -
  • Fix "Add RequireComponent" context action to correctly add second attribute (RIDER-34390, #1416)
  • -
  • Rider: Fix race condition preventing "Attach to Unity Process" dialog from always listing players (RIDER-34039, #1298)
  • -
  • Rider: Prevent "Attach to Unity Process" attempting to attach to the same process multiple times (#1129, #1298)
  • -
  • Rider: Fix show usages on Code Vision link for auto property event handlers (#1142)
  • -
  • Rider: Work around Unity bug failing to send log events after leaving play mode (#1414)
  • -
  • Unity Editor: Stop suggesting C# 8 features when using a new msbuild from Mono (#1379, #1380)
  • -
  • Unity Editor: Avoid all initialisation when started in batch mode (#1396)
  • -
  • Unity Editor: Fix exception calling EditorApplication.isPlaying on wrong thread (#1308)
  • +
  • Entire plugin is no longer disabled if the CSS plugin is disabled (RIDER-36523, #1443)

See the CHANGELOG for more details and history.

From b6a386544ef6222f8b69454c0342b5ace3edb8ca Mon Sep 17 00:00:00 2001 From: Matt Ellis Date: Mon, 9 Dec 2019 16:19:41 +0000 Subject: [PATCH 4/4] Use the registry instead of file extension --- .../unity/ui/UssDisabledEditorNotification.kt | 2 ++ .../rider/plugins/unity/util/FileExtensions.kt | 13 +++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ui/UssDisabledEditorNotification.kt b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ui/UssDisabledEditorNotification.kt index c2b644c429..24c93a33af 100644 --- a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ui/UssDisabledEditorNotification.kt +++ b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/ui/UssDisabledEditorNotification.kt @@ -4,12 +4,14 @@ import com.intellij.ide.plugins.PluginManager import com.intellij.ide.plugins.PluginManagerMain import com.intellij.ide.util.PropertiesComponent import com.intellij.openapi.fileEditor.FileEditor +import com.intellij.openapi.fileTypes.FileTypeRegistry import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key import com.intellij.openapi.vfs.VirtualFile import com.intellij.ui.EditorNotificationPanel import com.intellij.ui.EditorNotifications import com.jetbrains.rider.isUnityProject +import com.jetbrains.rider.plugins.unity.ideaInterop.fileTypes.uss.UssFileType import com.jetbrains.rider.plugins.unity.util.isUssFile class UssDisabledEditorNotification: EditorNotifications.Provider() { diff --git a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/FileExtensions.kt b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/FileExtensions.kt index 71a37f5373..e6c67d1a4c 100644 --- a/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/FileExtensions.kt +++ b/rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/FileExtensions.kt @@ -1,7 +1,12 @@ package com.jetbrains.rider.plugins.unity.util +import com.intellij.openapi.fileTypes.FileTypeRegistry import com.intellij.openapi.vfs.VirtualFile import com.intellij.util.text.CaseInsensitiveStringHashingStrategy +import com.jetbrains.rider.ideaInterop.fileTypes.msbuild.CsprojFileType +import com.jetbrains.rider.ideaInterop.fileTypes.sln.SolutionFileType +import com.jetbrains.rider.plugins.unity.ideaInterop.fileTypes.uss.UssFileType +import com.jetbrains.rider.plugins.unity.ideaInterop.fileTypes.uxml.UxmlFileType import gnu.trove.THashSet private val nonEditableExtensions = getExtensions() @@ -48,9 +53,9 @@ fun isNonEditableUnityFileExtension(extension: String?): Boolean { } fun isGeneratedUnityFile(file: VirtualFile): Boolean { - val extension = file.extension - return extension.equals("csproj", true) || extension.equals("sln", true) + val fileTypeRegistry = FileTypeRegistry.getInstance() + return fileTypeRegistry.isFileOfType(file, CsprojFileType) || fileTypeRegistry.isFileOfType(file, SolutionFileType) } -fun isUxmlFile(file: VirtualFile) = file.extension.equals("uxml", true) -fun isUssFile(file: VirtualFile) = file.extension.equals("uss", true) +fun isUxmlFile(file: VirtualFile) = FileTypeRegistry.getInstance().isFileOfType(file, UxmlFileType) +fun isUssFile(file: VirtualFile) = FileTypeRegistry.getInstance().isFileOfType(file, UssFileType)