From 1c80483edb5de658dfa948d39f826f68346347d5 Mon Sep 17 00:00:00 2001 From: Dzyuba Maksim Date: Fri, 25 Aug 2023 10:51:09 +0300 Subject: [PATCH] =?UTF-8?q?G5V8DT-23827=20=D0=9E=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D1=87=D0=BD=D1=8B=D0=B5=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D0=BA=D0=B8=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D1=83=D1=8E=D1=89=D0=B8=D0=BC=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check/FunctionCtorReturnSectionCheck.java | 48 +++++++++++-------- .../constructor-function-return-section.bsl | 23 +++++++++ .../itests/CommonModuleStrictTypesTest.java | 8 +++- 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/FunctionCtorReturnSectionCheck.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/FunctionCtorReturnSectionCheck.java index f531305a..7e144529 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/FunctionCtorReturnSectionCheck.java +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/FunctionCtorReturnSectionCheck.java @@ -21,12 +21,16 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.Spliterator; +import java.util.Spliterators; import java.util.TreeSet; import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.naming.IQualifiedNameConverter; import org.eclipse.xtext.scoping.IScope; import org.eclipse.xtext.scoping.IScopeProvider; @@ -152,11 +156,10 @@ public class FunctionCtorReturnSectionCheck @Override protected void checkDocumentationCommentObject(IDescriptionPart object, BslDocumentationComment root, - DocumentationCommentResultAcceptor resultAceptor, ICheckParameters parameters, - BmOperationContext context, IProgressMonitor monitor) + DocumentationCommentResultAcceptor resultAceptor, ICheckParameters parameters, BmOperationContext context, + IProgressMonitor monitor) { - if (monitor.isCanceled() - || !(root.getMethod() instanceof Function) + if (monitor.isCanceled() || !(root.getMethod() instanceof Function) || parameters.getBoolean(PARAM_CHECK_ANNOTATION_IN_MODULE_DESCRIPTION) && !StrictTypeUtil.hasStrictTypeAnnotation(root.getModule())) { @@ -189,14 +192,13 @@ public class FunctionCtorReturnSectionCheck if (isUserDataTypes(computedReturnTypeNames, checkTypes)) { - - //@formatter:off - List returns = method.allStatements() - .stream() - .filter(ReturnStatement.class::isInstance) - .map(ReturnStatement.class::cast) - .collect(Collectors.toList()); - //@formatter:on + List returns = + StreamSupport + .stream(Spliterators.spliteratorUnknownSize(EcoreUtil2.getAllContents(method, false), + Spliterator.ORDERED), false) + .filter(ReturnStatement.class::isInstance) + .map(ReturnStatement.class::cast) + .collect(Collectors.toList()); Resource res = method.eResource(); @@ -282,19 +284,25 @@ public class FunctionCtorReturnSectionCheck .flatMap(p -> p.getTypes().stream()) .collect(Collectors.toList()); - List types2 = types.stream() - .filter(t -> { - String typeName = McoreUtil.getTypeName(t); - return typeName != null && !declaredType.contains(typeName); - }) - .collect(Collectors.toList()); + List missingTypes = types.stream().filter(t -> { + String typeName = McoreUtil.getTypeName(t); + if (typeName != null) + { + if (!declaredType.contains(typeName)) + { + return !"CommonModule".equals(McoreUtil.getTypeCategory(t)) //$NON-NLS-1$ + || !declaredType.contains("CommonModule"); //$NON-NLS-1$ + } + } + return false; + }).collect(Collectors.toList()); if (types.isEmpty()) { addWarningDeclaredNonReturningProperty(statment, useRussianScript, declaredProperty, resultAceptor); } - else if (!types2.isEmpty()) + else if (!missingTypes.isEmpty()) { - addWarningDeclaredNonReturningPropertyType(statment, useRussianScript, declaredProperty, types2, + addWarningDeclaredNonReturningPropertyType(statment, useRussianScript, declaredProperty, missingTypes, resultAceptor); } } diff --git a/tests/com.e1c.v8codestyle.bsl.itests/resources/strict/constructor-function-return-section.bsl b/tests/com.e1c.v8codestyle.bsl.itests/resources/strict/constructor-function-return-section.bsl index 03345a9e..1f36fed3 100644 --- a/tests/com.e1c.v8codestyle.bsl.itests/resources/strict/constructor-function-return-section.bsl +++ b/tests/com.e1c.v8codestyle.bsl.itests/resources/strict/constructor-function-return-section.bsl @@ -20,3 +20,26 @@ Function Complaint() Export EndFunction +// Returns: +// Structure - complaint: +// * Key1 - Number - +// * Key2 - String - +Function MissingReturnType() Export + if (1 < 1) then + return true; + endif; + + return new Structure("Key1, Key2", 10, ""); +EndFunction + +// Returns: +// Structure - complaint: +// * Key1 - Number - +// * Key2 - CommonModule - +Function CorrectCheckForCommonModule() Export + + return new Structure("Key1, Key2", 10, CommonModule); +EndFunction + + + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/strict/check/itests/CommonModuleStrictTypesTest.java b/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/strict/check/itests/CommonModuleStrictTypesTest.java index 45e3e663..abe265ae 100644 --- a/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/strict/check/itests/CommonModuleStrictTypesTest.java +++ b/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/strict/check/itests/CommonModuleStrictTypesTest.java @@ -387,11 +387,11 @@ public class CommonModuleStrictTypesTest Module module = updateAndGetModule(checkId); List finctions = EcoreUtil2.eAllOfType(module, Function.class); - assertEquals(2, finctions.size()); + assertEquals(4, finctions.size()); List markers = getMarters(checkId, module); - assertEquals(2, markers.size()); + assertEquals(3, markers.size()); Marker marker = markers.get(0); assertEquals("9", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); @@ -399,6 +399,10 @@ public class CommonModuleStrictTypesTest marker = markers.get(1); assertEquals("9", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); + // missing type + marker = markers.get(2); + assertEquals("29", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); + } /**