From c2b650a8f7bdf5956b60603d9cd803b628335790 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Mon, 27 Nov 2017 13:08:50 +0100 Subject: [PATCH] Indexing sometimes stops progressing (IDEA-182716) --- .../openapi/project/FileContentQueue.java | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/project/FileContentQueue.java b/platform/platform-impl/src/com/intellij/openapi/project/FileContentQueue.java index 38bcfc443406..30573d41f8c2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/FileContentQueue.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/FileContentQueue.java @@ -1,18 +1,4 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.project; import com.intellij.ide.caches.FileContent; @@ -116,12 +102,15 @@ public class FileContentQueue { return PreloadState.CANCELLED_OR_FINISHED; } - return loadNextContent(myProgressIndicator) ? PreloadState.PRELOADED_SUCCESSFULLY : PreloadState.CANCELLED_OR_FINISHED; + if (myProgressIndicator.isCanceled()) return PreloadState.CANCELLED_OR_FINISHED; + return loadNextContent() ? PreloadState.PRELOADED_SUCCESSFULLY : PreloadState.CANCELLED_OR_FINISHED; } - private boolean loadNextContent(ProgressIndicator progressIndicator) { + private boolean loadNextContent() { + // Contract: if file is taken from myFilesQueue then it will be loaded to myLoadedContents and myContentsToLoad will be decremented VirtualFile file = myFilesQueue.poll(); - if (file == null || progressIndicator.isCanceled()) return false; + if (file == null) return false; + try { FileContent content = new FileContent(file); if (!isValidFile(file) || !doLoadContent(content)) { @@ -221,8 +210,8 @@ public class FileContentQueue { if (remainingContentsToLoad == 0) { return null; } - - if (!loadNextContent(indicator) && !indicator.isCanceled()) { + + if (!loadNextContent()) { TimeoutUtil.sleep(50); // wait a little for loading last content } }