public class BuiltinShadersSymbolTable()

in resharper/resharper-unity/src/Unity.Shaders/ShaderLab/Psi/Resolve/BuiltinShadersSymbolTable.cs [18:377]


public class BuiltinShadersSymbolTable(IPsiServices psiServices) : SymbolTableBase
{
    // List of all known built-in shaders for 2023.2.12f1
    // You can use tools/BuiltinShadersExtractor for updating the list    
    // ReSharper disable StringLiteralTypo
    private static readonly IReadOnlyList<string> ourShaderNames = ImmutableArray.Create(
        "Autodesk Interactive",
        "Editor/Bumped Specular",
        "Editor/Diffuse",
        "Editor/Transparent/Cutout/Diffuse",
        "Editor/Transparent/Diffuse",
        "FX/Flare",
        "GUI/Text Shader",
        "Hidden/2D Handles Dotted Lines",
        "Hidden/2D Handles Lines",
        "Hidden/AlphaBasedSelection",
        "Hidden/AlphaBasedSelectionNoZWrite",
        "Hidden/AnimationWindowControlPoint",
        "Hidden/AnimationWindowCurve",
        "Hidden/BlitCopy",
        "Hidden/BlitCopyDepth",
        "Hidden/BlitCopyHDRTonemap",
        "Hidden/BlitCopyHDRTonemappedToHDRTonemap",
        "Hidden/BlitCopyHDRTonemappedToSDR",
        "Hidden/BlitCopyWithDepth",
        "Hidden/BlitSceneViewCapture",
        "Hidden/BlitToDepth",
        "Hidden/BlitToDepth_MSAA",
        "Hidden/BoneHandles",
        "Hidden/Compositing",
        "Hidden/ConvertTexture",
        "Hidden/CubeBlend",
        "Hidden/CubeBlur",
        "Hidden/CubeBlurOdd",
        "Hidden/CubeCopy",
        "Hidden/Editor Gizmo",
        "Hidden/Editor Gizmo",
        "Hidden/Editor Gizmo Color Occlusion",
        "Hidden/Editor Gizmo Icon Picking",
        "Hidden/Editor Gizmo Lit",
        "Hidden/Editor Gizmo Text",
        "Hidden/Editor Gizmo Textured",
        "Hidden/FrameDebuggerRenderTargetDisplay",
        "Hidden/GIDebug/ShowLightMask",
        "Hidden/GIDebug/TextureUV",
        "Hidden/GIDebug/UV1sAsPositions",
        "Hidden/GIDebug/VertexColors",
        "Hidden/GraphView/AAEdge",
        "Hidden/GUITextureBlit2Linear",
        "Hidden/GUITextureBlit2SRGB",
        "Hidden/GUITextureBlitSceneGUI",
        "Hidden/Handles Circular Arc",
        "Hidden/Handles Dotted Lines",
        "Hidden/Handles Icon",
        "Hidden/Handles Lines",
        "Hidden/Handles Shaded",
        "Hidden/Highlight Backfaces",
        "Hidden/Internal-Colored",
        "Hidden/Internal-CombineDepthNormals",
        "Hidden/Internal-CubemapToEquirect",
        "Hidden/Internal-DebugPattern",
        "Hidden/Internal-DeferredReflections",
        "Hidden/Internal-DeferredShading",
        "Hidden/Internal-DepthNormalsTexture",
        "Hidden/Internal-Flare",
        "Hidden/Internal-GUIRoundedRect",
        "Hidden/Internal-GUIRoundedRectWithColorPerBorder",
        "Hidden/Internal-GUITexture",
        "Hidden/Internal-GUITextureBlit",
        "Hidden/Internal-GUITextureClip",
        "Hidden/Internal-GUITextureClipInactive",
        "Hidden/Internal-GUITextureClipText",
        "Hidden/Internal-GUITextureClipVertically",
        "Hidden/Internal-Halo",
        "Hidden/Internal-Loading",
        "Hidden/Internal-MotionVectors",
        "Hidden/Internal-ODSWorldTexture",
        "Hidden/Internal-ScreenSpaceShadows",
        "Hidden/Internal-StencilWrite",
        "Hidden/InternalClear",
        "Hidden/InternalErrorShader",
        "Hidden/Light Probe Group Tetrahedra",
        "Hidden/Light Probe Handles Shaded",
        "Hidden/Light Probe Wire",
        "Hidden/Mesh-MultiPreview",
        "Hidden/Nature/Terrain/Utilities",
        "Hidden/Nature/Tree Creator Albedo Rendertex",
        "Hidden/Nature/Tree Creator Bark Optimized",
        "Hidden/Nature/Tree Creator Bark Rendertex",
        "Hidden/Nature/Tree Creator Leaves Fast Optimized",
        "Hidden/Nature/Tree Creator Leaves Optimized",
        "Hidden/Nature/Tree Creator Leaves Rendertex",
        "Hidden/Nature/Tree Creator Normal Rendertex",
        "Hidden/Nature/Tree Soft Occlusion Bark Rendertex",
        "Hidden/Nature/Tree Soft Occlusion Leaves Rendertex",
        "Hidden/OpaqueSelection",
        "Hidden/ParticleShapeGizmo",
        "Hidden/ParticleShapeGizmoSphere",
        "Hidden/Preview 2D Texture Array",
        "Hidden/Preview Alpha",
        "Hidden/Preview Alpha VT",
        "Hidden/Preview AudioClip Waveform",
        "Hidden/Preview Color2D",
        "Hidden/Preview Color2D VT",
        "Hidden/Preview Cubemap",
        "Hidden/Preview Encoded Lightmap doubleLDR",
        "Hidden/Preview Encoded Lightmap HDR",
        "Hidden/Preview Encoded Lightmap RGBM",
        "Hidden/Preview Encoded Normals",
        "Hidden/Preview Encoded Normals VT",
        "Hidden/Preview Plane With Shadow",
        "Hidden/Preview Shadow Mask",
        "Hidden/Preview Shadow Plane Clip",
        "Hidden/Preview Transparent",
        "Hidden/Preview Transparent VT",
        "Hidden/Scene View Show Mips",
        "Hidden/Scene View Show Overdraw",
        "Hidden/Scene View Show Texture Streaming",
        "Hidden/SceneColoredTexture",
        "Hidden/Sceneview Alpha Shader",
        "Hidden/SceneView grid",
        "Hidden/SceneView grid ortho",
        "Hidden/SceneView/GridGap",
        "Hidden/SceneViewApplyFilter",
        "Hidden/SceneViewAura",
        "Hidden/SceneViewBuildFilter",
        "Hidden/SceneViewDeferredBuffers",
        "Hidden/SceneViewGrayscaleEffectFade",
        "Hidden/SceneViewSelected",
        "Hidden/SceneViewWireframe",
        "Hidden/SeparableBlur",
        "Hidden/SH",
        "Hidden/Show Lightmap Resolution",
        "Hidden/ShowOverlap",
        "Hidden/ShowShadowCascadeSplits",
        "Hidden/TerrainEngine/BillboardTree",
        "Hidden/TerrainEngine/BrushPreview",
        "Hidden/TerrainEngine/CameraFacingBillboardTree",
        "Hidden/TerrainEngine/CrossBlendNeighbors",
        "Hidden/TerrainEngine/Details/BillboardWavingDoublePass",
        "Hidden/TerrainEngine/Details/Vertexlit",
        "Hidden/TerrainEngine/Details/WavingDoublePass",
        "Hidden/TerrainEngine/GenerateNormalmap",
        "Hidden/TerrainEngine/HeightBlitCopy",
        "Hidden/TerrainEngine/PaintHeight",
        "Hidden/TerrainEngine/Splatmap/Diffuse-AddPass",
        "Hidden/TerrainEngine/Splatmap/Diffuse-Base",
        "Hidden/TerrainEngine/Splatmap/Diffuse-BaseGen",
        "Hidden/TerrainEngine/Splatmap/Specular-AddPass",
        "Hidden/TerrainEngine/Splatmap/Specular-Base",
        "Hidden/TerrainEngine/Splatmap/Standard-AddPass",
        "Hidden/TerrainEngine/Splatmap/Standard-Base",
        "Hidden/TerrainEngine/Splatmap/Standard-BaseGen",
        "Hidden/TerrainEngine/TerrainBlitCopyZWrite",
        "Hidden/TerrainEngine/TerrainLayerUtils",
        "Hidden/TextCore/Distance Field",
        "Hidden/TextCore/Distance Field SSD",
        "Hidden/TextCore/Editor/Distance Field SSD",
        "Hidden/TextCore/Editor/Sprite",
        "Hidden/TextCore/Sprite",
        "Hidden/TreeTextureCombiner Shader",
        "Hidden/UI/CompositeOverdraw",
        "Hidden/UI/Overdraw",
        "Hidden/UIElements/AACurveField",
        "hidden/Unlit/Avatar",
        "hidden/Unlit/Avatar-Transparent",
        "Hidden/VertexSelected",
        "Hidden/VertexSelection",
        "Hidden/VertexSelectionBackfaces",
        "Hidden/VideoComposite",
        "Hidden/VideoDecode",
        "Hidden/VideoDecodeAndroid",
        "Hidden/VideoDecodeOSX",
        "Hidden/VR/BlitCopyHDRTonemappedToHDRTonemapTexArraySlice",
        "Hidden/VR/BlitCopyHDRTonemappedToSDRTexArraySlice",
        "Hidden/VR/BlitCopyHDRTonemapTexArraySlice",
        "Hidden/VR/BlitFromTex2DToTexArraySlice",
        "Hidden/VR/BlitTexArraySlice",
        "Hidden/VR/BlitTexArraySliceToDepth",
        "Hidden/VR/BlitTexArraySliceToDepth_MSAA",
        "Hidden/VR/Internal-VRDistortion",
        "Legacy Shaders/Bumped Diffuse",
        "Legacy Shaders/Bumped Specular",
        "Legacy Shaders/Decal",
        "Legacy Shaders/Diffuse",
        "Legacy Shaders/Diffuse Detail",
        "Legacy Shaders/Diffuse Fast",
        "Legacy Shaders/Lightmapped/Bumped Diffuse",
        "Legacy Shaders/Lightmapped/Bumped Specular",
        "Legacy Shaders/Lightmapped/Diffuse",
        "Legacy Shaders/Lightmapped/Specular",
        "Legacy Shaders/Lightmapped/VertexLit",
        "Legacy Shaders/Parallax Diffuse",
        "Legacy Shaders/Parallax Specular",
        "Legacy Shaders/Particles/~Additive-Multiply",
        "Legacy Shaders/Particles/Additive",
        "Legacy Shaders/Particles/Additive (Soft)",
        "Legacy Shaders/Particles/Alpha Blended",
        "Legacy Shaders/Particles/Alpha Blended Premultiply",
        "Legacy Shaders/Particles/Anim Alpha Blended",
        "Legacy Shaders/Particles/Blend",
        "Legacy Shaders/Particles/Multiply",
        "Legacy Shaders/Particles/Multiply (Double)",
        "Legacy Shaders/Particles/VertexLit Blended",
        "Legacy Shaders/Reflective/Bumped Diffuse",
        "Legacy Shaders/Reflective/Bumped Specular",
        "Legacy Shaders/Reflective/Bumped Unlit",
        "Legacy Shaders/Reflective/Bumped VertexLit",
        "Legacy Shaders/Reflective/Diffuse",
        "Legacy Shaders/Reflective/Parallax Diffuse",
        "Legacy Shaders/Reflective/Parallax Specular",
        "Legacy Shaders/Reflective/Specular",
        "Legacy Shaders/Reflective/VertexLit",
        "Legacy Shaders/Self-Illumin/Bumped Diffuse",
        "Legacy Shaders/Self-Illumin/Bumped Specular",
        "Legacy Shaders/Self-Illumin/Diffuse",
        "Legacy Shaders/Self-Illumin/Parallax Diffuse",
        "Legacy Shaders/Self-Illumin/Parallax Specular",
        "Legacy Shaders/Self-Illumin/Specular",
        "Legacy Shaders/Self-Illumin/VertexLit",
        "Legacy Shaders/Specular",
        "Legacy Shaders/Transparent/Bumped Diffuse",
        "Legacy Shaders/Transparent/Bumped Specular",
        "Legacy Shaders/Transparent/Cutout/Bumped Diffuse",
        "Legacy Shaders/Transparent/Cutout/Bumped Specular",
        "Legacy Shaders/Transparent/Cutout/Diffuse",
        "Legacy Shaders/Transparent/Cutout/Soft Edge Unlit",
        "Legacy Shaders/Transparent/Cutout/Specular",
        "Legacy Shaders/Transparent/Cutout/VertexLit",
        "Legacy Shaders/Transparent/Diffuse",
        "Legacy Shaders/Transparent/Parallax Diffuse",
        "Legacy Shaders/Transparent/Parallax Specular",
        "Legacy Shaders/Transparent/Specular",
        "Legacy Shaders/Transparent/VertexLit",
        "Legacy Shaders/VertexLit",
        "Mobile/Bumped Diffuse",
        "Mobile/Bumped Specular",
        "Mobile/Bumped Specular (1 Directional Realtime Light)",
        "Mobile/Diffuse",
        "Mobile/Particles/Additive",
        "Mobile/Particles/Alpha Blended",
        "Mobile/Particles/Multiply",
        "Mobile/Particles/VertexLit Blended",
        "Mobile/Skybox",
        "Mobile/Unlit (Supports Lightmap)",
        "Mobile/VertexLit",
        "Mobile/VertexLit (Only Directional Lights)",
        "Nature/SpeedTree",
        "Nature/SpeedTree Billboard",
        "Nature/SpeedTree8",
        "Nature/Terrain/Diffuse",
        "Nature/Terrain/Specular",
        "Nature/Terrain/Standard",
        "Nature/Tree Creator Bark",
        "Nature/Tree Creator Leaves",
        "Nature/Tree Creator Leaves Fast",
        "Nature/Tree Soft Occlusion Bark",
        "Nature/Tree Soft Occlusion Leaves",
        "Particles/Standard Surface",
        "Particles/Standard Unlit",
        "Preview/CubemapArray",
        "Skybox/6 Sided",
        "Skybox/Cubemap",
        "Skybox/Panoramic",
        "Skybox/Procedural",
        "Sprites/Default",
        "Sprites/Diffuse",
        "Sprites/Mask",
        "Standard",
        "Standard (Specular setup)",
        "UI/Default",
        "UI/Default Font",
        "UI/DefaultETC1",
        "UI/Lit/Bumped",
        "UI/Lit/Detail",
        "UI/Lit/Refraction",
        "UI/Lit/Refraction Detail",
        "UI/Lit/Transparent",
        "UI/Unlit/Detail",
        "UI/Unlit/Text",
        "UI/Unlit/Text Detail",
        "UI/Unlit/Transparent",
        "Unlit/Color",
        "Unlit/Preview3DSDF",
        "Unlit/Preview3DSliced",
        "Unlit/Preview3DVolume",
        "Unlit/Texture",
        "Unlit/Transparent",
        "Unlit/Transparent Cutout",
        "VR/SpatialMapping/Occlusion",
        "VR/SpatialMapping/Wireframe"
        // ReSharper restore StringLiteralTypo
    );
    
    private readonly Dictionary<string, ISymbolInfo> mySymbolInfos = BuildSymbolInfos(psiServices);

    private static Dictionary<string, ISymbolInfo> BuildSymbolInfos(IPsiServices psiServices)
    {
        var result = new Dictionary<string, ISymbolInfo>(ourShaderNames.Count, StringComparer.OrdinalIgnoreCase);
        foreach (var shaderName in ourShaderNames) 
            result[shaderName] = new SymbolInfo(shaderName, new BuiltinShaderDeclaredElement(shaderName, psiServices), EmptySubstitution.INSTANCE, -1, 0);
        return result;
    }

    public override IEnumerable<string> Names() => ourShaderNames;

    public override IList<ISymbolInfo> GetSymbolInfos(string name)
    {
        return mySymbolInfos.TryGetValue(name, out var value)
            ? FixedList.ListOf(value)
            : EmptyList<ISymbolInfo>.Instance;
    }

    public override void AppendSymbolInfos(string name, List<ISymbolInfo> consumer)
    {
        if (mySymbolInfos.TryGetValue(name, out var value))
        {
            consumer.Add(value);
        }
    }

    public override bool ForAllSymbolInfos<TState>(TState state, Func<TState, ISymbolInfo, bool> processor)
    {
        foreach (var symbol in mySymbolInfos.Values)
        {
            if (!processor(state, symbol))
                return false;
        }

        return true;
    }

    public override ISymbolTableDependencySet? GetDependencySet() => null;

    private class BuiltinShaderDeclaredElement(string name, IPsiServices psiServices) : IShaderLabDeclaredElement
    {
        public string ShortName => name;
        public bool CaseSensitiveName => false;
        public PsiLanguageType PresentationLanguage => ShaderLabLanguage.Instance!;
        public DeclaredElementType GetElementType() => ShaderLabDeclaredElementType.Shader;

        public bool IsValid() => true;

        public bool IsSynthetic() => false;

        public IList<IDeclaration> GetDeclarations() => EmptyList<IDeclaration>.Instance;

        public IList<IDeclaration> GetDeclarationsIn(IPsiSourceFile sourceFile) => EmptyList<IDeclaration>.Instance;

        public HybridCollection<IPsiSourceFile> GetSourceFiles() => HybridCollection<IPsiSourceFile>.Empty;

        public bool HasDeclarationsIn(IPsiSourceFile sourceFile) => false;

        public IPsiServices GetPsiServices() => psiServices;

        public XmlNode? GetXMLDoc(bool inherit) => null;

        public XmlNode? GetXMLDescriptionSummary(bool inherit) => null;
    }
}