Skip to content
Open
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,13 @@ private static bool EvaluateCondition(IReadOnlyList<TokenRef> tokens, IReadOnlyL
}

Debug.Assert(parents.Count == 0, "Unbalanced condition");
return (bool)Convert.ChangeType(current.Evaluate() ?? "false", typeof(bool));
object? evaluated = current.Evaluate();
// Unspecified choice parameters have defaultValue: "" which evaluates as empty string → treat as false
if (evaluated is string evalStr && string.IsNullOrEmpty(evalStr))
{
return false;
}
return (bool)Convert.ChangeType(evaluated ?? "false", typeof(bool));
}

private static object? InferTypeAndConvertLiteral(string literal)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@ public object Evaluate()
switch (Operator)
{
case Operator.Not:
return !EvaluateSide(Right!, x => Convert.ToBoolean(x ?? "False"));
return !EvaluateSide(Right!, ToBool);
case Operator.And:
return EvaluateSides(Left!, Right!, x => (bool)x, (x, y) => x && y);
return EvaluateSides(Left!, Right!, ToBool, (x, y) => x && y);
case Operator.Or:
return EvaluateSides(Left!, Right!, x => (bool)x, (x, y) => x || y);
return EvaluateSides(Left!, Right!, ToBool, (x, y) => x || y);
case Operator.Xor:
return EvaluateSides(Left!, Right!, x => (bool)x, (x, y) => x ^ y);
return EvaluateSides(Left!, Right!, ToBool, (x, y) => x ^ y);
case Operator.EqualTo:
return EvaluateSides(Left!, Right!, x => x, LenientEquals);
case Operator.NotEqualTo:
Expand Down Expand Up @@ -104,6 +104,18 @@ private static T EvaluateSide<T>(object side, Func<object, T> convert)
return convert(side);
}

private static bool ToBool(object? x)
{
return x switch
{
bool b => b,
null => false,
string s when string.IsNullOrEmpty(s) => false, // unspecified choice parameter (defaultValue: "") → false
string s when bool.TryParse(s, out bool parsed) => parsed,
_ => Convert.ToBoolean(x)
};
}
Comment on lines +107 to +117

private static bool LenientEquals(object x, object y)
{
if (x is string sx && y is string sy)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,15 @@ private static bool Evaluate(
try
{
object? evalResult = expression?.Evaluate();
result = (bool)Convert.ChangeType(evalResult, typeof(bool));
// Unspecified choice parameters have defaultValue: "" which evaluates as empty string → treat as false
if (evalResult is string evalStr && string.IsNullOrEmpty(evalStr))
{
result = false;
}
else
{
result = (bool)Convert.ChangeType(evalResult, typeof(bool));
}
}
catch (Exception e)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"longName": "sdk-version",
"shortName": ""
},
"AllowPrerelease": {
"longName": "allow-prerelease",
"shortName": ""
},
"NoSdkVersion": {
"longName": "no-sdk-version",
"shortName": ""
},
"RollForward": {
"longName": "roll-forward",
"shortName": ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "Verze .NET SDK, která se má použít.",
"symbols/SdkVersion/displayName": "Verze SDK",
"symbols/dotnet-cli-version/displayName": "verze dotnet CLI",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
Comment on lines +8 to +15
"symbols/RollForward/description": "Zásada posunutí vpřed, která se použije při výběru verze sady SDK",
"symbols/RollForward/displayName": "Zásada posunutí vpřed",
"symbols/RollForward/choices/patch/description": "Používá zadanou verzi.\nPokud se nenajde, posune se vpřed na nejnovější úroveň opravy.\nPokud se nenajde, selže.\nTato hodnota je starší verze chování z předchozích verzí sady SDK.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "Die zu verwendende Version des .NET-SDKs.",
"symbols/SdkVersion/displayName": "SDK-Version",
"symbols/dotnet-cli-version/displayName": "dotnet CLI-Version",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "Die Rollforwardrichtlinie, die bei der Auswahl einer SDK-Version verwendet werden soll.",
"symbols/RollForward/displayName": "Rollforwardrichtlinie",
"symbols/RollForward/choices/patch/description": "Verwendet die angegebene Version.\nFalls nicht gefunden, wird ein Rollforward auf die neueste Patchebene ausgeführt.\nWenn nicht gefunden, tritt ein Fehler auf.\nDieser Wert ist das Legacyverhalten aus früheren Versionen des SDK.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "The version of the .NET SDK to use.",
"symbols/SdkVersion/displayName": "SDK version",
"symbols/dotnet-cli-version/displayName": "dotnet CLI version",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "The roll-forward policy to use when selecting an SDK version.",
"symbols/RollForward/displayName": "Roll-forward policy",
"symbols/RollForward/choices/patch/description": "Uses the specified version.\nIf not found, rolls forward to the latest patch level.\nIf not found, fails.\nThis value is the legacy behavior from the earlier versions of the SDK.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "Versión del SDK de .NET que se va a usar.",
"symbols/SdkVersion/displayName": "versión de SDK",
"symbols/dotnet-cli-version/displayName": "versión de la CLI de dotnet",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "Directiva de reenvío que se va a usar al seleccionar una versión de SDK.",
"symbols/RollForward/displayName": "Directiva de reenvío",
"symbols/RollForward/choices/patch/description": "Usa la versión especificada.\nSi no se encuentra, avanza al nivel de revisión más reciente.\nSi no se encuentra, devuelve un error.\nEste valor es el comportamiento heredado de las versiones anteriores del SDK.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "Version du kit SDK .NET à utiliser",
"symbols/SdkVersion/displayName": "Version du SDK",
"symbols/dotnet-cli-version/displayName": "Version de l’interface CLI dotnet",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "La stratégie d'actualisation à utiliser lors de la sélection d'une version du kit de développement logiciel (SDK).",
"symbols/RollForward/displayName": "Stratégie de restauration par progression",
"symbols/RollForward/choices/patch/description": "Utilise la version spécifiée.\nSi la recherche est introuvable, reportez-vous au niveau de correctif le plus récent.\nSi introuvable, échec.\nCette valeur est le comportement hérité des versions antérieures du kit de développement logiciel (SDK).",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "Versione del .NET SDK da utilizzare.",
"symbols/SdkVersion/displayName": "Versione SDK",
"symbols/dotnet-cli-version/displayName": "Versione dotnet CLI",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "I criteri di roll-forward da utilizzare quando si seleziona una versione dell'SDK.",
"symbols/RollForward/displayName": "Criteri di roll-forward",
"symbols/RollForward/choices/patch/description": "Utilizza la versione specificata.\nSe non viene trovata, esegue il roll-forward verso il più recente livello di patch.\nSe non viene trovato, ha esito negativo.\nQuesto valore è il comportamento legacy delle versioni precedenti dell'SDK.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "使用する .NET SDK のバージョンです。",
"symbols/SdkVersion/displayName": "SDK バージョン",
"symbols/dotnet-cli-version/displayName": "dotnet CLI バージョン",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "SDK バージョンを選択する場合に使用するロールフォワード ポリシー。",
"symbols/RollForward/displayName": "ロールフォワード ポリシー",
"symbols/RollForward/choices/patch/description": "指定されたバージョンを使用します。\n見つからない場合は、最新のパッチ レベルにロールフォワードします。\n見つからない場合は失敗します。\nこの値は、以前のバージョンからの SDK の従来の動作です。",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "사용할 .NET SDK의 버전입니다.",
"symbols/SdkVersion/displayName": "SDK 버전",
"symbols/dotnet-cli-version/displayName": "dotnet CLI 버전",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "SDK 버전을 선택할 때 사용할 롤포워드 정책입니다.",
"symbols/RollForward/displayName": "롤포워드 정책",
"symbols/RollForward/choices/patch/description": "지정된 버전을 사용합니다.\n찾을 수 없으면 최신 패치 수준으로 롤포워드합니다.\n찾을 수 없으면 실패합니다.\n이 값은 이전 SDK 버전의 레거시 동작입니다.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "Wersja zestawu .NET SDK do użycia.",
"symbols/SdkVersion/displayName": "Wersja zestawu SDK",
"symbols/dotnet-cli-version/displayName": "Wersja interfejsu wiersza polecenia dotnet",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "Zasady przechodzenia używane w przypadku wybierania wersji zestawu SDK.",
"symbols/RollForward/displayName": "Zasady przechodzenia",
"symbols/RollForward/choices/patch/description": "Używa określonej wersji.\nJeśli nie znaleziono, zostanie przeniesiona do najnowszego poziomu poprawek.\nJeśli nie znaleziono, oznacza to niepowodzenie.\nTa wartość to starsze zachowanie z wcześniejszych wersji zestawu SDK.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "A versão do SDK do .NET a ser usada.",
"symbols/SdkVersion/displayName": "Versão do SDK",
"symbols/dotnet-cli-version/displayName": "Versão do CLI do dotnet",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "A política de rolar para frente a ser usada ao selecionar uma versão do SDK.",
"symbols/RollForward/displayName": "Política de rolar para frente",
"symbols/RollForward/choices/patch/description": "Usa a versão especificada.\nSe não for encontrado, avança para o nível de patch mais recente.\nSe não for encontrado, falha.\nEste valor é o comportamento herdado das versões anteriores do SDK.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
"symbols/SdkVersion/description": "Используемая версия пакета SDK для .NET.",
"symbols/SdkVersion/displayName": "Версия пакета SDK",
"symbols/dotnet-cli-version/displayName": "Версия CLI dotnet",
"symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.",
"symbols/AllowPrerelease/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease",
"symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.",
"symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease",
"symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.",
"symbols/NoSdkVersion/displayName": "No SDK version",
"symbols/RollForward/description": "Политика наката, используемая при выборе версии пакета SDK.",
"symbols/RollForward/displayName": "Политика наката",
"symbols/RollForward/choices/patch/description": "Использует указанную версию.\nЕсли не найдено, выполняется накат до последнего уровня исправления.\nЕсли не найдено, происходит сбой.\nЭто значение является устаревшим поведением из более ранних версий пакета SDK.",
Expand Down
Loading
Loading