diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/MissingTemporaryFileDeletionCheck.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/MissingTemporaryFileDeletionCheck.java index 65ecb9a0..db8cbcc1 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/MissingTemporaryFileDeletionCheck.java +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/MissingTemporaryFileDeletionCheck.java @@ -97,9 +97,8 @@ public class MissingTemporaryFileDeletionCheck return; } Expression tempFile = statement.getLeft(); - String tempFileName = getFullFeatureAccessName(tempFile); - - if (!monitor.isCanceled() && tempFileName != null && checkFileCloses(sfa, parameters, tempFileName)) + String tempFileName = getFullFeatureAccessName(tempFile, monitor); + if (tempFileName == null || checkFileCloses(sfa, parameters, tempFileName, monitor)) { return; } @@ -108,7 +107,8 @@ public class MissingTemporaryFileDeletionCheck } } - private boolean checkFileCloses(StaticFeatureAccess sfa, ICheckParameters parameters, String tempFileName) + private boolean checkFileCloses(StaticFeatureAccess sfa, ICheckParameters parameters, String tempFileName, + IProgressMonitor monitor) { List deleteFileMethods = getDeleteFileMethods(parameters); @@ -118,12 +118,16 @@ public class MissingTemporaryFileDeletionCheck boolean isTempFileOpened = false; for (FeatureAccess blockFa : EcoreUtil2.eAllOfType(block, FeatureAccess.class)) { - String featureName = getFullFeatureAccessName(blockFa); + if (monitor.isCanceled()) + { + return false; + } + String featureName = getFullFeatureAccessName(blockFa, monitor); if (featureName != null && (isTempFileMethod(featureName) || isTempFileOpened)) { isTempFileOpened = true; - if (deleteFileMethods.contains(featureName) && checkParameterInList(blockFa, tempFileName)) + if (deleteFileMethods.contains(featureName) && checkParameterInList(blockFa, tempFileName, monitor)) { return true; } @@ -146,28 +150,40 @@ public class MissingTemporaryFileDeletionCheck return METHOD_NAME.equalsIgnoreCase(methodName) || METHOD_NAME_RU.equalsIgnoreCase(methodName); } - private boolean checkParameterInList(FeatureAccess featureAccess, String parameterName) + private boolean checkParameterInList(FeatureAccess featureAccess, String parameterName, IProgressMonitor monitor) { Invocation deleteInvocation = BslUtil.getInvocation(featureAccess); + if (deleteInvocation == null) + { + return false; + } List deleteParameters = deleteInvocation.getParams(); for (Expression parameter : deleteParameters) { + if (monitor.isCanceled()) + { + return false; + } if (parameter instanceof FeatureAccess) { - String faParameterName = getFullFeatureAccessName(parameter); + String faParameterName = getFullFeatureAccessName(parameter, monitor); return faParameterName != null && faParameterName.equals(parameterName); } } return false; } - private String getFullFeatureAccessName(Expression tempFile) + private String getFullFeatureAccessName(Expression tempFile, IProgressMonitor monitor) { StringBuilder builder = new StringBuilder(); Expression expression = tempFile; while (expression instanceof DynamicFeatureAccess) { + if (monitor.isCanceled()) + { + return null; + } DynamicFeatureAccess dynamicFeatureAccess = (DynamicFeatureAccess)expression; builder.insert(0, dynamicFeatureAccess.getName()); builder.insert(0, DOT); @@ -182,5 +198,4 @@ public class MissingTemporaryFileDeletionCheck return null; } - } diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/TypedValueAddingToUntypedCollectionCheck.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/TypedValueAddingToUntypedCollectionCheck.java index 88e31767..5bb0809e 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/TypedValueAddingToUntypedCollectionCheck.java +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/TypedValueAddingToUntypedCollectionCheck.java @@ -136,7 +136,7 @@ public class TypedValueAddingToUntypedCollectionCheck return; } - Collection actualTypes = getActualCollectionTypes(fa, expectedCollectionTypes); + Collection actualTypes = getActualCollectionTypes(fa, expectedCollectionTypes, monitor); if (!actualTypes.isEmpty() && isActualCollectionItemTypeEmpty(actualTypes)) { @@ -155,7 +155,7 @@ public class TypedValueAddingToUntypedCollectionCheck Invocation inv = BslUtil.getInvocation(fa); - if (!(inv.getMethodAccess() instanceof DynamicFeatureAccess)) + if (inv == null || !(inv.getMethodAccess() instanceof DynamicFeatureAccess)) { return expectedTypes; } @@ -188,14 +188,26 @@ public class TypedValueAddingToUntypedCollectionCheck return expectedTypes; } - private Collection getActualCollectionTypes(FeatureAccess fa, Collection expectedTypes) + private Collection getActualCollectionTypes(FeatureAccess fa, Collection expectedTypes, IProgressMonitor monitor) { Collection actualTypes = new ArrayList<>(); - Invocation inv = BslUtil.getInvocation(fa); + if (monitor.isCanceled()) + { + return actualTypes; + } + Invocation invocation = BslUtil.getInvocation(fa); + if (invocation == null) + { + return actualTypes; + } for (TypeItem type : expectedTypes) { - type = (TypeItem)EcoreUtil.resolve(type, inv); + if (monitor.isCanceled()) + { + break; + } + type = (TypeItem)EcoreUtil.resolve(type, invocation); if (type.getName().equals(IEObjectTypeNames.VALUE_LIST)) {