From 029091e9255d5133c221402ff61f6cffb3c977d0 Mon Sep 17 00:00:00 2001
From: Brandon Grimshaw
Date: Wed, 12 Jun 2024 12:31:29 +1000
Subject: [PATCH] Fix parsing of entries with multi-line object references
At some point Unity started breaking inline objects onto multiple lines (presumedly once they reach a certain line length). This causes the parser to incorrectly begin parsing on the `variants:` line instead of the desired `- keywords:` line of the first element of the variants array.
This fixes that by detecting when the shader asset reference spans multiple lines (by looking for an increase in indentation) and skips forward an extra line if that is the case.
---
ShaderStripperVariantCollection.cs | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/ShaderStripperVariantCollection.cs b/ShaderStripperVariantCollection.cs
index 34b2ccf..32d65c8 100644
--- a/ShaderStripperVariantCollection.cs
+++ b/ShaderStripperVariantCollection.cs
@@ -144,7 +144,17 @@ public override void Initialize(){
Shader s = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid));
// Move to variants contents (skip current line, "second:" and "variants:")
- i += 3;
+ indent = GetYamlIndent(yaml[i]);
+ i += 1;
+
+ // check if the object reference spans multiple lines
+ if ((GetYamlIndent(yaml[i]) - indent) == 2) {
+ // the object reference spans multiple lines, skip forward an extra line
+ i += 3;
+ } else {
+ i += 2;
+ }
+
indent = GetYamlIndent(yaml[i]);
var sv = new ShaderVariantCollection.ShaderVariant();
for (; i