diff --git a/src/main/java/com/github/_1c_syntax/bsl/mdclasses/CF.java b/src/main/java/com/github/_1c_syntax/bsl/mdclasses/CF.java index 725992aa8..a6b97549d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/mdclasses/CF.java +++ b/src/main/java/com/github/_1c_syntax/bsl/mdclasses/CF.java @@ -161,6 +161,15 @@ default List includedSubsystems(MdoReference mdoReference, boolean ad .toList(); } + /** + * Возвращает локализованное представление ссылки на объект метаданных с учетом используемого варианта языка разработки + * @param md Объект метаданных, принадлежащий MDClasses + * @return Строковое представление ссылки + */ + default String getMdoRefLocal(MD md) { + return md.getMdoRef(getScriptVariant()); + } + @Override default ModuleType getModuleTypeByURI(URI uri) { return getModulesByType().getOrDefault(uri, ModuleType.UNKNOWN); diff --git a/src/main/java/com/github/_1c_syntax/bsl/mdo/MD.java b/src/main/java/com/github/_1c_syntax/bsl/mdo/MD.java index 8650eb192..13b1a6d1e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/mdo/MD.java +++ b/src/main/java/com/github/_1c_syntax/bsl/mdo/MD.java @@ -23,6 +23,7 @@ import com.github._1c_syntax.bsl.mdo.support.MultiLanguageString; import com.github._1c_syntax.bsl.mdo.support.ObjectBelonging; +import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.support.SupportVariant; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.MdoReference; @@ -60,6 +61,25 @@ default MDOType getMdoType() { */ MdoReference getMdoReference(); + /** + * Строковое представление MDO-Ссылки на объект, локализованное для указанного языка разработки + */ + default String getMdoRef(ScriptVariant scriptVariant) { + var mdoReference = getMdoReference(); + if (scriptVariant == ScriptVariant.ENGLISH) { + return mdoReference.getMdoRef(); + } else { + return mdoReference.getMdoRefRu(); + } + } + + /** + * Строковое представление MDO-Ссылки на объект + */ + default String getMdoRef() { + return getMdoReference().getMdoRef(); + } + /** * Принадлежность объекта конфигурации (собственный или заимствованный) */ diff --git a/src/test/java/com/github/_1c_syntax/bsl/mdo/EnumTest.java b/src/test/java/com/github/_1c_syntax/bsl/mdo/EnumTest.java index 864046bb5..e245e97bc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/mdo/EnumTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/mdo/EnumTest.java @@ -21,11 +21,15 @@ */ package com.github._1c_syntax.bsl.mdo; +import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.test_utils.MDTestUtils; +import com.github._1c_syntax.bsl.types.MdoReference; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.aggregator.ArgumentsAccessor; import org.junit.jupiter.params.provider.CsvSource; +import static org.assertj.core.api.Assertions.assertThat; + class EnumTest { @ParameterizedTest @CsvSource( @@ -38,5 +42,16 @@ class EnumTest { ) void test(ArgumentsAccessor argumentsAccessor) { var mdo = MDTestUtils.getMDWithSimpleTest(argumentsAccessor); + + var mdoRef = MdoReference.create(argumentsAccessor.getString(2)); + var mdoRefString = mdoRef.getMdoRef(); + var mdoRefStringRu = mdoRef.getMdoRefRu(); + + assertThat(mdo.getMdoReference()).isEqualTo(mdoRef); + assertThat(mdo.getMdoRef(ScriptVariant.ENGLISH)).isEqualTo(mdoRefString); + assertThat(mdo.getMdoRef(ScriptVariant.UNKNOWN)).isEqualTo(mdoRefStringRu); + assertThat(mdo.getMdoRef(ScriptVariant.RUSSIAN)).isEqualTo(mdoRefStringRu); + + assertThat(mdo.getMdoRef()).isEqualTo(mdo.getMdoRef(ScriptVariant.ENGLISH)); } } \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java b/src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java index 1982cac5a..fb5ebe4ad 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java +++ b/src/test/java/com/github/_1c_syntax/bsl/test_utils/MDTestUtils.java @@ -110,6 +110,7 @@ public String createJson(Object obj) { xstream.omitField(clazz, "plainItems"); xstream.omitField(clazz, "commonModulesByName"); xstream.omitField(clazz, "childrenByMdoRef"); + xstream.omitField(clazz, "mdoRef"); } catch (ClassNotFoundException e) { throw new RuntimeException(e);