@@ -204,9 +204,12 @@ public void updateCachedResultsForFiles(
204204 @ NotNull Collection <Object > allProjectFiles ,
205205 @ NotNull Object progress ) {
206206 Collection <Object > filesToRemove = mapProject2RemovedFiles .remove (project );
207- if (filesToRemove == null ) filesToRemove = Collections .emptyList ();
208- // remove from server only files physically removed from Project
209- filesToRemove .removeAll (allProjectFiles );
207+ if (filesToRemove == null ) {
208+ filesToRemove = Collections .emptyList ();
209+ } else {
210+ // remove from server only files physically removed from Project
211+ filesToRemove .removeAll (allProjectFiles );
212+ }
210213 if (allProjectFiles .isEmpty () && filesToRemove .isEmpty ()) {
211214 dcLogger .logWarn ("updateCachedResultsForFiles requested for empty list of files" );
212215 return ;
@@ -304,7 +307,11 @@ private Map<Object, List<SuggestionForFile>> retrieveSuggestions(
304307 if (filesToProceed .isEmpty ()) { // no sense to proceed
305308 return EMPTY_MAP ;
306309 }
307- uploadFilesStep (project , filesToProceed , missingFiles , progress );
310+ boolean filesUploaded = uploadFilesStep (project , filesToProceed , missingFiles , progress );
311+ if (!filesUploaded ) { // no sense to proceed
312+ dcLogger .logWarn ("Files upload FAIL" );
313+ return EMPTY_MAP ;
314+ }
308315
309316 // ---------------------------------------- Get Analysis
310317 final String bundleId = mapProject2BundleId .getOrDefault (project , "" );
@@ -385,7 +392,7 @@ private List<String> createBundleStep(
385392 }
386393
387394 /** Perform costly network request. <b>No cache checks!</b> */
388- private void uploadFilesStep (
395+ private boolean uploadFilesStep (
389396 @ NotNull Object project ,
390397 @ NotNull Collection <Object > filesToProceed ,
391398 @ NotNull List <String > missingFiles ,
@@ -401,24 +408,26 @@ private void uploadFilesStep(
401408 dcLogger .logInfo ("No missingFiles to Upload" );
402409 } else {
403410 final int attempts = 5 ;
404- for (int counter = 0 ; counter < attempts ; counter ++) {
405- uploadFiles (project , filesToProceed , missingFiles , bundleId , progress );
406- missingFiles = checkBundle (project , bundleId );
407- if (missingFiles .isEmpty ()) {
408- break ;
409- } else {
411+ int counter = 0 ;
412+ while (!missingFiles .isEmpty () && counter < attempts ) {
413+ if (counter > 0 ) {
410414 dcLogger .logWarn (
411415 "Check Bundle found "
412416 + missingFiles .size ()
413- + " missingFiles (NOT uploaded), will try to upload "
417+ + " missingFiles (NOT uploaded), will try to re- upload "
414418 + (attempts - counter )
415419 + " more times:\n missingFiles = "
416420 + missingFiles );
417421 }
422+ uploadFiles (project , filesToProceed , missingFiles , bundleId , progress );
423+ List <String > newMissingFiles = checkBundle (project , bundleId );
424+ missingFiles = (newMissingFiles != null ) ? newMissingFiles : missingFiles ;
425+ counter ++;
418426 }
419427 }
420428 dcLogger .logInfo (
421429 "--- Upload Files took: " + (System .currentTimeMillis () - startTime ) + " milliseconds" );
430+ return missingFiles .isEmpty ();
422431 }
423432
424433 private void uploadFiles (
@@ -471,14 +480,14 @@ private void uploadFiles(
471480 /**
472481 * Checks the status of a bundle: if there are still missing files after uploading
473482 *
474- * @return list of the current missingFiles.
483+ * @return list of the current missingFiles or NULL if not succeed .
475484 */
476- @ NotNull
485+ @ Nullable
477486 private List <String > checkBundle (@ NotNull Object project , @ NotNull String bundleId ) {
478487 CreateBundleResponse checkBundleResponse =
479488 DeepCodeRestApi .checkBundle (deepCodeParams .getSessionToken (), bundleId );
480489 if (isNotSucceed (project , checkBundleResponse , "Bad CheckBundle request: " )) {
481- return Collections . emptyList () ;
490+ return null ;
482491 }
483492 return checkBundleResponse .getMissingFiles ();
484493 }
@@ -568,8 +577,10 @@ private GetAnalysisResponse doGetAnalysis(
568577 List <String > filesToAnalyse ) {
569578 GetAnalysisResponse response ;
570579 int counter = 0 ;
580+ int failWith404counts = 0 ;
571581 final long timeout = deepCodeParams .getTimeoutForGettingAnalysesMs ();
572582 final long attempts = timeout / PlatformDependentUtilsBase .DEFAULT_DELAY ;
583+ final long endTime = System .currentTimeMillis () + timeout ;
573584 do {
574585 if (counter > 0 ) pdUtils .delay (PlatformDependentUtilsBase .DEFAULT_DELAY , progress );
575586 response =
@@ -583,8 +594,15 @@ private GetAnalysisResponse doGetAnalysis(
583594
584595 pdUtils .progressCheckCanceled (progress );
585596 dcLogger .logInfo (response .toString ());
586- if (isNotSucceed (project , response , "Bad GetAnalysis request: " ))
587- return new GetAnalysisResponse ();
597+ if (isNotSucceed (project , response , "Bad GetAnalysis request: " )) {
598+ if (response .getStatusCode () != 404 || failWith404counts >= 5 ) {
599+ return new GetAnalysisResponse ();
600+ } else {
601+ failWith404counts ++;
602+ }
603+ } else {
604+ failWith404counts = 0 ;
605+ }
588606
589607 double responseProgress = response .getProgress ();
590608 if (responseProgress <= 0 || responseProgress > 1 ) {
@@ -594,7 +612,7 @@ private GetAnalysisResponse doGetAnalysis(
594612 pdUtils .progressSetText (
595613 progress , WAITING_FOR_ANALYSIS_TEXT + (int ) (responseProgress * 100 ) + "% done" );
596614
597- if (counter >= attempts ) {
615+ if (System . currentTimeMillis () >= endTime ) {
598616 dcLogger .logWarn ("Timeout expire for waiting analysis results." );
599617 pdUtils .showWarn (
600618 "Can't get analysis results from the server. Timeout of "
0 commit comments