Why do method calls in a CustomEditor class fail?

I have created a CustomEditor to work with lightmaps more easily. As part of it, I defined private functions that the custom editor can use. However, when I compile the script, those methods are never called. No console errors at all. Just a black hole. These methods have to be defined in the editor script because they reference Editor classes, and the scene won't build if the functions are in the in-game script. (They do run if the they are there.)

One more wrinkle: these functions also reference the target class. Is that the problem?

(The BakeLightmap function is the one that OnGUI is trying to call, but which never gets called.)

import System;

@CustomEditor(TimeOfDayManager)
class TimeOfDayMgrEditor extends Editor {

    var currentTOD : TimeOfDay;  
    var newDayTime : DayTime;
    var newLocation : Location;

    function OnEnable () {
        if (!target.currentDayTime) target.currentDayTime = DayTime.dawn;
        if (!target.levelLocation) target.levelLocation = Location.SloughCreek;
        if (!target.sunLite) target.sunLite = GameObject.FindObjectOfType(Light);
        if (!target.sun) target.sun = target.sunLite.transform as Transform;
        currentTOD = target.GetTimeOfDayFromDayTime(target.currentDayTime);
        newDayTime = target.currentDayTime;
        newLocation = target.levelLocation;
    }

    function OnInspectorGUI() {
        //DrawDefaultInspector ();

        EditorGUILayout.BeginHorizontal ();
          newDayTime = EditorGUILayout.EnumPopup("Time Of Day:", newDayTime);
          newLocation = EditorGUILayout.EnumPopup("Level Location:", newLocation);
        EditorGUILayout.EndHorizontal ();

        EditorGUILayout.BeginHorizontal ();
          EditorGUILayout.LabelField("SUN","");
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          currentTOD.sunHeading = EditorGUILayout.FloatField("Heading:",currentTOD.sunHeading);
          currentTOD.sunElevation = EditorGUILayout.FloatField("Elevation:",currentTOD.sunElevation);
          GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          currentTOD.sunColor = EditorGUILayout.ColorField("Color:",currentTOD.sunColor);
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          currentTOD.sunIntensity = EditorGUILayout.Slider("Intensity:",currentTOD.sunIntensity, 0.0, 3.0);
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          currentTOD.ambientColor = EditorGUILayout.ColorField("Ambient Light:",currentTOD.ambientColor);
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          currentTOD.globalFogColor = EditorGUILayout.ColorField("Fog Color:",currentTOD.globalFogColor);
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          RenderSettings.fog = EditorGUILayout.Toggle("Preview Fog:",RenderSettings.fog);
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          currentTOD.sunShadowStrength = EditorGUILayout.Slider("Shadow Strength:",currentTOD.sunShadowStrength, 0.0, 1.0);
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          currentTOD.waterColor = EditorGUILayout.ColorField("Water:",currentTOD.waterColor);
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          EditorGUILayout.LabelField("LIGHTMAPPING","");
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal ();
          currentTOD.bounceBoost = EditorGUILayout.FloatField("Bounce Boost:",currentTOD.bounceBoost);
          currentTOD.bounceIntensity = EditorGUILayout.FloatField("Bounce Intensity:",currentTOD.bounceIntensity);
          GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal ();
        EditorGUILayout.BeginHorizontal();
          target.basePath = EditorGUILayout.TextField("Asset Folder:", target.basePath);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal ();     
          if (GUILayout.Button ("Bake Current Preview")) BakeLightmaps (true);
          GUILayout.Space(10);
          if (GUILayout.Button ("Bake and Save All")) BakeLightmaps (false);
          GUILayout.FlexibleSpace();       
        EditorGUILayout.EndHorizontal ();

        if (GUI.changed) {
            EditorUtility.SetDirty (target);
            var oldDayTime : DayTime = target.currentDayTime;
            var oldLocation : Location = target.levelLocation;
            if ((newDayTime != oldDayTime) || (newLocation != oldLocation)) {
                if (newDayTime != oldDayTime) {
                    target.currentDayTime = newDayTime;
                    currentTOD = target.GetTimeOfDayFromDayTime(target.currentDayTime);
                }
                if (newLocation != oldLocation)
                    target.levelLocation = newLocation;
                target.SetTimeOfDayToCurrent();
            } else {
                target.SetSun (target.currentDayTime);
                target.SetWater (target.currentDayTime);
            }   
        }
    }

    private function BakeLightmaps (isPreview : boolean) {      
        var currentTOD : TimeOfDay = target.GetTimeOfDayFromDayTime (target.currentDayTime);
        if (isPreview) {
            Debug.Log ("Baking low quality preview lightmaps for this time of day...");
            // set the changes from the sun from time of day
            // the rest of the settings in terms of number of bounces, etc., are set in the main lightmapping panel
            LightmapEditorSettings.skyLightColor = currentTOD.sunColor;
            LightmapEditorSettings.skyLightIntensity = currentTOD.sunIntensity;
            LightmapEditorSettings.bounceBoost = currentTOD.bounceBoost;
            LightmapEditorSettings.bounceIntensity = currentTOD.bounceIntensity;
            LightmapEditorSettings.quality  = LightmapBakeQuality.Low;
            Lightmapping.BakeAsync ();
        } else {
            var confirm : boolean = EditorUtility.DisplayDialog("Full Bake Warnings:","Is the terrain lightmap resolution set to the final value in the Lightmapping->Object tab? This will replace all existing lightmaps for this scene.", "Bake All", "Cancel");
            if (!confirm) return;

            LightmapEditorSettings.quality = LightmapBakeQuality.High;

            // go through all the times of day and bake and save the lightmaps
            for (var i=0; i<4; i++) {
                var day : DayTime = target.GetDayTimeByIndex(i);
                var tod : TimeOfDay = target.GetTimeOfDayFromDayTime(day);
                target.SetSun(day);
                LightmapEditorSettings.skyLightColor = tod.sunColor;
                LightmapEditorSettings.skyLightIntensity = tod.sunIntensity;
                LightmapEditorSettings.bounceBoost = tod.bounceBoost;
                LightmapEditorSettings.bounceIntensity = tod.bounceIntensity;
                Debug.Log ("Baking lightmaps for " + Enum.GetName(DayTime, day));
                Lightmapping.BakeAsync ();
                while (Lightmapping.isRunning) yield;

                for (var j=0; j < LightmapSettings.lightmaps.length; j++) {
                    confirm = SaveLightmap("LightmapNear-" + j.ToString() + ".exr", day);
                    if (!confirm) return;
                    confirm = SaveLightmap("LightmapFar-" + j.ToString() + ".exr", day);
                    if (!confirm) return;
                }
            }
            Debug.Log ("Bake of full set of times of day lightmaps complete for this scene!");
        }
    }

    private function SaveLightmap (mapFile : String, theDayTime : DayTime) : boolean {
        var mapSourcePath : String = EditorApplication.currentScene.Substring(0, EditorApplication.currentScene.LastIndexOf(".")) + "/";
        var mapDestPath : String = "Assets/0 Game Assets/Resources/" + target.GetPath(target.levelLocation, theDayTime, AssetType._lightmaps);
        Debug.Log ("Saving "+mapFile+" from " + mapSourcePath + " to " + mapDestPath);

        // The destination folders in Resources/Atmospheres must exist already
        var err2 : String;
        AssetDatabase.DeleteAsset (mapDestPath+mapFile);
        var err : String = AssetDatabase.ValidateMoveAsset(mapSourcePath+mapFile, mapDestPath+mapFile);
        if (err == "")
            err2 = AssetDatabase.MoveAsset(mapSourcePath+mapFile, mapDestPath+mapFile);
        if (err || err2) {
            EditorUtility.DisplayDialog("Lightmap Save Failed", "Bake aborted. The lightmap set is not complete. "+err + err2, "OK", "");
            return false;
        } else return true;
    }
}

Problem appears to be that if the function includes a while/yield, then the overall function call fails. And if you put all the code into the onGUI function, then you get a compiler error saying you can't put a generator on a void function (the onGUI function).

This makes sense, since you don't want onGUI to be held up waiting for the condition to change.

If you put these functions into the class the editor targets, and call them from the editor, they work fine.

Or if you put functions into a separate class in the Editor folder as static functions without the wait/yield, you can call from onGUI.