Skip to content

Commit d73d495

Browse files
committed
Merge pull request #516 from zooba/issue-454
Fixes #454 NullReferenceException in CreateOrAddVirtualEnvironment
2 parents 21e5600 + 1a23447 commit d73d495

File tree

1 file changed

+31
-14
lines changed

1 file changed

+31
-14
lines changed

Python/Product/PythonTools/PythonTools/Project/PythonProjectNode.cs

+31-14
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,7 @@ public IPythonInterpreterFactory GetInterpreterFactory() {
951951
return service.DefaultInterpreter;
952952
}
953953

954-
var fact = _interpreters.ActiveInterpreter;
954+
var fact = interpreters.ActiveInterpreter;
955955

956956
Site.GetPythonToolsService().EnsureCompletionDb(fact);
957957

@@ -969,7 +969,7 @@ public IPythonInterpreterFactory GetInterpreterFactoryOrThrow() {
969969
return service.DefaultInterpreter;
970970
}
971971

972-
var fact = _interpreters.ActiveInterpreter;
972+
var fact = interpreters.ActiveInterpreter;
973973
if (fact == service.NoInterpretersValue) {
974974
throw new NoInterpretersException();
975975
}
@@ -1364,12 +1364,19 @@ out IPythonInterpreterFactory factory
13641364
if (args != null && args.TryGetValue("e", out description) && !string.IsNullOrEmpty(description)) {
13651365
var service = Site.GetComponentModel().GetService<IInterpreterOptionsService>();
13661366

1367-
factory = _interpreters.GetInterpreterFactories().FirstOrDefault(
1368-
// Description is a localized string, hence CCIC
1369-
f => description.Equals(f.Description, StringComparison.CurrentCultureIgnoreCase)
1370-
) ?? service.Interpreters.FirstOrDefault(
1371-
f => description.Equals(f.Description, StringComparison.CurrentCultureIgnoreCase)
1372-
);
1367+
var interpreters = _interpreters;
1368+
if (interpreters != null) {
1369+
factory = interpreters.GetInterpreterFactories().FirstOrDefault(
1370+
// Description is a localized string, hence CCIC
1371+
f => description.Equals(f.Description, StringComparison.CurrentCultureIgnoreCase)
1372+
);
1373+
}
1374+
1375+
if (factory == null) {
1376+
factory = service.Interpreters.FirstOrDefault(
1377+
f => description.Equals(f.Description, StringComparison.CurrentCultureIgnoreCase)
1378+
);
1379+
}
13731380
}
13741381

13751382
if (factory == null) {
@@ -2059,7 +2066,12 @@ private void ShowAddInterpreter() {
20592066
return;
20602067
}
20612068

2062-
var toRemove = new HashSet<IPythonInterpreterFactory>(_interpreters.GetInterpreterFactories());
2069+
var interpreters = _interpreters;
2070+
if (interpreters == null) {
2071+
return;
2072+
}
2073+
2074+
var toRemove = new HashSet<IPythonInterpreterFactory>(interpreters.GetInterpreterFactories());
20632075
var toAdd = new HashSet<IPythonInterpreterFactory>(result);
20642076
toRemove.ExceptWith(toAdd);
20652077
toAdd.ExceptWith(toRemove);
@@ -2070,10 +2082,10 @@ private void ShowAddInterpreter() {
20702082
throw Marshal.GetExceptionForHR(VSConstants.OLE_E_PROMPTSAVECANCELLED);
20712083
}
20722084
foreach (var factory in toAdd) {
2073-
_interpreters.AddInterpreter(factory);
2085+
interpreters.AddInterpreter(factory);
20742086
}
20752087
foreach (var factory in toRemove) {
2076-
_interpreters.RemoveInterpreterFactory(factory);
2088+
interpreters.RemoveInterpreterFactory(factory);
20772089
}
20782090
}
20792091
}
@@ -2127,7 +2139,12 @@ await VirtualEnv.CreateAndInstallDependencies(
21272139
);
21282140
}
21292141

2130-
var existing = _interpreters.FindInterpreter(path);
2142+
var interpreters = _interpreters;
2143+
if (interpreters == null) {
2144+
return null;
2145+
}
2146+
2147+
var existing = interpreters.FindInterpreter(path);
21312148
if (existing != null) {
21322149
return existing;
21332150
}
@@ -2144,8 +2161,8 @@ await VirtualEnv.CreateAndInstallDependencies(
21442161
throw Marshal.GetExceptionForHR(VSConstants.OLE_E_PROMPTSAVECANCELLED);
21452162
}
21462163

2147-
var id = _interpreters.CreateInterpreterFactory(options);
2148-
return _interpreters.FindInterpreter(id, options.LanguageVersion);
2164+
var id = interpreters.CreateInterpreterFactory(options);
2165+
return interpreters.FindInterpreter(id, options.LanguageVersion);
21492166
}
21502167

21512168

0 commit comments

Comments
 (0)