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)