Просмотр исходного кода

fixed a null reference that could happen if game objects were removed from game

Scrublord1336 6 лет назад
Родитель
Сommit
aa74a0e55f

+ 11 - 4
src/XUnity.AutoTranslator.Plugin.Core/AutoTranslationPlugin.cs

@@ -1050,11 +1050,18 @@ namespace XUnity.AutoTranslator.Plugin.Core
                foreach( var component in job.Components )
                {
                   // update the original text, but only if it has not been chaanged already for some reason (could be other translator plugin or game itself)
-                  var text = component.GetText().Trim();
-                  if( text == job.Key.OriginalText )
+                  try
+                  {
+                     var text = component.GetText().Trim();
+                     if( text == job.Key.OriginalText )
+                     {
+                        var info = component.GetTranslationInfo( false );
+                        SetTranslatedText( component, job.TranslatedText, job.Key, info );
+                     }
+                  }
+                  catch( NullReferenceException )
                   {
-                     var info = component.GetTranslationInfo( false );
-                     SetTranslatedText( component, job.TranslatedText, job.Key, info );
+                     // might fail if compoent is no longer associated to game
                   }
                }
 

+ 13 - 4
src/XUnity.AutoTranslator.Plugin.Core/TranslationJob.cs

@@ -36,12 +36,21 @@ namespace XUnity.AutoTranslator.Plugin.Core
       {
          if( Components.Count == 0 || Contexts.Count > 0 ) return true; // we do not know
 
-         foreach( var component in Components )
+         for( int i = Components.Count - 1 ; i >= 0 ; i-- )
          {
-            var text = component.GetText().Trim();
-            if( text == Key.OriginalText )
+            var component = Components[ i ];
+            try
             {
-               return true;
+               var text = component.GetText().Trim(); 
+               if( text == Key.OriginalText )
+               {
+                  return true;
+               }
+            }
+            catch( NullReferenceException )
+            {
+               // might fail if compoent is no longer associated to game
+               Components.RemoveAt( i );
             }
          }