From acb90edc4944675544f192ba261a6a22f88373d3 Mon Sep 17 00:00:00 2001 From: Dmitriy Marmyshev Date: Wed, 26 Jan 2022 14:02:55 +0200 Subject: [PATCH] =?UTF-8?q?#928=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=83=D1=87=D0=B5=D1=82=20=D1=81=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=D1=8B=20=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../META-INF/MANIFEST.MF | 3 ++- .../autosort/ExternalDependenciesModule.java | 4 ++-- .../internal/autosort/SortBmTask.java | 10 +++++++--- .../internal/autosort/SortService.java | 18 ++++++++++++++++-- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 125530ac..66047d38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ ### Новые фичи - Функциональные опции, добавляемые 1C:Code Style, собраны в одном месте для удобного включения/выключения - в помощнике создания нового проекта или в свойствах проекта. +- В автосортировке метаданных добавлен учет системы запрета редактирования объектов (правила поддержки) ### Новые проверки diff --git a/bundles/com.e1c.v8codestyle.autosort/META-INF/MANIFEST.MF b/bundles/com.e1c.v8codestyle.autosort/META-INF/MANIFEST.MF index 692762d0..c650b30f 100644 --- a/bundles/com.e1c.v8codestyle.autosort/META-INF/MANIFEST.MF +++ b/bundles/com.e1c.v8codestyle.autosort/META-INF/MANIFEST.MF @@ -20,7 +20,8 @@ Import-Package: com._1c.g5.v8.bm.common.collections;version="[3.0.0,4.0.0)", com._1c.g5.v8.bm.integration;version="[9.0.0,10.0.0)", com._1c.g5.v8.bm.integration.event;version="[1.0.0,2.0.0)", com._1c.g5.v8.dt.core.bm.launch;version="[3.0.0,4.0.0)", - com._1c.g5.v8.dt.core.lifecycle;version="6.0.0", + com._1c.g5.v8.dt.core.lifecycle;version="[7.0.0,8.0.0)", + com._1c.g5.v8.dt.core.model;version="[6.0.0,7.0.0)", com._1c.g5.v8.dt.core.operations;version="[4.0.0,5.0.0)", com._1c.g5.v8.dt.core.platform;version="[10.0.0,11.0.0)", com._1c.g5.v8.dt.lifecycle;version="[3.0.0,4.0.0)", diff --git a/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/ExternalDependenciesModule.java b/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/ExternalDependenciesModule.java index c3c510bd..93d2da59 100644 --- a/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/ExternalDependenciesModule.java +++ b/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/ExternalDependenciesModule.java @@ -13,7 +13,7 @@ package com.e1c.v8codestyle.internal.autosort; import org.eclipse.core.runtime.Plugin; - +import com._1c.g5.v8.dt.core.model.IModelEditingSupport; import com._1c.g5.v8.dt.core.platform.IBmModelManager; import com._1c.g5.v8.dt.core.platform.IConfigurationProvider; import com._1c.g5.v8.dt.core.platform.IDtProjectManager; @@ -42,7 +42,7 @@ class ExternalDependenciesModule bind(IBmModelManager.class).toService(); bind(IConfigurationProvider.class).toService(); bind(IWorkspaceOrchestrator.class).toService(); - + bind(IModelEditingSupport.class).toService(); } } diff --git a/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/SortBmTask.java b/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/SortBmTask.java index 382e880f..3c0e2830 100644 --- a/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/SortBmTask.java +++ b/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/SortBmTask.java @@ -27,7 +27,8 @@ import org.eclipse.emf.edit.command.ChangeCommand; import com._1c.g5.v8.bm.core.IBmTransaction; import com._1c.g5.v8.bm.integration.AbstractBmTask; -import com._1c.g5.v8.bm.integration.IBmModel; +import com._1c.g5.v8.dt.core.model.EditingMode; +import com._1c.g5.v8.dt.core.model.IModelEditingSupport; import com.e1c.v8codestyle.autosort.SortItem; /** @@ -44,6 +45,8 @@ public class SortBmTask private final Collection items; + private final IModelEditingSupport modelEditingSupport; + /** * Instantiates a new sort BM task. * @@ -52,10 +55,11 @@ public class SortBmTask * * @param items the unmodifiable collection of items to sort, cannot be {@code null}. */ - public SortBmTask(final Collection items) + public SortBmTask(final Collection items, IModelEditingSupport modelEditingSupport) { super("Sort Md objects"); //$NON-NLS-1$ this.items = new ArrayList<>(items); + this.modelEditingSupport = modelEditingSupport; } @Override @@ -74,7 +78,7 @@ public class SortBmTask } EObject parent = transaction.getTopObjectByFqn(item.getFqn()); - if (parent != null) + if (parent != null && modelEditingSupport.canEdit(parent, EditingMode.DIRECT)) { Object value = parent.eGet(item.getListRef()); if (!(value instanceof List)) diff --git a/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/SortService.java b/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/SortService.java index 8a2ce2bc..342cfc50 100644 --- a/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/SortService.java +++ b/bundles/com.e1c.v8codestyle.autosort/src/com/e1c/v8codestyle/internal/autosort/SortService.java @@ -51,6 +51,7 @@ import com._1c.g5.v8.bm.integration.IBmModel; import com._1c.g5.v8.bm.integration.event.BmEventFilter; import com._1c.g5.v8.bm.integration.event.IBmAsyncEventListener; import com._1c.g5.v8.dt.core.lifecycle.ProjectContext; +import com._1c.g5.v8.dt.core.model.IModelEditingSupport; import com._1c.g5.v8.dt.core.platform.IBmModelManager; import com._1c.g5.v8.dt.core.platform.IConfigurationProvider; import com._1c.g5.v8.dt.core.platform.IDtProject; @@ -91,19 +92,32 @@ public class SortService private final IWorkspaceOrchestrator workspaceOrchestrator; + private final IModelEditingSupport modelEditingSupport; + private final BmEventFilter filter = BmEventFilter.eClassChangeFilter(MdClassPackage.Literals.MD_OBJECT); private final Map projectListeners = new ConcurrentHashMap<>(); private final Map jobs = new ConcurrentHashMap<>(); + /** + * Instantiates a new sort service. + * + * @param dtProjectManager the DT project manager service, cannot be {@code null}. + * @param modelManager the model manager service, cannot be {@code null}. + * @param configurationProvider the configuration provider service, cannot be {@code null}. + * @param workspaceOrchestrator the workspace orchestrator service, cannot be {@code null}. + * @param modelEditingSupport the model editing support service, cannot be {@code null}. + */ @Inject public SortService(IDtProjectManager dtProjectManager, IBmModelManager modelManager, - IConfigurationProvider configurationProvider, IWorkspaceOrchestrator workspaceOrchestrator) + IConfigurationProvider configurationProvider, IWorkspaceOrchestrator workspaceOrchestrator, + IModelEditingSupport modelEditingSupport) { this.dtProjectManager = dtProjectManager; this.modelManager = modelManager; this.configurationProvider = configurationProvider; this.workspaceOrchestrator = workspaceOrchestrator; + this.modelEditingSupport = modelEditingSupport; } @LifecycleParticipant(phase = LifecyclePhase.RESOURCE_LOADING, @@ -205,7 +219,7 @@ public class SortService return Status.OK_STATUS; } - model.getGlobalContext().execute(new SortBmTask(items)); + model.getGlobalContext().execute(new SortBmTask(items, modelEditingSupport)); return Status.OK_STATUS; }