1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2025-07-17 05:02:20 +02:00

Адаптация языковых проверок под новый API

This commit is contained in:
Alexander Tretyakevich
2023-03-27 14:12:05 +07:00
parent a8b026b556
commit ed65ca0d3e
16 changed files with 197 additions and 72 deletions

View File

@ -18,6 +18,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-11
Automatic-Module-Name: com.e1c.v8codestyle.bsl
Bundle-ActivationPolicy: lazy
Import-Package: com._1c.g5.v8.bm.core;version="[8.0.0,9.0.0)",
com._1c.g5.v8.bm.integration;version="[11.0.0,12.0.0)",
com._1c.g5.v8.dt.bsl.comment;version="[3.0.0,4.0.0)",
com._1c.g5.v8.dt.bsl.common;version="[6.0.0,7.0.0)",
com._1c.g5.v8.dt.bsl.contextdef;version="[2.0.0,3.0.0)",

View File

@ -24,16 +24,23 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtext.EcoreUtil2;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.bm.integration.IBmModel;
import com._1c.g5.v8.dt.bsl.model.BslIndexPackage;
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.FeatureEntry;
import com._1c.g5.v8.dt.bsl.model.Module;
import com._1c.g5.v8.dt.bsl.model.ModuleContextDefIndex;
import com._1c.g5.v8.dt.bsl.model.OperatorStyleCreator;
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
import com._1c.g5.v8.dt.bsl.model.StringLiteral;
import com._1c.g5.v8.dt.bsl.resource.DynamicFeatureAccessComputer;
import com._1c.g5.v8.dt.bsl.resource.ExportMethodProvider;
import com._1c.g5.v8.dt.common.StringUtils;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IDtProject;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.mcore.DerivedProperty;
import com._1c.g5.v8.dt.mcore.Environmental;
import com._1c.g5.v8.dt.mcore.Method;
@ -42,6 +49,7 @@ import com._1c.g5.v8.dt.mcore.util.Environments;
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.metadata.mdclass.CommonModule;
import com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.BasicCheck;
@ -60,11 +68,9 @@ import com.google.inject.Inject;
public class NotifyDescriptionToServerProcedureCheck
extends BasicCheck
{
private static final String CD_ROOT = "/0/@contextDef"; //$NON-NLS-1$
private static final String CHECK_ID = "notify-description-to-server-procedure"; //$NON-NLS-1$
private static final String BSLCD = "bslcd"; //$NON-NLS-1$
private static final String BSL = "bsl"; //$NON-NLS-1$
private static final String THIS_OBJECT = "ThisObject"; //$NON-NLS-1$
@ -76,6 +82,13 @@ public class NotifyDescriptionToServerProcedureCheck
private final ExportMethodProvider exportMethodProvider;
private final IResourceLookup resourceLookup;
private final INamingService namingService;
private final IBmModelManager bmModelManager;
/**
* Instantiates a new notify description to server procedure check.
*
@ -84,11 +97,15 @@ public class NotifyDescriptionToServerProcedureCheck
*/
@Inject
public NotifyDescriptionToServerProcedureCheck(DynamicFeatureAccessComputer dynamicFeatureAccessComputer,
ExportMethodProvider exportMethodProvider)
ExportMethodProvider exportMethodProvider, IResourceLookup resourceLookup, INamingService namingService,
IBmModelManager bmModelManager)
{
super();
this.dynamicFeatureAccessComputer = dynamicFeatureAccessComputer;
this.exportMethodProvider = exportMethodProvider;
this.resourceLookup = resourceLookup;
this.namingService = namingService;
this.bmModelManager = bmModelManager;
}
@Override
@ -130,14 +147,27 @@ public class NotifyDescriptionToServerProcedureCheck
return;
}
String contextDefUri = getBslContexDefUri(osc);
String contextDefUriAsString = getBslModuleUri(osc);
if (monitor.isCanceled() || contextDefUri == null)
if (monitor.isCanceled() || contextDefUriAsString == null)
{
return;
}
Collection<Method> methods = exportMethodProvider.getMockMethods(contextDefUri, methodName, osc);
URI contextDefUri = URI.createURI(contextDefUriAsString, true);
IDtProject project = resourceLookup.getDtProject(contextDefUri);
String contextDefIndexFqn = namingService.getDependentObjectFqnAsString(contextDefUri,
BslIndexPackage.Literals.MODULE_CONTEXT_DEF_INDEX);
IBmModel model = bmModelManager.getModel(project);
IBmTransaction bmTransaction = model.getEngine().getCurrentTransaction();
ModuleContextDefIndex index = (ModuleContextDefIndex)bmTransaction.getTopObjectByFqn(contextDefIndexFqn);
if (index == null)
{
return;
}
Collection<Method> methods = exportMethodProvider.getMockMethods(index.getContextDef(), methodName, osc);
if (methods.isEmpty())
{
resultAceptor.addIssue(
@ -175,7 +205,7 @@ public class NotifyDescriptionToServerProcedureCheck
return null;
}
private String getBslContexDefUri(OperatorStyleCreator osc)
private String getBslModuleUri(OperatorStyleCreator osc)
{
List<Expression> params = osc.getParams();
@ -184,18 +214,18 @@ public class NotifyDescriptionToServerProcedureCheck
Expression moduleParam = params.get(1);
if (moduleParam instanceof StaticFeatureAccess)
{
return getBslContexDefUri((StaticFeatureAccess)moduleParam);
return getBslModuleUri((StaticFeatureAccess)moduleParam);
}
else if (moduleParam instanceof DynamicFeatureAccess)
{
return getBslContexDefUri((DynamicFeatureAccess)moduleParam);
return getBslModuleUri((DynamicFeatureAccess)moduleParam);
}
}
return null;
}
private String getBslContexDefUri(StaticFeatureAccess object)
private String getBslModuleUri(StaticFeatureAccess object)
{
URI uri = null;
if (object.getName().equals(THIS_OBJECT) || object.getName().equals(THIS_OBJECT_RU))
@ -206,23 +236,23 @@ public class NotifyDescriptionToServerProcedureCheck
{
uri = getCommonModuleUri(object);
}
return constructBslCdUri(uri);
return constructBslUri(uri);
}
private String getBslContexDefUri(DynamicFeatureAccess object)
private String getBslModuleUri(DynamicFeatureAccess object)
{
URI uri = getCommonModuleUri(object);
return constructBslCdUri(uri);
return constructBslUri(uri);
}
private String constructBslCdUri(URI uri)
private String constructBslUri(URI uri)
{
if (uri == null)
{
return null;
}
return uri.trimFragment().trimFileExtension().appendFileExtension(BSLCD).appendFragment(CD_ROOT).toString();
return uri.trimFragment().trimFileExtension().appendFileExtension(BSL).toString();
}
private URI getCommonModuleUri(DynamicFeatureAccess object)

View File

@ -58,6 +58,11 @@ public class RefLinkPartCheck
private final IScopeProvider scopeProvider;
/**
* Instantiates a new reference link part check.
*
* @param scopeProvider the scope provider service, cannot be {@code null}.
*/
@Inject
public RefLinkPartCheck(IResourceLookup resourceLookup, INamingService namingService,
IBmModelManager bmModelManager, IScopeProvider scopeProvider)
@ -97,7 +102,7 @@ public class RefLinkPartCheck
&& object.getParent() instanceof Description && linkPart.getPartsWithOffset().size() == 1;
if (!isWebLink(linkPart) && !isSingleWordInDescription
&& getLinkPartLastObject(linkPart, scopeProvider, root.getMethod()).isEmpty())
&& getLinkPartLastObject(linkPart, scopeProvider, root.getMethod(), typeComputationContext).isEmpty())
{
resultAceptor.addIssue(Messages.RefLinkPartCheck_Link_referenced_to_unexisting_object,
linkPart.getLineNumber(), linkPart.getLinkTextOffset(), linkPart.getLinkText().length());

View File

@ -23,18 +23,21 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
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.FeatureEntry;
import com._1c.g5.v8.dt.bsl.model.util.BslUtil;
import com._1c.g5.v8.dt.common.StringUtils;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.mcore.Environmental;
import com._1c.g5.v8.dt.mcore.TypeItem;
import com._1c.g5.v8.dt.mcore.util.Environments;
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension;
@ -65,9 +68,9 @@ public abstract class AbstractDynamicFeatureAccessTypeCheck
* @param qualifiedNameConverter the qualified name converter service, cannot be {@code null}.
*/
protected AbstractDynamicFeatureAccessTypeCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
}
@Override
@ -118,7 +121,7 @@ public abstract class AbstractDynamicFeatureAccessTypeCheck
@Override
protected final void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
DynamicFeatureAccess fa = (DynamicFeatureAccess)object;
if (StringUtils.isBlank(fa.getName()))
@ -127,8 +130,9 @@ public abstract class AbstractDynamicFeatureAccessTypeCheck
}
boolean isMethod = BslUtil.getInvocation(fa) != null;
if (isMethod == isCheckDfaMethod() && (isMethod && isEmptySource(fa) || !isMethod && isEmptyTypes(fa))
&& !monitor.isCanceled() && !isSkipSourceType(fa, parameters, monitor))
if (isMethod == isCheckDfaMethod()
&& (isMethod && isEmptySource(fa) || !isMethod && isEmptyTypes(fa, bmTransaction)) && !monitor.isCanceled()
&& !isSkipSourceType(fa, parameters, monitor))
{
String message = getErrorMessage(fa);

View File

@ -24,6 +24,7 @@ import java.util.TreeSet;
import java.util.stream.Collectors;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
@ -35,6 +36,8 @@ import org.eclipse.xtext.resource.IResourceServiceProvider;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.scoping.IScopeProvider;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.bm.integration.IBmModel;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.documentation.comment.BslMultiLineCommentDocumentationProvider;
import com._1c.g5.v8.dt.bsl.model.DynamicFeatureAccess;
@ -49,6 +52,8 @@ import com._1c.g5.v8.dt.bsl.model.Variable;
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.typesystem.util.TypeSystemUtil;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IDtProject;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.mcore.Environmental;
import com._1c.g5.v8.dt.mcore.McorePackage;
@ -58,6 +63,9 @@ import com._1c.g5.v8.dt.mcore.TypeSet;
import com._1c.g5.v8.dt.mcore.util.Environments;
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.dt.core.api.platform.BmOperationContext;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.BasicCheck;
import com.e1c.v8codestyle.internal.bsl.BslPlugin;
@ -77,6 +85,12 @@ public abstract class AbstractTypeCheck
/** The resource lookup service. */
protected final IResourceLookup resourceLookup;
/** The naming service. */
protected final INamingService namingService;
/** BM manager service. */
protected final IBmModelManager bmModelManager;
/** The BSL preferences service. */
protected final IBslPreferences bslPreferences;
@ -105,10 +119,12 @@ public abstract class AbstractTypeCheck
* @param qualifiedNameConverter the qualified name converter service, cannot be {@code null}.
*/
protected AbstractTypeCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super();
this.resourceLookup = resourceLookup;
this.namingService = namingService;
this.bmModelManager = bmModelManager;
this.bslPreferences = bslPreferences;
IResourceServiceProvider rsp =
IResourceServiceProvider.Registry.INSTANCE.getResourceServiceProvider(URI.createURI("*.bsl")); //$NON-NLS-1$
@ -122,13 +138,25 @@ public abstract class AbstractTypeCheck
}
@Override
protected void check(Object object, ResultAcceptor resultAcceptor, ICheckParameters parameters,
IProgressMonitor progressMonitor)
{
IDtProject dtProject = resourceLookup.getDtProject((EObject)object);
IBmModel bmModel = bmModelManager.getModel(dtProject);
check(object, resultAcceptor, parameters, bmModel.getEngine().getCurrentTransaction(), progressMonitor);
}
protected abstract void check(Object object, ResultAcceptor resultAcceptor, ICheckParameters parameters,
IBmTransaction bmTransaction, IProgressMonitor progressMonitor);
/**
* Checks if the object has empty types.
*
* @param object the object, cannot be {@code null}.
* @return true, if the object has empty types
*/
protected boolean isEmptyTypes(EObject object)
protected boolean isEmptyTypes(EObject object, IBmTransaction bmTransaction)
{
Environmental envs = EcoreUtil2.getContainerOfType(object, Environmental.class);
if (envs == null)
@ -151,7 +179,7 @@ public abstract class AbstractTypeCheck
if (types.isEmpty() && object instanceof ExplicitVariable)
{
Collection<TypeItem> commentTypes = computeCommentTypes(object);
Collection<TypeItem> commentTypes = computeCommentTypes(object, bmTransaction);
return commentTypes.isEmpty();
}
@ -216,13 +244,14 @@ public abstract class AbstractTypeCheck
* @param object the object, cannot be {@code null}.
* @return the collection of comment types, cannot return {@code null}.
*/
protected Collection<TypeItem> computeCommentTypes(EObject object)
protected Collection<TypeItem> computeCommentTypes(EObject object, IBmTransaction bmTransaction)
{
IScope typeScope = scopeProvider.getScope(object, McorePackage.Literals.TYPE_DESCRIPTION__TYPES);
IProject project = resourceLookup.getProject(object);
boolean oldFormatComment = bslPreferences.getDocumentCommentProperties(project).oldCommentFormat();
return TypeSystemUtil.computeCommentTypes(object, typeScope, scopeProvider, qualifiedNameConverter,
commentProvider, oldFormatComment);
commentProvider, oldFormatComment,
new BmOperationContext(namingService, bmModelManager, bmTransaction));
}
/**

View File

@ -21,12 +21,17 @@ import org.eclipse.core.runtime.IProgressMonitor;
import com._1c.g5.v8.dt.bsl.documentation.comment.BslDocumentationComment;
import com._1c.g5.v8.dt.bsl.documentation.comment.IDescriptionPart;
import com._1c.g5.v8.dt.bsl.documentation.comment.TypeSection.FieldDefinition;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.dt.core.api.platform.BmOperationContext;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.settings.IssueSeverity;
import com.e1c.g5.v8.dt.check.settings.IssueType;
import com.e1c.v8codestyle.bsl.comment.check.FieldDefinitionTypeCheck;
import com.e1c.v8codestyle.bsl.strict.StrictTypeUtil;
import com.google.inject.Inject;
/**
* Checks the documentation comment {@link FieldDefinition field} that has section with types definition.
@ -40,6 +45,18 @@ public class DocCommentFieldTypeCheck
private static final String CHECK_ID = "doc-comment-field-type-strict"; //$NON-NLS-1$
/**
* @param resourceLookup
* @param namingService
* @param bmModelManager
*/
@Inject
public DocCommentFieldTypeCheck(IResourceLookup resourceLookup, INamingService namingService,
IBmModelManager bmModelManager)
{
super(resourceLookup, namingService, bmModelManager);
}
@Override
public String getCheckId()
{
@ -62,7 +79,8 @@ public class DocCommentFieldTypeCheck
@Override
protected void checkDocumentationCommentObject(IDescriptionPart object, BslDocumentationComment root,
DocumentationCommentResultAcceptor resultAceptor, ICheckParameters parameters, IProgressMonitor monitor)
DocumentationCommentResultAcceptor resultAceptor, ICheckParameters parameters,
BmOperationContext typeComputationContext, IProgressMonitor monitor)
{
if (monitor.isCanceled() || parameters.getBoolean(PARAM_CHECK_ANNOTATION_IN_MODULE_DESCRIPTION)
&& !StrictTypeUtil.hasStrictTypeAnnotation(root.getModule()))

View File

@ -18,7 +18,9 @@ import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.model.DynamicFeatureAccess;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.google.inject.Inject;
/**
@ -41,9 +43,9 @@ public class DynamicFeatureAccessMethodNotFoundCheck
*/
@Inject
public DynamicFeatureAccessMethodNotFoundCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
}
@Override

View File

@ -18,7 +18,9 @@ import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.model.DynamicFeatureAccess;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.google.inject.Inject;
/**
@ -40,9 +42,9 @@ public class DynamicFeatureAccessTypeCheck
*/
@Inject
public DynamicFeatureAccessTypeCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
}
@Override

View File

@ -43,6 +43,7 @@ import com._1c.g5.v8.dt.bsl.model.Function;
import com._1c.g5.v8.dt.bsl.model.ReturnStatement;
import com._1c.g5.v8.dt.bsl.resource.DynamicFeatureAccessComputer;
import com._1c.g5.v8.dt.bsl.resource.TypesComputer;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.core.platform.IV8Project;
import com._1c.g5.v8.dt.core.platform.IV8ProjectManager;
@ -52,6 +53,8 @@ import com._1c.g5.v8.dt.mcore.TypeItem;
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.metadata.mdclass.ScriptVariant;
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.dt.core.api.platform.BmOperationContext;
import com.e1c.g5.v8.dt.bsl.check.DocumentationCommentBasicDelegateCheck;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
@ -111,9 +114,10 @@ public class FunctionCtorReturnSectionCheck
public FunctionCtorReturnSectionCheck(IResourceLookup resourceLookup, IV8ProjectManager v8ProjectManager,
IQualifiedNameConverter qualifiedNameConverter, IBslPreferences bslPreferences, TypesComputer typesComputer,
DynamicFeatureAccessComputer dynamicComputer, IScopeProvider scopeProvider,
BslMultiLineCommentDocumentationProvider commentProvider)
BslMultiLineCommentDocumentationProvider commentProvider, INamingService namingService,
IBmModelManager bmModelManager)
{
super();
super(resourceLookup, namingService, bmModelManager);
this.typesComputer = typesComputer;
this.dynamicComputer = dynamicComputer;
this.scopeProvider = scopeProvider;
@ -148,7 +152,8 @@ public class FunctionCtorReturnSectionCheck
@Override
protected void checkDocumentationCommentObject(IDescriptionPart object, BslDocumentationComment root,
DocumentationCommentResultAcceptor resultAceptor, ICheckParameters parameters, IProgressMonitor monitor)
DocumentationCommentResultAcceptor resultAceptor, ICheckParameters parameters,
BmOperationContext context, IProgressMonitor monitor)
{
if (monitor.isCanceled()
|| !(root.getMethod() instanceof Function)
@ -173,7 +178,7 @@ public class FunctionCtorReturnSectionCheck
boolean oldFormat = props.oldCommentFormat();
Collection<TypeItem> computedReturnTypes = root.computeReturnTypes(typeScope, scopeProvider,
qualifiedNameConverter, commentProvider, oldFormat, method);
qualifiedNameConverter, commentProvider, oldFormat, method, context);
Set<String> checkTypes = getCheckTypes(parameters);

View File

@ -16,10 +16,13 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.model.BslPackage;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.mcore.McorePackage;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension;
@ -46,9 +49,9 @@ public class FunctionReturnTypeCheck
*/
@Inject
public FunctionReturnTypeCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
}
@Override
@ -74,14 +77,14 @@ public class FunctionReturnTypeCheck
@Override
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
if (monitor.isCanceled() || !(object instanceof EObject))
{
return;
}
if (isEmptyTypes((EObject)object))
if (isEmptyTypes((EObject)object, bmTransaction))
{
resultAceptor.addIssue(Messages.FunctionReturnTypeCheck_Function_has_no_return_value_type,
McorePackage.Literals.NAMED_ELEMENT__NAME);

View File

@ -39,6 +39,7 @@ import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.util.Triple;
import org.eclipse.xtext.util.Tuples;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.documentation.comment.BslCommentUtils;
import com._1c.g5.v8.dt.bsl.documentation.comment.BslDocumentationComment;
@ -54,6 +55,7 @@ import com._1c.g5.v8.dt.bsl.model.SourceObjectLinkProvider;
import com._1c.g5.v8.dt.bsl.model.UndefinedLiteral;
import com._1c.g5.v8.dt.bsl.model.util.BslUtil;
import com._1c.g5.v8.dt.bsl.typesystem.ExportMethodTypeProvider;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.core.platform.IV8Project;
import com._1c.g5.v8.dt.core.platform.IV8ProjectManager;
@ -69,6 +71,8 @@ import com._1c.g5.v8.dt.mcore.util.Environments;
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.metadata.mdclass.ScriptVariant;
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.dt.core.api.platform.BmOperationContext;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension;
@ -137,9 +141,9 @@ public class InvocationParamIntersectionCheck
@Inject
public InvocationParamIntersectionCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter, IV8ProjectManager v8ProjectManager,
ExportMethodTypeProvider exportMethodTypeProvider)
ExportMethodTypeProvider exportMethodTypeProvider, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
this.exportMethodTypeProvider = exportMethodTypeProvider;
this.v8ProjectManager = v8ProjectManager;
}
@ -169,7 +173,7 @@ public class InvocationParamIntersectionCheck
@Override
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
if (monitor.isCanceled() || !(object instanceof EObject))
{
@ -188,16 +192,17 @@ public class InvocationParamIntersectionCheck
if (source instanceof Method)
{
boolean allowDynamicTypesCheck = parameters.getBoolean(PARAM_ALLOW_DYNAMIC_TYPES_CHECK);
checkParamTypesIntersect(inv, (Method)source, allowDynamicTypesCheck, resultAceptor, monitor);
checkParamTypesIntersect(inv, (Method)source, allowDynamicTypesCheck, resultAceptor, bmTransaction,
monitor);
}
else if (source instanceof com._1c.g5.v8.dt.mcore.Method)
{
checkParamTypesIntersect(inv, (com._1c.g5.v8.dt.mcore.Method)source, resultAceptor, monitor);
checkParamTypesIntersect(inv, (com._1c.g5.v8.dt.mcore.Method)source, resultAceptor, bmTransaction, monitor);
}
}
private void checkParamTypesIntersect(Invocation inv, com._1c.g5.v8.dt.mcore.Method method,
ResultAcceptor resultAceptor, IProgressMonitor monitor)
ResultAcceptor resultAceptor, IBmTransaction bmTransaction, IProgressMonitor monitor)
{
if (method.getParamSet().isEmpty())
{
@ -285,9 +290,11 @@ public class InvocationParamIntersectionCheck
if (docComment != null && docComment.isPresent())
{
BmOperationContext typeComputationContext =
new BmOperationContext(namingService, bmModelManager, bmTransaction);
targetTypes = docComment.get()
.computeParameterTypes(parameter.getName(), typeScope, scopeProvider, qualifiedNameConverter,
commentProvider, oldFormatComment, method);
commentProvider, oldFormatComment, method, typeComputationContext);
}
if (targetTypes.isEmpty())
@ -408,7 +415,7 @@ public class InvocationParamIntersectionCheck
}
private void checkParamTypesIntersect(Invocation inv, Method method, boolean allowDynamicTypesCheck,
ResultAcceptor resultAceptor, IProgressMonitor monitor)
ResultAcceptor resultAceptor, IBmTransaction bmTransaction, IProgressMonitor monitor)
{
Environments actualEnvs = getActualEnvironments(inv);
@ -449,10 +456,12 @@ public class InvocationParamIntersectionCheck
Collection<TypeItem> targetTypes = null;
if (docComment.isPresent() && docComment.get().getParametersSection().getParameterByName(paramName) != null)
{
BmOperationContext typeComputationContext =
new BmOperationContext(namingService, bmModelManager, bmTransaction);
// if parameter declared in doc-comment then check only declared types
targetTypes = docComment.get()
.computeParameterTypes(paramName, typeScope, scopeProvider, qualifiedNameConverter, commentProvider,
oldFormatComment, method);
oldFormatComment, method, typeComputationContext);
}
else
{

View File

@ -21,9 +21,12 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.model.FormalParam;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension;
@ -51,9 +54,9 @@ public class MethodParamTypeCheck
*/
@Inject
public MethodParamTypeCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
}
@Override
@ -78,7 +81,7 @@ public class MethodParamTypeCheck
@Override
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
if (monitor.isCanceled() || !(object instanceof EObject))
{
@ -87,7 +90,7 @@ public class MethodParamTypeCheck
FormalParam param = (FormalParam)object;
if (isEmptyTypes(param))
if (isEmptyTypes(param, bmTransaction))
{
String message =
MessageFormat.format(Messages.MethodParamTypeCheck_Method_param_N_has_no_value_type, param.getName());

View File

@ -24,6 +24,7 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.model.BslPackage;
import com._1c.g5.v8.dt.bsl.model.Expression;
@ -35,6 +36,7 @@ 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;
import com._1c.g5.v8.dt.bsl.util.BslUtil;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.core.platform.IV8ProjectManager;
import com._1c.g5.v8.dt.mcore.Environmental;
@ -42,6 +44,7 @@ import com._1c.g5.v8.dt.mcore.TypeItem;
import com._1c.g5.v8.dt.mcore.util.Environments;
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension;
@ -77,9 +80,10 @@ public class SimpleStatementTypeCheck
*/
@Inject
public SimpleStatementTypeCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IV8ProjectManager v8ProjectManager, IQualifiedNameConverter qualifiedNameConverter)
IV8ProjectManager v8ProjectManager, IQualifiedNameConverter qualifiedNameConverter,
INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
this.v8ProjectManager = v8ProjectManager;
}
@ -109,7 +113,7 @@ public class SimpleStatementTypeCheck
@Override
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
SimpleStatement statment = (SimpleStatement)object;
@ -158,7 +162,7 @@ public class SimpleStatementTypeCheck
if (left instanceof StaticFeatureAccess && !((StaticFeatureAccess)left).getFeatureEntries().isEmpty()
&& ((StaticFeatureAccess)left).getFeatureEntries().get(0).getFeature() instanceof Variable)
{
Collection<TypeItem> commentTypes = computeCommentTypes(right);
Collection<TypeItem> commentTypes = computeCommentTypes(right, bmTransaction);
newTypes.addAll(commentTypes);
}

View File

@ -20,14 +20,17 @@ import java.text.MessageFormat;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.model.EmptyExpression;
import com._1c.g5.v8.dt.bsl.model.Expression;
import com._1c.g5.v8.dt.bsl.model.OperatorStyleCreator;
import com._1c.g5.v8.dt.bsl.model.StringLiteral;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension;
@ -55,9 +58,9 @@ public class StructureCtorValueTypeCheck
*/
@Inject
public StructureCtorValueTypeCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
}
@Override
@ -82,7 +85,7 @@ public class StructureCtorValueTypeCheck
@Override
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
OperatorStyleCreator osc = (OperatorStyleCreator)object;
if (monitor.isCanceled() || osc.getParams().isEmpty()
@ -109,7 +112,7 @@ public class StructureCtorValueTypeCheck
if (totalParams > i && osc.getParams().get(i + 1) != null)
{
Expression param = osc.getParams().get(i + 1);
if (isEmptyTypes(param))
if (isEmptyTypes(param, bmTransaction))
{
param = param instanceof EmptyExpression ? literal : param;
String message = MessageFormat.format(

View File

@ -28,18 +28,21 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.model.DynamicFeatureAccess;
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.SourceObjectLinkProvider;
import com._1c.g5.v8.dt.bsl.model.util.BslUtil;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com._1c.g5.v8.dt.mcore.Method;
import com._1c.g5.v8.dt.mcore.Type;
import com._1c.g5.v8.dt.mcore.TypeItem;
import com._1c.g5.v8.dt.mcore.util.McoreUtil;
import com._1c.g5.v8.dt.platform.IEObjectTypeNames;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension;
@ -79,9 +82,9 @@ public class TypedValueAddingToUntypedCollectionCheck
*/
@Inject
public TypedValueAddingToUntypedCollectionCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
}
@Override
@ -106,7 +109,7 @@ public class TypedValueAddingToUntypedCollectionCheck
@Override
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
if (monitor.isCanceled() || !(object instanceof EObject))
{

View File

@ -24,6 +24,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import com._1c.g5.v8.bm.core.IBmTransaction;
import com._1c.g5.v8.dt.bsl.common.IBslPreferences;
import com._1c.g5.v8.dt.bsl.model.DeclareStatement;
import com._1c.g5.v8.dt.bsl.model.ExplicitVariable;
@ -31,7 +32,9 @@ import com._1c.g5.v8.dt.bsl.model.ImplicitVariable;
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;
import com._1c.g5.v8.dt.core.platform.IBmModelManager;
import com._1c.g5.v8.dt.core.platform.IResourceLookup;
import com.e1c.g5.dt.core.api.naming.INamingService;
import com.e1c.g5.v8.dt.check.CheckComplexity;
import com.e1c.g5.v8.dt.check.ICheckParameters;
import com.e1c.g5.v8.dt.check.components.ModuleTopObjectNameFilterExtension;
@ -59,9 +62,9 @@ public class VariableTypeCheck
*/
@Inject
public VariableTypeCheck(IResourceLookup resourceLookup, IBslPreferences bslPreferences,
IQualifiedNameConverter qualifiedNameConverter)
IQualifiedNameConverter qualifiedNameConverter, INamingService namingService, IBmModelManager bmModelManager)
{
super(resourceLookup, bslPreferences, qualifiedNameConverter);
super(resourceLookup, bslPreferences, qualifiedNameConverter, namingService, bmModelManager);
}
@Override
@ -87,7 +90,7 @@ public class VariableTypeCheck
@Override
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
if (monitor.isCanceled() || !(object instanceof EObject))
{
@ -96,14 +99,14 @@ public class VariableTypeCheck
if (object instanceof ImplicitVariable || object instanceof ExplicitVariable)
{
checkVariable((Variable)object, (EObject)object, resultAceptor, monitor);
checkVariable((Variable)object, (EObject)object, resultAceptor, bmTransaction, monitor);
}
else if (object instanceof SimpleStatement && ((SimpleStatement)object).getLeft() instanceof StaticFeatureAccess
&& ((StaticFeatureAccess)((SimpleStatement)object).getLeft()).getImplicitVariable() != null)
{
EObject checkType = ((SimpleStatement)object).getLeft();
Variable variable = ((StaticFeatureAccess)((SimpleStatement)object).getLeft()).getImplicitVariable();
checkVariable(variable, checkType, resultAceptor, monitor);
checkVariable(variable, checkType, resultAceptor, bmTransaction, monitor);
}
else if (object instanceof DeclareStatement)
{
@ -114,15 +117,16 @@ public class VariableTypeCheck
{
return;
}
checkVariable(variable, variable, resultAceptor, monitor);
checkVariable(variable, variable, resultAceptor, bmTransaction, monitor);
}
}
}
private void checkVariable(Variable variable, EObject checkObject, ResultAcceptor resultAceptor,
IProgressMonitor monitor)
IBmTransaction bmTransaction, IProgressMonitor monitor)
{
if (checkObject != null && variable != null && isEmptyTypes(checkObject) && !monitor.isCanceled())
if (checkObject != null && variable != null && isEmptyTypes(checkObject, bmTransaction)
&& !monitor.isCanceled())
{
String message =
MessageFormat.format(Messages.VariableTypeCheck_Variable_M_has_no_value_type, variable.getName());