You've already forked v8-code-style
mirror of
https://github.com/1C-Company/v8-code-style.git
synced 2025-07-16 20:54:14 +02:00
Merge pull request #973 from 1C-Company/bugfix/963-invocation-server-call
#963 Исправление расчета типов для функций вызова сервера
This commit is contained in:
@ -60,6 +60,7 @@
|
|||||||
- Клиентский глобальный модуль: ошибочное предупреждение о некорректном типе
|
- Клиентский глобальный модуль: ошибочное предупреждение о некорректном типе
|
||||||
- Отключено создание модуля менеджера при создании перечисления
|
- Отключено создание модуля менеджера при создании перечисления
|
||||||
- Для проверки md-standard-attribute-synonym-empty исправлена регистрация и улучшена точность позиции ошибки
|
- Для проверки md-standard-attribute-synonym-empty исправлена регистрация и улучшена точность позиции ошибки
|
||||||
|
- Исправлен расчета типов возвращаемых значений функций с вызовом сервера
|
||||||
|
|
||||||
## 0.1.0
|
## 0.1.0
|
||||||
|
|
||||||
|
@ -14,10 +14,10 @@ package com.e1c.v8codestyle.bsl.strict.check;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.TreeSet;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IProject;
|
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.DynamicFeatureAccess;
|
||||||
import com._1c.g5.v8.dt.bsl.model.ExplicitVariable;
|
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.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.model.SimpleStatement;
|
||||||
import com._1c.g5.v8.dt.bsl.resource.DynamicFeatureAccessComputer;
|
import com._1c.g5.v8.dt.bsl.resource.DynamicFeatureAccessComputer;
|
||||||
import com._1c.g5.v8.dt.bsl.resource.TypesComputer;
|
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.IEObjectDynamicTypeNames;
|
||||||
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
|
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
|
||||||
import com.e1c.g5.v8.dt.check.components.BasicCheck;
|
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,
|
* Abstract check of types in module objects. Allows to compute types respecting system enums,
|
||||||
@ -124,6 +124,12 @@ public abstract class AbstractTypeCheck
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (object instanceof Invocation && !actualEnvs.containsAny(Environments.SERVER)
|
||||||
|
&& ((Invocation)object).isIsServerCall())
|
||||||
|
{
|
||||||
|
actualEnvs = actualEnvs.add(Environments.SERVER);
|
||||||
|
}
|
||||||
|
|
||||||
List<TypeItem> types = computeTypes(object, actualEnvs);
|
List<TypeItem> types = computeTypes(object, actualEnvs);
|
||||||
|
|
||||||
if (types.isEmpty() && object instanceof ExplicitVariable)
|
if (types.isEmpty() && object instanceof ExplicitVariable)
|
||||||
@ -209,7 +215,6 @@ public abstract class AbstractTypeCheck
|
|||||||
parentTypes.addAll(expectedTypes);
|
parentTypes.addAll(expectedTypes);
|
||||||
Collection<String> expectedTypesNames = getTypeNames(parentTypes, context);
|
Collection<String> expectedTypesNames = getTypeNames(parentTypes, context);
|
||||||
expectedTypesNames.addAll(getCastingType(expectedTypesNames));
|
expectedTypesNames.addAll(getCastingType(expectedTypesNames));
|
||||||
expectedTypesNames = Sets.newLinkedHashSet(expectedTypesNames);
|
|
||||||
if (expectedTypesNames.contains(IEObjectTypeNames.ARBITRARY)
|
if (expectedTypesNames.contains(IEObjectTypeNames.ARBITRARY)
|
||||||
|| expectedTypesNames.contains(IEObjectTypeNames.UNDEFINED)
|
|| expectedTypesNames.contains(IEObjectTypeNames.UNDEFINED)
|
||||||
|| expectedTypesNames.contains(IEObjectTypeNames.REFERENCE_TO_OBJECT_OF_INFORMATION_BASE)
|
|| 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)
|
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)
|
for (TypeItem type : parentTypes)
|
||||||
{
|
{
|
||||||
String typeName = McoreUtil.getTypeName(type);
|
String typeName = McoreUtil.getTypeName(type);
|
||||||
|
@ -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.FeatureAccess;
|
||||||
import com._1c.g5.v8.dt.bsl.model.FeatureEntry;
|
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.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.SimpleStatement;
|
||||||
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
|
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
|
||||||
import com._1c.g5.v8.dt.bsl.model.Variable;
|
import com._1c.g5.v8.dt.bsl.model.Variable;
|
||||||
@ -144,6 +145,11 @@ public class SimpleStatementTypeCheck
|
|||||||
boolean canResetToUndefined = allowImplicitVarResetToUndefined && isImplicitVariableSource(left, actualEnvs);
|
boolean canResetToUndefined = allowImplicitVarResetToUndefined && isImplicitVariableSource(left, actualEnvs);
|
||||||
|
|
||||||
Expression right = statment.getRight();
|
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);
|
List<TypeItem> newTypes = computeTypes(right, actualEnvs);
|
||||||
if (monitor.isCanceled())
|
if (monitor.isCanceled())
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user