void (@NotNull PsiMethodCallExpression expression) { super.visitMethodCallExpression(expression); final PsiClassType objectType = TypeUtils.getObjectType(expression); if (!MethodCallUtils.isCallToMethod(expression, "java.lang.System", PsiTypes.voidType(), "arraycopy", objectType, PsiTypes.intType(), objectType, PsiTypes.intType(), PsiTypes.intType())) { return; } final PsiExpression[] arguments = expression.getArgumentList().getExpressions(); if (arguments.length != 5) { return; } final PsiExpression srcPos = arguments[1]; final PsiExpression destPos = arguments[3]; final PsiExpression length = arguments[4]; final PsiExpression src = arguments[0]; final PsiExpression dest = arguments[2]; checkRanges(src, srcPos, dest, destPos, length, expression); final PsiType srcType = src.getType(); if (srcType == null) { return; } boolean notArrayReported = false; if (!(srcType instanceof PsiArrayType)) { registerError(src, InspectionGadgetsBundle.message("suspicious.system.arraycopy.problem.descriptor4")); notArrayReported = true; } final PsiType destType = dest.getType(); if (destType == null) { return; } if (!(destType instanceof PsiArrayType)) { registerError(dest, InspectionGadgetsBundle.message("suspicious.system.arraycopy.problem.descriptor5")); notArrayReported = true; } if (notArrayReported) { return; } final PsiArrayType srcArrayType = (PsiArrayType)srcType; final PsiArrayType destArrayType = (PsiArrayType)destType; final PsiType srcComponentType = srcArrayType.getComponentType(); final PsiType destComponentType = destArrayType.getComponentType(); if (!(srcComponentType instanceof PsiPrimitiveType)) { if (!destComponentType.isAssignableFrom(srcComponentType)) { registerError(dest, InspectionGadgetsBundle.message("suspicious.system.arraycopy.problem.descriptor6", srcType.getCanonicalText(), destType.getCanonicalText())); } } else if (!destComponentType.equals(srcComponentType)) { registerError(dest, InspectionGadgetsBundle.message("suspicious.system.arraycopy.problem.descriptor6", srcType.getCanonicalText(), destType.getCanonicalText())); } }