1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2025-06-01 00:29:33 +02:00

NPE "deleteInvocation" is null

This commit is contained in:
Vadim Geraskin 2025-05-05 18:12:15 +07:00
parent e3244eb3c6
commit c26e4a9c69
2 changed files with 42 additions and 15 deletions

View File

@ -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<String> 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<Expression> 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;
}
}

View File

@ -136,7 +136,7 @@ public class TypedValueAddingToUntypedCollectionCheck
return;
}
Collection<TypeItem> actualTypes = getActualCollectionTypes(fa, expectedCollectionTypes);
Collection<TypeItem> 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<TypeItem> getActualCollectionTypes(FeatureAccess fa, Collection<TypeItem> expectedTypes)
private Collection<TypeItem> getActualCollectionTypes(FeatureAccess fa, Collection<TypeItem> expectedTypes, IProgressMonitor monitor)
{
Collection<TypeItem> 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))
{