Skip to content

Commit 38d5c4a

Browse files
authored
Tool versioning (#19)
2 parents cde9fa1 + 2e6800a commit 38d5c4a

File tree

7 files changed

+37
-22
lines changed

7 files changed

+37
-22
lines changed

protocol/src/main/kotlin/model/rider/ProtocolModel.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@ import com.jetbrains.rider.model.nova.ide.SolutionModel
55

66
@Suppress("unused")
77
object ProtocolModel : Ext(SolutionModel.Solution) {
8-
private val CliTool = structdef {
8+
private val DotnetToolVersionDefinition = structdef {
9+
field("major", PredefinedType.int)
10+
field("minor", PredefinedType.int)
11+
field("patch", PredefinedType.int)
12+
}
13+
private val DotnetToolDefinition = structdef {
914
field("installed", PredefinedType.bool)
10-
field("version", PredefinedType.string.nullable)
15+
field("version", DotnetToolVersionDefinition.nullable)
1116
}
1217

1318
private val EmbeddedResourceDefinition = structdef {
@@ -16,7 +21,7 @@ object ProtocolModel : Ext(SolutionModel.Solution) {
1621
}
1722

1823
init {
19-
call("getODataCliTool", PredefinedType.void, CliTool)
24+
call("getODataCliTool", PredefinedType.void, DotnetToolDefinition)
2025
call("addEmbeddedResource", EmbeddedResourceDefinition, PredefinedType.void)
2126
}
2227
}

src/dotnet/ReSharperPlugin.ODataCliUi/Tracker.cs renamed to src/dotnet/ReSharperPlugin.ODataCliUi/DotnetToolsTracker.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
namespace ReSharperPlugin.ODataCliUi;
88

99
[SolutionComponent]
10-
public class Tracker
10+
public class DotnetToolsTracker
1111
{
1212
private readonly JetFastSemiReenterableRWLock _lock = new();
1313
private readonly Lifetime _lifetime;
1414
private readonly SolutionDotnetToolsTracker _dotnetToolsTracker;
1515

16-
public event Action<DotNetToolCache> DotNetToolCacheChanged;
16+
public event Action<DotNetToolCache> DotnetToolsCacheChanged;
1717

18-
public Tracker(Lifetime lifetime, SolutionDotnetToolsTracker dotnetToolsTracker)
18+
public DotnetToolsTracker(Lifetime lifetime, SolutionDotnetToolsTracker dotnetToolsTracker)
1919
{
2020
_lifetime = lifetime;
2121
_dotnetToolsTracker = dotnetToolsTracker;
@@ -30,7 +30,7 @@ public void Start()
3030

3131
using var _ = _lock.UsingWriteLock();
3232
var cache = args.New;
33-
DotNetToolCacheChanged?.Invoke(cache);
33+
DotnetToolsCacheChanged?.Invoke(cache);
3434
});
3535
}
3636
}

src/dotnet/ReSharperPlugin.ODataCliUi/PluginHost.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@ namespace ReSharperPlugin.ODataCliUi;
1616
public sealed class PluginHost : IDisposable
1717
{
1818
private readonly ISolution _solution;
19-
private readonly Tracker _tracker;
19+
private readonly DotnetToolsTracker _dotnetToolsTracker;
2020

21-
private CliTool _odataCliTool;
21+
private DotnetToolDefinition _odataCliTool;
2222

23-
public PluginHost(ISolution solution, Tracker tracker)
23+
public PluginHost(ISolution solution, DotnetToolsTracker dotnetToolsTracker)
2424
{
2525
_solution = solution;
2626
var protocolModel = solution.GetProtocolSolution().GetProtocolModel();
2727
protocolModel.GetODataCliTool.SetSync(GetODataCliTool);
2828
protocolModel.AddEmbeddedResource.SetVoidAsync(AddEmbeddedResourceAsync);
2929

30-
_tracker = tracker;
31-
tracker.DotNetToolCacheChanged += OnDotNetToolCacheChanged;
32-
tracker.Start();
30+
_dotnetToolsTracker = dotnetToolsTracker;
31+
dotnetToolsTracker.DotnetToolsCacheChanged += OnDotnetToolsCacheChanged;
32+
dotnetToolsTracker.Start();
3333
}
3434

3535
private Task AddEmbeddedResourceAsync(Lifetime lifetime, EmbeddedResourceDefinition definition)
@@ -46,21 +46,21 @@ private Task AddEmbeddedResourceAsync(Lifetime lifetime, EmbeddedResourceDefinit
4646
return Task.CompletedTask;
4747
}
4848

49-
private CliTool GetODataCliTool(Lifetime lifetime, Unit unit) => _odataCliTool;
49+
private DotnetToolDefinition GetODataCliTool(Lifetime lifetime, Unit unit) => _odataCliTool;
5050

51-
private void OnDotNetToolCacheChanged(DotNetToolCache cache)
51+
private void OnDotnetToolsCacheChanged(DotNetToolCache cache)
5252
{
5353
var tool = cache.ToolGlobalCache.GetGlobalTool(Constants.MicrosoftODataCliPackageId)?.FirstOrDefault();
5454
_odataCliTool = tool is null
55-
? _odataCliTool = new CliTool(false, null)
56-
: _odataCliTool = new CliTool(true, $"Global, {tool.Version}");
55+
? _odataCliTool = new DotnetToolDefinition(false, null)
56+
: _odataCliTool = new DotnetToolDefinition(true, new DotnetToolVersionDefinition(tool.Version.Major, tool.Version.Minor, tool.Version.Patch));
5757
}
5858

5959
public void Dispose()
6060
{
61-
if (_tracker is not null)
61+
if (_dotnetToolsTracker is not null)
6262
{
63-
_tracker.DotNetToolCacheChanged -= OnDotNetToolCacheChanged;
63+
_dotnetToolsTracker.DotnetToolsCacheChanged -= OnDotnetToolsCacheChanged;
6464
}
6565
}
6666
}

src/rider/main/kotlin/ru/ellizio/odatacliui/dialogs/CliDialog.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.intellij.ui.dsl.builder.*
88
import ru.ellizio.odatacliui.Constants
99
import ru.ellizio.odatacliui.UiBundle
1010
import ru.ellizio.odatacliui.extensions.emptyText
11+
import ru.ellizio.odatacliui.extensions.humanize
1112
import ru.ellizio.odatacliui.models.CliDialogModel
1213
import javax.swing.JComponent
1314

@@ -47,9 +48,12 @@ class CliDialog(private val model: CliDialogModel) : DialogWrapper(false) {
4748
tabbedPane.addTab(UiBundle.text("cli.tab.generation"), generationTab)
4849
tabbedPane.addTab(UiBundle.text("cli.tab.request"), requestTab)
4950

51+
val version = if (!model.odataCliTool.installed) UiBundle.text("cli.cli-version.label-value.not-installed")
52+
else "${UiBundle.text("cli.cli-version.label-value.global")}, ${model.odataCliTool.version?.humanize()}"
53+
5054
return panel {
5155
row {
52-
label(model.odataCliTool.version ?: UiBundle.text("cli.cli-version.label-value.not-installed"))
56+
label(version)
5357
.label(UiBundle.text("cli.cli-version.label"))
5458
.comment(UiBundle.text("cli.cli-version.comment"))
5559
}.bottomGap(BottomGap.SMALL)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package ru.ellizio.odatacliui.extensions
2+
3+
import com.jetbrains.rd.ide.model.DotnetToolVersionDefinition
4+
5+
fun DotnetToolVersionDefinition.humanize() : String = "$major.$minor.$patch"

src/rider/main/kotlin/ru/ellizio/odatacliui/models/CliDialogModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package ru.ellizio.odatacliui.models
22

33
import com.intellij.execution.configurations.GeneralCommandLine
44
import com.intellij.openapi.project.Project
5-
import com.jetbrains.rd.ide.model.CliTool
5+
import com.jetbrains.rd.ide.model.DotnetToolDefinition
66
import com.jetbrains.rd.ide.model.protocolModel
77
import com.jetbrains.rider.model.dotNetActiveRuntimeModel
88
import ru.ellizio.odatacliui.Constants
@@ -21,7 +21,7 @@ private const val CSDL_NAME = "OData ServiceCsdl.xml"
2121
class CliDialogModel(project: Project, private val actionMetadata: ActionMetadata) {
2222
val validator = CliDialogModelValidator()
2323

24-
val odataCliTool: CliTool
24+
val odataCliTool: DotnetToolDefinition
2525
val dotnetCliPath: String?
2626

2727
init {

src/rider/main/resources/UiBundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ cli.tab.generation=Generation Arguments
66
cli.tab.request=Generation Arguments
77
cli.cli-version.label=OData CLI Version:
88
cli.cli-version.label-value.not-installed=Not installed
9+
cli.cli-version.label-value.global=Global
910
cli.cli-version.comment=Not installed? Follow <a href='https://learn.microsoft.com/en-us/odata/odatacli/getting-started#install'>instruction</a>
1011
cli.service-name.row=Service name:
1112
cli.metadata-source.row=Metadata source:

0 commit comments

Comments
 (0)