Skip to content

Fix NullReferenceException when searching in Package Manager#17081

Closed
zeusongit with Copilot wants to merge 3 commits into
masterfrom
copilot/fix-package-manager-search-issue
Closed

Fix NullReferenceException when searching in Package Manager#17081
zeusongit with Copilot wants to merge 3 commits into
masterfrom
copilot/fix-package-manager-search-issue

Conversation

Copilot AI commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

Typing in the Package Manager search box throws an unhandled NullReferenceException in certain host environments (e.g., Dynamo for Civil 3D) where the Lucene index fails to initialize, leaving LuceneSearch.LuceneUtilityPackageManager as null.

Root causes

1. Null dereference in LuceneSearchUtility.InitializeLuceneConfig()

When UserDataDirectory does not exist on disk, luceneUserDataFolder is set to null and immediately dereferenced:

// Before
luceneUserDataFolder = userDataDir.Exists ? userDataDir : null;
string indexPath = Path.Combine(luceneUserDataFolder.FullName, ...); // NullReferenceException

This causes the LuceneSearchUtility constructor to throw, so LuceneUtilityPackageManager is never assigned.

2. No null guard in PackageManagerSearchViewModel.Search()

With LuceneUtility null, accessing LuceneUtility.dirReader throws on every keystroke.

Changes

  • LuceneSearchUtility.InitializeLuceneConfig() — Use userDataDir.FullName directly; FSDirectory.Open creates the path as needed.
  • PackageManagerSearchViewModel.Search() — Add null guard on LuceneUtility; fall back to GetAllPackages() if Lucene is unavailable.
  • New test Search_WhenLuceneUtilityIsNull_ReturnsAllPackagesWithoutThrowing — Validates the null guard by forcing LuceneUtilityPackageManager = null post-construction and asserting no exception is thrown.

Copilot AI and others added 2 commits April 28, 2026 15:28
…ty is null

Root causes:
1. LuceneSearchUtility.InitializeLuceneConfig() dereferenced a null luceneUserDataFolder
   when the user data directory did not exist, causing LuceneSearchUtility constructor
   to fail and LuceneUtilityPackageManager to remain null.
2. PackageManagerSearchViewModel.Search() had no null guard for LuceneUtility.

Fixes:
1. Remove unnecessary null-assignment; use userDataDir.FullName directly.
2. Add null guard in Search() that falls back to GetAllPackages() when LuceneUtility is null.
3. Add test verifying Search() handles null LuceneUtility without throwing.

Agent-Logs-Url: https://github.com/DynamoDS/Dynamo/sessions/4541d380-1d27-4b81-9c54-469763ce1dfe

Co-authored-by: zeusongit <32665108+zeusongit@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix unhandled exception in package manager search Fix NullReferenceException when searching in Package Manager Apr 28, 2026
Copilot AI requested a review from zeusongit April 28, 2026 15:32
@sonarqubecloud

Copy link
Copy Markdown

var userDataDir = new DirectoryInfo(dynamoModel.PathManager.UserDataDirectory);
luceneUserDataFolder = userDataDir.Exists ? userDataDir : null;
string indexPath = Path.Combine(luceneUserDataFolder.FullName, LuceneConfig.Index, startConfig.Directory);
string indexPath = Path.Combine(userDataDir.FullName, LuceneConfig.Index, startConfig.Directory);
@zeusongit

Copy link
Copy Markdown
Contributor

@RobertGlobant20 I think this is a deeper problem with Civil3D as host related to the recent change, please take a look at the linked issue and PR analysis.

@zeusongit zeusongit closed this Apr 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Can't search for packages in package manager

2 participants