55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Unity Technologies.
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Microsoft.Unity.VisualStudio.Editor
|
|
{
|
|
internal enum GeneratorStyle
|
|
{
|
|
SDK = 1,
|
|
Legacy = 2,
|
|
}
|
|
|
|
internal static class GeneratorFactory
|
|
{
|
|
private static readonly Dictionary<GeneratorStyle, IGenerator> _generators = new Dictionary<GeneratorStyle, IGenerator>();
|
|
|
|
static GeneratorFactory()
|
|
{
|
|
_generators.Add(GeneratorStyle.SDK, new SdkStyleProjectGeneration());
|
|
_generators.Add(GeneratorStyle.Legacy, new LegacyStyleProjectGeneration());
|
|
}
|
|
|
|
public static IGenerator GetInstance(GeneratorStyle style)
|
|
{
|
|
var forceStyleString = OnSelectingCSProjectStyle();
|
|
if (forceStyleString != null && Enum.TryParse<GeneratorStyle>(forceStyleString, out var forceStyle))
|
|
style = forceStyle;
|
|
|
|
if (_generators.TryGetValue(style, out var result))
|
|
return result;
|
|
|
|
throw new ArgumentException("Unknown generator style");
|
|
}
|
|
|
|
private static string OnSelectingCSProjectStyle()
|
|
{
|
|
foreach (var method in TypeCacheHelper.GetPostProcessorCallbacks(nameof(OnSelectingCSProjectStyle)))
|
|
{
|
|
object retValue = method.Invoke(null, Array.Empty<object>());
|
|
if (method.ReturnType != typeof(string))
|
|
continue;
|
|
|
|
return retValue as string;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|