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:
parent
e3244eb3c6
commit
c26e4a9c69
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user