@@ -55,61 +55,83 @@ public AddRemoveReferencesPresenter Create(ProjectDeclaration project)
55
55
return null ;
56
56
}
57
57
58
- var refs = new Dictionary < RegisteredLibraryKey , RegisteredLibraryInfo > ( ) ;
59
- // Iterating the returned libraries here instead of just .ToDictionary() using because we can't trust that the registry doesn't contain errors.
60
- foreach ( var reference in _finder . FindRegisteredLibraries ( ) )
61
- {
62
- if ( refs . ContainsKey ( reference . UniqueId ) )
63
- {
64
- _logger . Warn ( $ "Duplicate registry definition for { reference . Guid } version { reference . Version } .") ;
65
- continue ;
66
- }
67
- refs . Add ( reference . UniqueId , reference ) ;
68
- }
58
+ AddRemoveReferencesModel model = null ;
69
59
70
- var models = new Dictionary < RegisteredLibraryKey , ReferenceModel > ( ) ;
71
- using ( var references = project . Project ? . References )
60
+ try
72
61
{
73
- if ( references is null )
62
+ Cursor . Current = Cursors . WaitCursor ;
63
+
64
+ var refs = new Dictionary < RegisteredLibraryKey , RegisteredLibraryInfo > ( ) ;
65
+ // Iterating the returned libraries here instead of just .ToDictionary() using because we can't trust that the registry doesn't contain errors.
66
+ foreach ( var reference in _finder . FindRegisteredLibraries ( ) )
74
67
{
75
- return null ;
68
+ if ( refs . ContainsKey ( reference . UniqueId ) )
69
+ {
70
+ _logger . Warn (
71
+ $ "Duplicate registry definition for { reference . Guid } version { reference . Version } .") ;
72
+ continue ;
73
+ }
74
+
75
+ refs . Add ( reference . UniqueId , reference ) ;
76
76
}
77
- var priority = 1 ;
78
- foreach ( var reference in references )
79
- {
80
- var guid = Guid . TryParse ( reference . Guid , out var result ) ? result : Guid . Empty ;
81
- var libraryId = new RegisteredLibraryKey ( guid , reference . Major , reference . Minor ) ;
82
77
83
- if ( refs . ContainsKey ( libraryId ) )
78
+ var models = new Dictionary < RegisteredLibraryKey , ReferenceModel > ( ) ;
79
+ using ( var references = project . Project ? . References )
80
+ {
81
+ if ( references is null )
84
82
{
85
- // TODO: If for some reason the VBA reference is broken, we could technically use this to repair it. Just a thought...
86
- models . Add ( libraryId , new ReferenceModel ( refs [ libraryId ] , reference , priority ++ ) ) ;
83
+ return null ;
87
84
}
88
- else // These should all be either VBA projects or irreparably broken.
85
+
86
+ var priority = 1 ;
87
+ foreach ( var reference in references )
89
88
{
90
- models . Add ( libraryId , new ReferenceModel ( reference , priority ++ ) ) ;
89
+ var guid = Guid . TryParse ( reference . Guid , out var result ) ? result : Guid . Empty ;
90
+ var libraryId = new RegisteredLibraryKey ( guid , reference . Major , reference . Minor ) ;
91
+
92
+ // TODO: If for some reason the VBA reference is broken, we could technically use this to repair it. Just a thought...
93
+ var adding = refs . ContainsKey ( libraryId )
94
+ ? new ReferenceModel ( refs [ libraryId ] , reference , priority ++ )
95
+ : new ReferenceModel ( reference , priority ++ ) ;
96
+
97
+ adding . IsUsed = adding . IsBuiltIn ||
98
+ _state . DeclarationFinder . IsReferenceUsedInProject ( project ,
99
+ adding . ToReferenceInfo ( ) ) ;
100
+
101
+ models . Add ( libraryId , adding ) ;
102
+ reference . Dispose ( ) ;
91
103
}
92
- reference . Dispose ( ) ;
93
104
}
94
- }
95
105
96
- foreach ( var reference in refs . Where ( library =>
97
- ( _use64BitPaths || library . Value . Has32BitVersion ) &&
98
- ! models . ContainsKey ( library . Key ) ) )
106
+ foreach ( var reference in refs . Where ( library =>
107
+ ( _use64BitPaths || library . Value . Has32BitVersion ) &&
108
+ ! models . ContainsKey ( library . Key ) ) )
109
+ {
110
+ models . Add ( reference . Key , new ReferenceModel ( reference . Value ) ) ;
111
+ }
112
+
113
+ var settings = _settings . Create ( ) ;
114
+ model = new AddRemoveReferencesModel ( project , models . Values , settings ) ;
115
+ if ( AddRemoveReferencesViewModel . HostHasProjects )
116
+ {
117
+ model . References . AddRange ( GetUserProjectFolderModels ( model . Settings ) . Where ( proj =>
118
+ ! model . References . Any ( item =>
119
+ item . FullPath . Equals ( proj . FullPath , StringComparison . OrdinalIgnoreCase ) ) ) ) ;
120
+ }
121
+ }
122
+ catch ( Exception ex )
99
123
{
100
- models . Add ( reference . Key , new ReferenceModel ( reference . Value ) ) ;
124
+ _logger . Warn ( ex , "Unexpected exception attempting to create AddRemoveReferencesModel." ) ;
101
125
}
102
-
103
- var settings = _settings . Create ( ) ;
104
- var model = new AddRemoveReferencesModel ( project , models . Values , settings ) ;
105
- if ( AddRemoveReferencesViewModel . HostHasProjects )
126
+ finally
106
127
{
107
- model . References . AddRange ( GetUserProjectFolderModels ( model . Settings ) . Where ( proj =>
108
- ! model . References . Any ( item =>
109
- item . FullPath . Equals ( proj . FullPath , StringComparison . OrdinalIgnoreCase ) ) ) ) ;
128
+ Cursor . Current = Cursors . Default ;
110
129
}
111
130
112
- return new AddRemoveReferencesPresenter ( new AddRemoveReferencesDialog ( new AddRemoveReferencesViewModel ( model , _reconciler , _browser ) ) ) ;
131
+ return ( model != null )
132
+ ? new AddRemoveReferencesPresenter (
133
+ new AddRemoveReferencesDialog ( new AddRemoveReferencesViewModel ( model , _reconciler , _browser ) ) )
134
+ : null ;
113
135
}
114
136
115
137
private IEnumerable < ReferenceModel > GetUserProjectFolderModels ( IReferenceSettings settings )
0 commit comments