1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2025-07-16 04:34:14 +02:00

Merge pull request #973 from 1C-Company/bugfix/963-invocation-server-call

#963 Исправление расчета типов для функций вызова сервера
This commit is contained in:
Dmitriy Marmyshev
2022-02-14 10:20:32 +03:00
committed by GitHub
3 changed files with 16 additions and 4 deletions

View File

@ -60,6 +60,7 @@
- Клиентский глобальный модуль: ошибочное предупреждение о некорректном типе
- Отключено создание модуля менеджера при создании перечисления
- Для проверки md-standard-attribute-synonym-empty исправлена регистрация и улучшена точность позиции ошибки
- Исправлен расчета типов возвращаемых значений функций с вызовом сервера
## 0.1.0

View File

@ -14,10 +14,10 @@ package com.e1c.v8codestyle.bsl.strict.check;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
import org.eclipse.core.resources.IProject;
@ -35,6 +35,7 @@ import com._1c.g5.v8.dt.bsl.documentation.comment.BslMultiLineCommentDocumentati
import com._1c.g5.v8.dt.bsl.model.DynamicFeatureAccess;
import com._1c.g5.v8.dt.bsl.model.ExplicitVariable;
import com._1c.g5.v8.dt.bsl.model.FeatureAccess;
import com._1c.g5.v8.dt.bsl.model.Invocation;
import com._1c.g5.v8.dt.bsl.model.SimpleStatement;
import com._1c.g5.v8.dt.bsl.resource.DynamicFeatureAccessComputer;
import com._1c.g5.v8.dt.bsl.resource.TypesComputer;
@ -50,7 +51,6 @@ import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.platform.IEObjectDynamicTypeNames;
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
import com.e1c.g5.v8.dt.check.components.BasicCheck;
import com.google.common.collect.Sets;
/**
* Abstract check of types in module objects. Allows to compute types respecting system enums,
@ -124,6 +124,12 @@ public abstract class AbstractTypeCheck
{
return true;
}
if (object instanceof Invocation && !actualEnvs.containsAny(Environments.SERVER)
&& ((Invocation)object).isIsServerCall())
{
actualEnvs = actualEnvs.add(Environments.SERVER);
}
List<TypeItem> types = computeTypes(object, actualEnvs);
if (types.isEmpty() && object instanceof ExplicitVariable)
@ -209,7 +215,6 @@ public abstract class AbstractTypeCheck
parentTypes.addAll(expectedTypes);
Collection<String> expectedTypesNames = getTypeNames(parentTypes, context);
expectedTypesNames.addAll(getCastingType(expectedTypesNames));
expectedTypesNames = Sets.newLinkedHashSet(expectedTypesNames);
if (expectedTypesNames.contains(IEObjectTypeNames.ARBITRARY)
|| expectedTypesNames.contains(IEObjectTypeNames.UNDEFINED)
|| expectedTypesNames.contains(IEObjectTypeNames.REFERENCE_TO_OBJECT_OF_INFORMATION_BASE)
@ -269,7 +274,7 @@ public abstract class AbstractTypeCheck
private static Collection<String> getTypeNames(List<TypeItem> parentTypes, EObject context)
{
Set<String> typeNames = new HashSet<>();
Set<String> typeNames = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
for (TypeItem type : parentTypes)
{
String typeName = McoreUtil.getTypeName(type);

View File

@ -30,6 +30,7 @@ import com._1c.g5.v8.dt.bsl.model.Expression;
import com._1c.g5.v8.dt.bsl.model.FeatureAccess;
import com._1c.g5.v8.dt.bsl.model.FeatureEntry;
import com._1c.g5.v8.dt.bsl.model.ImplicitVariable;
import com._1c.g5.v8.dt.bsl.model.Invocation;
import com._1c.g5.v8.dt.bsl.model.SimpleStatement;
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
import com._1c.g5.v8.dt.bsl.model.Variable;
@ -144,6 +145,11 @@ public class SimpleStatementTypeCheck
boolean canResetToUndefined = allowImplicitVarResetToUndefined && isImplicitVariableSource(left, actualEnvs);
Expression right = statment.getRight();
if (right instanceof Invocation && !actualEnvs.containsAny(Environments.SERVER)
&& ((Invocation)right).isIsServerCall())
{
actualEnvs = actualEnvs.add(Environments.SERVER);
}
List<TypeItem> newTypes = computeTypes(right, actualEnvs);
if (monitor.isCanceled())
{