You've already forked v8-code-style
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:
@@ -79,6 +79,7 @@
|
||||
- Ложное срабатывание проверки для динамических списков с произвольным запросом: У реквизита "Ссылка" динамического списка выключен признак "Использовать всегда" #1071
|
||||
- Проверка: right-... не находит ошибку для роли с включением по умолчанию #815
|
||||
- Отключение проверок для заимствованных объектов в расширении #1076
|
||||
- Проверка: form-self-reference не находит ошибку #1086
|
||||
|
||||
## 0.2.0
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -14,6 +14,14 @@
|
||||
ЭтаФорма.мояПеременная = ЭтаФорма.тест();
|
||||
```
|
||||
|
||||
## Неправильно
|
||||
|
||||
```bsl
|
||||
Оповещение = Новый ОписаниеОповещения("ВопросЗавершение", ЭтаФорма);
|
||||
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
|
||||
```
|
||||
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
@@ -26,4 +34,11 @@
|
||||
ЭтотОбъект.мояПеременная = ЭтотОбъект.тест();
|
||||
```
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
Оповещение = Новый ОписаниеОповещения("ВопросЗавершение", ЭтотОбъект);
|
||||
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,4 +10,5 @@
|
||||
Процедура Тест()
|
||||
ЭтаФорма.МойРеквизит = ЭтотОбъект.МояФункция();
|
||||
ThisForm.МойРеквизит = ThisObject.МояФункция();
|
||||
Notification = New NotifyDescription("ShowQueryEnding", ThisForm);
|
||||
КонецПроцедуры
|
||||
Reference in New Issue
Block a user