From a9262bcbbcda2b3b7c5d51a9a8239694f0a10dc9 Mon Sep 17 00:00:00 2001 From: John Maxwell Date: Wed, 20 Nov 2024 10:35:08 -0800 Subject: [PATCH] Fix MoStratum for LT-21941 --- src/SIL.LCModel/DomainImpl/CmObject.cs | 4 ++++ .../DomainImpl/OverridesLing_MoClasses.cs | 24 +++++++++++++++++++ .../SIL.LCModel.Tests/DomainImpl/LingTests.cs | 19 ++++++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/SIL.LCModel/DomainImpl/CmObject.cs b/src/SIL.LCModel/DomainImpl/CmObject.cs index b71c6623..9a02b923 100644 --- a/src/SIL.LCModel/DomainImpl/CmObject.cs +++ b/src/SIL.LCModel/DomainImpl/CmObject.cs @@ -3413,6 +3413,10 @@ public virtual IEnumerable ReferenceTargetCandidates(int flid) var owner = ReferenceTargetOwner(flid) as ICmPossibilityList; if (owner != null) return owner.PossibilitiesOS.Cast(); + var mdc = m_cache.ServiceLocator.GetInstance(); + int classId = mdc.GetDstClsId(flid); + if (classId == MoStratumTags.kClassId) + return m_cache.LangProject.MorphologicalDataOA.StrataOS; var type = (CellarPropertyType)m_cache.MetaDataCache.GetFieldType(flid); if (type == CellarPropertyType.ReferenceSequence || type == CellarPropertyType.ReferenceCollection) diff --git a/src/SIL.LCModel/DomainImpl/OverridesLing_MoClasses.cs b/src/SIL.LCModel/DomainImpl/OverridesLing_MoClasses.cs index ad2fa76f..ded20631 100644 --- a/src/SIL.LCModel/DomainImpl/OverridesLing_MoClasses.cs +++ b/src/SIL.LCModel/DomainImpl/OverridesLing_MoClasses.cs @@ -4637,4 +4637,28 @@ public override ITsString ShortNameTSS } } + + internal partial class MoStratum + { + /// + /// The shortest, non abbreviated label for the content of this object. + /// + public override string ShortName + { + get + { + var result = ShortNameTSS.Text; + return String.IsNullOrEmpty(result) ? Strings.ksQuestions : result; + } + } + + /// + /// Shortest reasonable name for the object. + /// + public override ITsString ShortNameTSS + { + get { return Name.BestAnalysisVernacularAlternative; } + } + + } } diff --git a/tests/SIL.LCModel.Tests/DomainImpl/LingTests.cs b/tests/SIL.LCModel.Tests/DomainImpl/LingTests.cs index 0add391f..9a257f89 100644 --- a/tests/SIL.LCModel.Tests/DomainImpl/LingTests.cs +++ b/tests/SIL.LCModel.Tests/DomainImpl/LingTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2002-2017 SIL International +// Copyright (c) 2002-2017 SIL International // This software is licensed under the LGPL, version 2.1 or later // (http://www.gnu.org/licenses/lgpl-2.1.html) @@ -135,6 +135,23 @@ public void NewStemNameHasFeatures() pos.StemNamesOC.Add(msn); Assert.That(msn.RegionsOC, Has.Count.EqualTo(1)); // can only be FsFeatStruc, there are no subclasses. } + + [Test] + public void Strata() + { + int ws = Cache.DefaultAnalWs; + IMoStratumFactory stratumFactory = Cache.ServiceLocator.GetInstance(); + IMoStratum stratum = stratumFactory.Create(); + Cache.LangProject.MorphologicalDataOA.StrataOS.Add(stratum); + ITsString tss = TsStringUtils.MakeString("Clitic", ws); + stratum.Name.set_String(ws, tss); + Assert.That(stratum.ChooserNameTS.Text.Equals(tss.Text)); + IPhRegularRuleFactory ruleFactory = Cache.ServiceLocator.GetInstance(); + IPhRegularRule rule = ruleFactory.Create(); + Cache.LangProject.PhonologicalDataOA.PhonRulesOS.Add(rule); + var strata = new HashSet(rule.ReferenceTargetCandidates(PhRegularRuleTags.kflidInitialStratum)); + Assert.That(strata.First().Equals(stratum)); + } }