Skip to content

Commit

Permalink
Tool versioning
Browse files Browse the repository at this point in the history
  • Loading branch information
ellizio committed Apr 26, 2024
1 parent 46d5094 commit bf7e349
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 22 deletions.
11 changes: 8 additions & 3 deletions protocol/src/main/kotlin/model/rider/ProtocolModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,14 @@ import com.jetbrains.rider.model.nova.ide.SolutionModel

@Suppress("unused")
object ProtocolModel : Ext(SolutionModel.Solution) {
private val CliTool = structdef {
private val DotnetToolVersionDefinition = structdef {
field("major", PredefinedType.int)
field("minor", PredefinedType.int)
field("patch", PredefinedType.int)
}
private val DotnetToolDefinition = structdef {
field("installed", PredefinedType.bool)
field("version", PredefinedType.string.nullable)
field("version", DotnetToolVersionDefinition.nullable)
}

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

init {
call("getODataCliTool", PredefinedType.void, CliTool)
call("getODataCliTool", PredefinedType.void, DotnetToolDefinition)
call("addEmbeddedResource", EmbeddedResourceDefinition, PredefinedType.void)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
namespace ReSharperPlugin.ODataCliUi;

[SolutionComponent]
public class Tracker
public class DotnetToolsTracker
{
private readonly JetFastSemiReenterableRWLock _lock = new();
private readonly Lifetime _lifetime;
private readonly SolutionDotnetToolsTracker _dotnetToolsTracker;

public event Action<DotNetToolCache> DotNetToolCacheChanged;
public event Action<DotNetToolCache> DotnetToolsCacheChanged;

public Tracker(Lifetime lifetime, SolutionDotnetToolsTracker dotnetToolsTracker)
public DotnetToolsTracker(Lifetime lifetime, SolutionDotnetToolsTracker dotnetToolsTracker)
{
_lifetime = lifetime;
_dotnetToolsTracker = dotnetToolsTracker;
Expand All @@ -30,7 +30,7 @@ public void Start()
using var _ = _lock.UsingWriteLock();
var cache = args.New;
DotNetToolCacheChanged?.Invoke(cache);
DotnetToolsCacheChanged?.Invoke(cache);
});
}
}
24 changes: 12 additions & 12 deletions src/dotnet/ReSharperPlugin.ODataCliUi/PluginHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,20 @@ namespace ReSharperPlugin.ODataCliUi;
public sealed class PluginHost : IDisposable
{
private readonly ISolution _solution;
private readonly Tracker _tracker;
private readonly DotnetToolsTracker _dotnetToolsTracker;

private CliTool _odataCliTool;
private DotnetToolDefinition _odataCliTool;

public PluginHost(ISolution solution, Tracker tracker)
public PluginHost(ISolution solution, DotnetToolsTracker dotnetToolsTracker)
{
_solution = solution;
var protocolModel = solution.GetProtocolSolution().GetProtocolModel();
protocolModel.GetODataCliTool.SetSync(GetODataCliTool);
protocolModel.AddEmbeddedResource.SetVoidAsync(AddEmbeddedResourceAsync);

_tracker = tracker;
tracker.DotNetToolCacheChanged += OnDotNetToolCacheChanged;
tracker.Start();
_dotnetToolsTracker = dotnetToolsTracker;
dotnetToolsTracker.DotnetToolsCacheChanged += OnDotnetToolsCacheChanged;
dotnetToolsTracker.Start();
}

private Task AddEmbeddedResourceAsync(Lifetime lifetime, EmbeddedResourceDefinition definition)
Expand All @@ -46,21 +46,21 @@ private Task AddEmbeddedResourceAsync(Lifetime lifetime, EmbeddedResourceDefinit
return Task.CompletedTask;
}

private CliTool GetODataCliTool(Lifetime lifetime, Unit unit) => _odataCliTool;
private DotnetToolDefinition GetODataCliTool(Lifetime lifetime, Unit unit) => _odataCliTool;

private void OnDotNetToolCacheChanged(DotNetToolCache cache)
private void OnDotnetToolsCacheChanged(DotNetToolCache cache)
{
var tool = cache.ToolGlobalCache.GetGlobalTool(Constants.MicrosoftODataCliPackageId)?.FirstOrDefault();
_odataCliTool = tool is null
? _odataCliTool = new CliTool(false, null)
: _odataCliTool = new CliTool(true, $"Global, {tool.Version}");
? _odataCliTool = new DotnetToolDefinition(false, null)
: _odataCliTool = new DotnetToolDefinition(true, new DotnetToolVersionDefinition(tool.Version.Major, tool.Version.Minor, tool.Version.Patch));
}

public void Dispose()
{
if (_tracker is not null)
if (_dotnetToolsTracker is not null)
{
_tracker.DotNetToolCacheChanged -= OnDotNetToolCacheChanged;
_dotnetToolsTracker.DotnetToolsCacheChanged -= OnDotnetToolsCacheChanged;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.intellij.ui.dsl.builder.*
import ru.ellizio.odatacliui.Constants
import ru.ellizio.odatacliui.UiBundle
import ru.ellizio.odatacliui.extensions.emptyText
import ru.ellizio.odatacliui.extensions.humanize
import ru.ellizio.odatacliui.models.CliDialogModel
import javax.swing.JComponent

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

val version = if (!model.odataCliTool.installed) UiBundle.text("cli.cli-version.label-value.not-installed")
else "${UiBundle.text("cli.cli-version.label-value.global")}, ${model.odataCliTool.version?.humanize()}"

return panel {
row {
label(model.odataCliTool.version ?: UiBundle.text("cli.cli-version.label-value.not-installed"))
label(version)
.label(UiBundle.text("cli.cli-version.label"))
.comment(UiBundle.text("cli.cli-version.comment"))
}.bottomGap(BottomGap.SMALL)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ru.ellizio.odatacliui.extensions

import com.jetbrains.rd.ide.model.DotnetToolVersionDefinition

fun DotnetToolVersionDefinition.humanize() : String = "$major.$minor.$patch"
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package ru.ellizio.odatacliui.models

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

val odataCliTool: CliTool
val odataCliTool: DotnetToolDefinition
val dotnetCliPath: String?

init {
Expand Down
1 change: 1 addition & 0 deletions src/rider/main/resources/UiBundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ cli.tab.generation=Generation Arguments
cli.tab.request=Generation Arguments
cli.cli-version.label=OData CLI Version:
cli.cli-version.label-value.not-installed=Not installed
cli.cli-version.label-value.global=Global
cli.cli-version.comment=Not installed? Follow <a href='https://learn.microsoft.com/en-us/odata/odatacli/getting-started#install'>instruction</a>
cli.service-name.row=Service name:
cli.metadata-source.row=Metadata source:
Expand Down

0 comments on commit bf7e349

Please sign in to comment.