Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions Editor/VisualStudioEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,11 @@ static VisualStudioEditor()
[InitializeOnLoadMethod]
static void LegacyVisualStudioCodePackageDisabler()
{
// disable legacy Visual Studio Code packages
#if UNITY_2021_1_OR_NEWER
var editor = CodeEditor.Editor.GetCodeEditorForPath("code.cmd");
#else
var editor = CodeEditor.CurrentEditor;
#endif
if (editor == null)
return;

Expand Down Expand Up @@ -138,7 +141,7 @@ public void OnGUI()
var newReuseWindow = EditorGUILayout.Toggle(new GUIContent("Reuse existing Cursor window", "When enabled, opens files in an existing Cursor window if found. When disabled, always opens a new window."), reuseWindow);
if (newReuseWindow != reuseWindow)
EditorPrefs.SetBool(VisualStudioCursorInstallation.ReuseExistingWindowKey, newReuseWindow);

EditorGUILayout.Space();
}

Expand Down Expand Up @@ -226,7 +229,9 @@ public bool OpenProject(string path, int line, int column)
{
var editorPath = CodeEditor.CurrentEditorInstallation;

if (!Discovery.TryDiscoverInstallation(editorPath, out var installation)) {
// Performance optimization: Use cached installation lookup instead of discovering every time
if (!TryGetVisualStudioInstallationForPath(editorPath, lookupDiscoveredInstallations: true, out var installation))
{
Debug.LogWarning($"Visual Studio executable {editorPath} is not found. Please change your settings in Edit > Preferences > External Tools.");
return false;
}
Expand All @@ -238,7 +243,8 @@ public bool OpenProject(string path, int line, int column)
if (!IsProjectGeneratedFor(path, generator, out var missingFlag))
Debug.LogWarning($"You are trying to open {path} outside a generated project. This might cause problems with IntelliSense and debugging. To avoid this, you can change your .csproj preferences in Edit > Preferences > External Tools and enable {GetProjectGenerationFlagDescription(missingFlag)} generation.");

var solution = GetOrGenerateSolutionFile(generator);
// Performance optimization: Only sync if solution doesn't exist
var solution = GetOrGenerateSolutionFileIfNeeded(generator);
return installation.Open(path, line, column, solution);
}

Expand Down Expand Up @@ -307,5 +313,15 @@ private static string GetOrGenerateSolutionFile(IGenerator generator)
generator.Sync();
return generator.SolutionFile();
}

// Performance optimization: Only sync if solution file doesn't exist
private static string GetOrGenerateSolutionFileIfNeeded(IGenerator generator)
{
if (!generator.HasSolutionBeenGenerated())
{
generator.Sync();
}
return generator.SolutionFile();
}
}
}