mirror of
https://github.com/1C-Company/v8-code-style.git
synced 2025-02-15 17:13:51 +02:00
Общая компонента для фильтрации проверок по типу модуля
This commit is contained in:
parent
1642ee75be
commit
4bafbe4e6f
@ -27,7 +27,6 @@ import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.xtext.EcoreUtil2;
|
||||
|
||||
import com._1c.g5.v8.dt.bsl.model.BinaryExpression;
|
||||
import com._1c.g5.v8.dt.bsl.model.BinaryOperation;
|
||||
@ -37,7 +36,6 @@ 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.IfStatement;
|
||||
import com._1c.g5.v8.dt.bsl.model.Invocation;
|
||||
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.Pragma;
|
||||
import com._1c.g5.v8.dt.bsl.model.Procedure;
|
||||
@ -107,6 +105,7 @@ public class EventDataExchangeLoadCheck
|
||||
.severity(IssueSeverity.MAJOR)
|
||||
.issueType(IssueType.PORTABILITY)
|
||||
.extension(new StandardCheckExtension(getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.extension(ModuleTypeFilter.onlyTypes(ModuleType.OBJECT_MODULE, ModuleType.RECORDSET_MODULE))
|
||||
.module()
|
||||
.checkedObjectType(PROCEDURE)
|
||||
.parameter(PARAM_CHECK_AT_BEGINNING, Boolean.class, DEFAULT_CHECK_AT_BEGINNING,
|
||||
@ -126,13 +125,6 @@ public class EventDataExchangeLoadCheck
|
||||
return;
|
||||
}
|
||||
|
||||
Module module = EcoreUtil2.getContainerOfType(procedure, Module.class);
|
||||
|
||||
if (!checkModuleType(module))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<Statement> statements = procedure.allStatements();
|
||||
if (statements.isEmpty())
|
||||
{
|
||||
@ -234,12 +226,6 @@ public class EventDataExchangeLoadCheck
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean checkModuleType(Module module)
|
||||
{
|
||||
return module.getModuleType() == ModuleType.OBJECT_MODULE
|
||||
|| module.getModuleType() == ModuleType.RECORDSET_MODULE;
|
||||
}
|
||||
|
||||
private boolean hasReturnStatement(IfStatement statement, IProgressMonitor monitor)
|
||||
{
|
||||
Conditional conditional = statement.getIfPart();
|
||||
|
@ -23,7 +23,6 @@ import org.eclipse.xtext.EcoreUtil2;
|
||||
import com._1c.g5.v8.dt.bsl.model.DeclareStatement;
|
||||
import com._1c.g5.v8.dt.bsl.model.ExplicitVariable;
|
||||
import com._1c.g5.v8.dt.bsl.model.Method;
|
||||
import com._1c.g5.v8.dt.bsl.model.Module;
|
||||
import com._1c.g5.v8.dt.bsl.model.ModuleType;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
@ -59,6 +58,7 @@ public class FormModuleMissingPragmaCheck
|
||||
.severity(IssueSeverity.MINOR)
|
||||
.issueType(IssueType.ERROR)
|
||||
.extension(new StandardCheckExtension(getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.extension(ModuleTypeFilter.onlyTypes(ModuleType.FORM_MODULE, ModuleType.COMMAND_MODULE))
|
||||
.module()
|
||||
.checkedObjectType(METHOD, DECLARE_STATEMENT);
|
||||
}
|
||||
@ -67,15 +67,6 @@ public class FormModuleMissingPragmaCheck
|
||||
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
|
||||
IProgressMonitor monitor)
|
||||
{
|
||||
|
||||
Module module = EcoreUtil2.getContainerOfType((EObject)object, Module.class);
|
||||
ModuleType type = module.getModuleType();
|
||||
|
||||
if (type != ModuleType.FORM_MODULE && type != ModuleType.COMMAND_MODULE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (object instanceof Method)
|
||||
{
|
||||
Method method = (Method)object;
|
||||
|
@ -17,13 +17,10 @@ import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.INVOCATION;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.emf.ecore.EObject;
|
||||
import org.eclipse.xtext.EcoreUtil2;
|
||||
|
||||
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.Invocation;
|
||||
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.Procedure;
|
||||
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
|
||||
@ -68,6 +65,7 @@ public final class InvocationFormEventHandlerCheck
|
||||
.severity(IssueSeverity.TRIVIAL)
|
||||
.issueType(IssueType.CODE_STYLE)
|
||||
.extension(new StandardCheckExtension(getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.extension(ModuleTypeFilter.onlyTypes(ModuleType.FORM_MODULE))
|
||||
.module()
|
||||
.checkedObjectType(INVOCATION);
|
||||
}
|
||||
@ -76,13 +74,6 @@ public final class InvocationFormEventHandlerCheck
|
||||
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
|
||||
IProgressMonitor monitor)
|
||||
{
|
||||
Module module = EcoreUtil2.getContainerOfType((EObject)object, Module.class);
|
||||
ModuleType type = module.getModuleType();
|
||||
if (type != ModuleType.FORM_MODULE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FeatureAccess method = ((Invocation)object).getMethodAccess();
|
||||
if (!(method instanceof StaticFeatureAccess))
|
||||
{
|
||||
|
@ -0,0 +1,117 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 1C-Soft LLC and others.
|
||||
*
|
||||
* This program and the accompanying materials are made
|
||||
* available under the terms of the Eclipse Public License 2.0
|
||||
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*
|
||||
* Contributors:
|
||||
* 1C-Soft LLC - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package com.e1c.v8codestyle.bsl.check;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.eclipse.core.runtime.Assert;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.emf.ecore.EObject;
|
||||
import org.eclipse.xtext.EcoreUtil2;
|
||||
|
||||
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.model.Module;
|
||||
import com._1c.g5.v8.dt.bsl.model.ModuleType;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
import com.e1c.g5.v8.dt.check.components.IBasicCheckExtension;
|
||||
|
||||
/**
|
||||
* The extension allows to skip checking the module by it's type.
|
||||
*
|
||||
* @author Dmitriy Marmyshev
|
||||
*/
|
||||
public final class ModuleTypeFilter
|
||||
implements IBasicCheckExtension
|
||||
{
|
||||
|
||||
/**
|
||||
* Create extension that allows to check module with certain types.
|
||||
*
|
||||
* @param types the types, cannot be {@code null}.
|
||||
* @return the module type filter, cannot return {@code null}.
|
||||
*/
|
||||
public static ModuleTypeFilter onlyTypes(ModuleType... types)
|
||||
{
|
||||
Assert.isNotNull(types);
|
||||
Set<ModuleType> include = Set.of(types);
|
||||
return new ModuleTypeFilter(include);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create extension that allows to check module with all types excluding specified.
|
||||
*
|
||||
* @param types the types, cannot be {@code null}.
|
||||
* @return the module type filter, cannot return {@code null}.
|
||||
*/
|
||||
public static ModuleTypeFilter excludeTypes(ModuleType... types)
|
||||
{
|
||||
Assert.isNotNull(types);
|
||||
Set<ModuleType> exclude = Set.of(types);
|
||||
|
||||
Set<ModuleType> include =
|
||||
Set.copyOf(ModuleType.VALUES.stream().filter(t -> !exclude.contains(t)).collect(Collectors.toSet()));
|
||||
return new ModuleTypeFilter(include);
|
||||
}
|
||||
|
||||
private final Set<ModuleType> types;
|
||||
|
||||
private ModuleTypeFilter(Set<ModuleType> types)
|
||||
{
|
||||
this.types = types;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preCheck(Object object, ICheckParameters parameters, IProgressMonitor progressMonitor)
|
||||
{
|
||||
ModuleType type = null;
|
||||
if (object instanceof EObject)
|
||||
{
|
||||
type = getModuleType((EObject)object);
|
||||
}
|
||||
else if (object instanceof IDescriptionPart)
|
||||
{
|
||||
type = getModuleType((IDescriptionPart)object);
|
||||
}
|
||||
|
||||
return type != null && types.contains(type);
|
||||
}
|
||||
|
||||
private ModuleType getModuleType(EObject context)
|
||||
{
|
||||
Module module = EcoreUtil2.getContainerOfType(context, Module.class);
|
||||
if (module == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return module.getModuleType();
|
||||
}
|
||||
|
||||
private ModuleType getModuleType(IDescriptionPart context)
|
||||
{
|
||||
IDescriptionPart parent = context;
|
||||
while (parent != null)
|
||||
{
|
||||
if (parent instanceof BslDocumentationComment)
|
||||
{
|
||||
BslDocumentationComment root = (BslDocumentationComment)parent;
|
||||
return getModuleType(root.getModule());
|
||||
}
|
||||
parent = parent.getParent();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user