1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2025-11-27 00:10:21 +02:00

Merge pull request #1089 from 1C-Company/bugfix/1086-form-self-reference

Проверка: form-self-reference не находит ошибку #1086
This commit is contained in:
Dmitriy Marmyshev
2022-07-29 12:31:03 +03:00
committed by GitHub
6 changed files with 50 additions and 21 deletions

View File

@@ -79,6 +79,7 @@
- Ложное срабатывание проверки для динамических списков с произвольным запросом: У реквизита "Ссылка" динамического списка выключен признак "Использовать всегда" #1071
- Проверка: right-... не находит ошибку для роли с включением по умолчанию #815
- Отключение проверок для заимствованных объектов в расширении #1076
- Проверка: form-self-reference не находит ошибку #1086
## 0.2.0

View File

@@ -1,6 +1,6 @@
# Outdated alias used
Usage of outdated self reference `ThisForm` (when referencing method, property or attribute)
You should use the alias `ThisObject` instead of the obsolete `ThisForm` in the form module
## Noncompliant Code Example
@@ -14,6 +14,13 @@ EndFunction
ThisForm.myParam = ThisForm.test();
```
## Noncompliant Code Example
```bsl
Notification = New NotifyDescription("ShowQueryEnding", ThisForm);
ShowQuery(Notification, QuestionText, ...);
```
## Compliant Solution
```bsl
@@ -26,5 +33,12 @@ EndFunction
ThisObject.myParam = ThisObject.test();
```
## Compliant Solution
```bsl
Notification = New NotifyDescription("ShowQueryEnding", ThisObject);
ShowQuery(Notification, QuestionText, ...);
```
## See

View File

@@ -14,6 +14,14 @@
ЭтаФорма.мояПеременная = ЭтаФорма.тест();
```
## Неправильно
```bsl
Оповещение = Новый ОписаниеОповещения("ВопросЗавершение", ЭтаФорма);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
```
## Правильно
```bsl
@@ -26,4 +34,11 @@
ЭтотОбъект.мояПеременная = ЭтотОбъект.тест();
```
## Правильно
```bsl
Оповещение = Новый ОписаниеОповещения("ВопросЗавершение", ЭтотОбъект);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
```
## См.

View File

@@ -12,16 +12,12 @@
*******************************************************************************/
package com.e1c.v8codestyle.bsl.check;
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.DYNAMIC_FEATURE_ACCESS;
import java.util.Collection;
import java.util.Set;
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.FEATURE_ACCESS__NAME;
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.STATIC_FEATURE_ACCESS;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.xtext.EcoreUtil2;
import com._1c.g5.v8.dt.bsl.model.DynamicFeatureAccess;
import com._1c.g5.v8.dt.bsl.model.Expression;
import com._1c.g5.v8.dt.bsl.model.Module;
import com._1c.g5.v8.dt.bsl.model.ModuleType;
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
@@ -44,7 +40,8 @@ public class FormSelfReferenceOutdatedCheck
{
private static final String CHECK_ID = "form-self-reference"; //$NON-NLS-1$
private static final Collection<String> OUTDATED_ALIASES = Set.of("ЭтаФорма", "ThisForm"); //$NON-NLS-1$ //$NON-NLS-2$
private static final String THIS_FORM = "ThisForm"; //$NON-NLS-1$
private static final String THIS_FORM_RU = "ЭтаФорма"; //$NON-NLS-1$
@Override
public String getCheckId()
@@ -62,30 +59,30 @@ public class FormSelfReferenceOutdatedCheck
.issueType(IssueType.CODE_STYLE)
.extension(new StandardCheckExtension(getCheckId(), BslPlugin.PLUGIN_ID))
.module()
.checkedObjectType(DYNAMIC_FEATURE_ACCESS);
.checkedObjectType(STATIC_FEATURE_ACCESS);
}
@Override
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
{
Expression featureAccessSource = ((DynamicFeatureAccess)object).getSource();
if (monitor.isCanceled() || !(featureAccessSource instanceof StaticFeatureAccess))
{
return;
}
StaticFeatureAccess source = (StaticFeatureAccess)featureAccessSource;
StaticFeatureAccess source = (StaticFeatureAccess)object;
if (isAliasOutdated(source))
{
resultAceptor.addIssue(Messages.FormSelfReferenceOutdatedCheck_Issue, source);
resultAceptor.addIssue(Messages.FormSelfReferenceOutdatedCheck_Issue, source, FEATURE_ACCESS__NAME);
}
}
private boolean isAliasOutdated(StaticFeatureAccess source)
private boolean isAliasOutdated(StaticFeatureAccess object)
{
Module module = EcoreUtil2.getContainerOfType(source, Module.class);
return module.getModuleType() == ModuleType.FORM_MODULE && OUTDATED_ALIASES.contains(source.getName());
String name = object.getName();
if (THIS_FORM_RU.equalsIgnoreCase(name) || THIS_FORM.equalsIgnoreCase(name))
{
Module module = EcoreUtil2.getContainerOfType(object, Module.class);
return module.getModuleType() == ModuleType.FORM_MODULE;
}
return false;
}
}

View File

@@ -61,9 +61,10 @@ public class FormSelfReferenceOutdatedCheckTest
public void testFormModule() throws Exception
{
List<Marker> markers = getModuleMarkers();
assertEquals(2, markers.size());
assertEquals(3, markers.size());
assertEquals("11", markers.get(0).getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
assertEquals("12", markers.get(1).getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
assertEquals("13", markers.get(2).getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
}
}

View File

@@ -10,4 +10,5 @@
Процедура Тест()
ЭтаФорма.МойРеквизит = ЭтотОбъект.МояФункция();
ThisForm.МойРеквизит = ThisObject.МояФункция();
Notification = New NotifyDescription("ShowQueryEnding", ThisForm);
КонецПроцедуры