Skip to content

Commit 6f53167

Browse files
authored
Объединение конфигураций и расширений (#534)
1 parent 16a7889 commit 6f53167

File tree

218 files changed

+3784
-229
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

218 files changed

+3784
-229
lines changed

src/main/java/com/github/_1c_syntax/bsl/mdclasses/CF.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public interface CF extends MDClass, ConfigurationTree, CFAccess {
110110
/**
111111
* Возвращает соответствие типов модулей их путям к файлам для дочернего объекта
112112
*/
113-
default Map<ModuleType, URI> mdoModuleTypes(MdoReference mdoReference) {
113+
default Map<ModuleType, List<URI>> mdoModuleTypes(MdoReference mdoReference) {
114114
var child = findChild(mdoReference);
115115
if (child.isPresent() && child.get() instanceof ModuleOwner moduleOwner) {
116116
return moduleOwner.getModuleTypes();
@@ -122,7 +122,7 @@ default Map<ModuleType, URI> mdoModuleTypes(MdoReference mdoReference) {
122122
/**
123123
* Возвращает соответствие типов модулей их путям к файлам для дочернего объекта
124124
*/
125-
default Map<ModuleType, URI> mdoModuleTypes(String mdoRef) {
125+
default Map<ModuleType, List<URI>> mdoModuleTypes(String mdoRef) {
126126
return mdoModuleTypes(MdoReference.create(mdoRef));
127127
}
128128

src/main/java/com/github/_1c_syntax/bsl/mdclasses/Configuration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104
* Корневой класс конфигурации 1с
105105
*/
106106
@Value
107-
@Builder
107+
@Builder(toBuilder = true)
108108
@ToString(of = {"name", "uuid"})
109109
@EqualsAndHashCode(of = {"name", "uuid"})
110110
public class Configuration implements CF {

src/main/java/com/github/_1c_syntax/bsl/mdclasses/ConfigurationExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
* Класс расширения конфигурации 1с
104104
*/
105105
@Value
106-
@Builder
106+
@Builder(toBuilder = true)
107107
@ToString(of = {"name", "uuid"})
108108
@EqualsAndHashCode(of = {"name", "uuid"})
109109
public class ConfigurationExtension implements CF {

src/main/java/com/github/_1c_syntax/bsl/mdclasses/ExternalDataProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
* Внешняя обработка
4848
*/
4949
@Value
50-
@Builder
50+
@Builder(toBuilder = true)
5151
@ToString(of = {"name", "uuid"})
5252
@EqualsAndHashCode(of = {"name", "uuid"})
5353
public class ExternalDataProcessor implements ExternalSource {

src/main/java/com/github/_1c_syntax/bsl/mdclasses/ExternalReport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
* Внешний отчет
4848
*/
4949
@Value
50-
@Builder
50+
@Builder(toBuilder = true)
5151
@ToString(of = {"name", "uuid"})
5252
@EqualsAndHashCode(of = {"name", "uuid"})
5353
public class ExternalReport implements ExternalSource {

src/main/java/com/github/_1c_syntax/bsl/mdclasses/MDClasses.java

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
package com.github._1c_syntax.bsl.mdclasses;
2323

24+
import com.github._1c_syntax.bsl.reader.MDMerger;
2425
import com.github._1c_syntax.bsl.reader.MDOReader;
2526
import com.github._1c_syntax.bsl.types.MDOType;
2627
import lombok.experimental.UtilityClass;
@@ -128,9 +129,53 @@ public List<MDClass> createConfigurations(Path sourcePath) {
128129
*/
129130
@Deprecated(since = "0.16.0")
130131
public List<MDClass> createConfigurations(Path sourcePath, boolean skipSupport) {
131-
return findFiles(sourcePath, SEARCH_CONFIGURATION).parallelStream()
132-
.map(path -> createConfiguration(path, MDCReadSettings.builder().skipSupport(skipSupport).build()))
133-
.toList();
132+
return createConfigurations(sourcePath, MDCReadSettings.builder().skipSupport(skipSupport).build());
133+
}
134+
135+
/**
136+
* Читает каталог проекта и
137+
* - возвращает объект MDClass, если содержится только один объект MDC
138+
* - возвращает объединенную конфигурацию с расширениями
139+
* - возвращает объединение расширений с пустой конфигурацией
140+
*
141+
* @param sourcePath Путь к каталогу исходников
142+
* @return Результат чтения решения
143+
*/
144+
public MDClass createSolution(Path sourcePath) {
145+
var mdcs = createConfigurations(sourcePath, MDCReadSettings.DEFAULT);
146+
147+
if (mdcs.isEmpty()) {
148+
return Configuration.EMPTY;
149+
} else if (mdcs.size() == 1) {
150+
return mdcs.get(0);
151+
} else {
152+
var mdc = mdcs.stream().filter(Configuration.class::isInstance).map(Configuration.class::cast).findFirst();
153+
var cf = mdc.orElse(Configuration.EMPTY);
154+
var extensions = mdcs.stream()
155+
.filter(ConfigurationExtension.class::isInstance)
156+
.map(ConfigurationExtension.class::cast)
157+
.toList();
158+
159+
if (cf.isEmpty()) {
160+
if (extensions.isEmpty()) {
161+
// вернем первое значение, т.к. там нет ни конфы, ни расширений
162+
return mdcs.get(0);
163+
} else if (extensions.size() == 1) {
164+
// есть одно расширение, вернем его
165+
return extensions.get(0);
166+
}
167+
} else if (extensions.isEmpty()) {
168+
// расширений нет, вернем конфигурацию
169+
return cf;
170+
}
171+
172+
// объединим расширения с конфигурацией в одно целое
173+
var result = cf;
174+
for (var extension : extensions) {
175+
result = MDMerger.merge(result, extension);
176+
}
177+
return result;
178+
}
134179
}
135180

136181
/**

src/main/java/com/github/_1c_syntax/bsl/mdo/AccountingRegister.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
import java.util.List;
4545

4646
@Value
47-
@Builder
47+
@Builder(toBuilder = true)
4848
@ToString(of = {"name", "uuid"})
4949
@EqualsAndHashCode(of = {"name", "uuid"})
5050
public class AccountingRegister implements Register, AccessRightsOwner {

src/main/java/com/github/_1c_syntax/bsl/mdo/AccumulationRegister.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
import java.util.List;
4545

4646
@Value
47-
@Builder
47+
@Builder(toBuilder = true)
4848
@ToString(of = {"name", "uuid"})
4949
@EqualsAndHashCode(of = {"name", "uuid"})
5050
public class AccumulationRegister implements Register, AccessRightsOwner {

src/main/java/com/github/_1c_syntax/bsl/mdo/Bot.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import java.util.List;
3636

3737
@Value
38-
@Builder
38+
@Builder(toBuilder = true)
3939
@ToString(of = {"name", "uuid"})
4040
@EqualsAndHashCode(of = {"name", "uuid"})
4141
public class Bot implements MDObject, ModuleOwner {

src/main/java/com/github/_1c_syntax/bsl/mdo/BusinessProcess.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
import java.util.List;
4343

4444
@Value
45-
@Builder
45+
@Builder(toBuilder = true)
4646
@ToString(of = {"name", "uuid"})
4747
@EqualsAndHashCode(of = {"name", "uuid"})
4848
public class BusinessProcess implements ReferenceObject, AccessRightsOwner {

0 commit comments

Comments
 (0)