Skip to content

Commit 46272e1

Browse files
committed
fix: TC-1631 alternative fix Wait until memory and disk content synchronized
Signed-off-by: Chao Wang <[email protected]>
1 parent 1861027 commit 46272e1

File tree

1 file changed

+40
-20
lines changed
  • src/main/java/org/jboss/tools/intellij/componentanalysis

1 file changed

+40
-20
lines changed

src/main/java/org/jboss/tools/intellij/componentanalysis/CAService.java

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,17 @@
1616
import com.intellij.openapi.components.Service;
1717
import com.intellij.openapi.components.ServiceManager;
1818
import com.intellij.openapi.diagnostic.Logger;
19+
import com.intellij.openapi.editor.Document;
1920
import com.intellij.psi.PsiDocumentManager;
2021
import com.intellij.psi.PsiFile;
2122
import com.redhat.exhort.api.v4.AnalysisReport;
2223
import com.redhat.exhort.api.v4.DependencyReport;
2324
import com.redhat.exhort.api.v4.ProviderReport;
2425
import com.redhat.exhort.api.v4.Source;
25-
import org.apache.commons.io.FileUtils;
2626
import org.jboss.tools.intellij.exhort.ApiService;
2727

2828
import java.io.IOException;
29+
import java.nio.charset.StandardCharsets;
2930
import java.nio.file.Files;
3031
import java.nio.file.Path;
3132
import java.util.Collections;
@@ -73,20 +74,9 @@ public static boolean performAnalysis(String packageManager,
7374
Set<Dependency> dependencies,
7475
PsiFile file) {
7576
if (dependenciesModified(filePath, dependencies)) {
76-
Path tempManifest;
77-
Path tempDirectory;
7877
ApiService apiService = ServiceManager.getService(ApiService.class);
79-
try {
80-
tempDirectory = Files.createTempDirectory("rhda-idea");
81-
tempManifest = Files.createFile(Path.of(tempDirectory.toString(),fileName));
82-
Files.write(tempManifest,PsiDocumentManager.getInstance(file.getProject()).getCachedDocument(file).getText().getBytes());
83-
} catch (IOException e) {
84-
throw new RuntimeException(e);
85-
}
86-
87-
// AnalysisReport report = apiService.getComponentAnalysis(packageManager, fileName, filePath);
88-
AnalysisReport report = apiService.getComponentAnalysis(packageManager, fileName, tempManifest.toString());
89-
deleteTempDir(tempDirectory);
78+
waitUntilMemoryAndDiskContentSynchronized(file, filePath);
79+
AnalysisReport report = apiService.getComponentAnalysis(packageManager, fileName, filePath);
9080
if (report == null) {
9181
throw new RuntimeException("Failed to perform component analysis, result is invalid.");
9282
}
@@ -164,13 +154,43 @@ public static boolean performAnalysis(String packageManager,
164154
return false;
165155
}
166156

167-
private static void deleteTempDir(Path tempDirectory) {
168-
try {
169-
FileUtils.deleteDirectory(tempDirectory.toFile());
170-
} catch (IOException e) {
171-
LOG.warn("Failed to delete temp directory: " + tempDirectory, e);
157+
private static void waitUntilMemoryAndDiskContentSynchronized(PsiFile file, String filePath) {
158+
Document document = PsiDocumentManager.getInstance(file.getProject()).getCachedDocument(file);
159+
if (document == null) {
160+
LOG.warn("Document is not cached for file: " + file.getName());
172161
}
173-
}
174162

163+
Path path = Path.of(filePath);
164+
long timeoutMillis = 5000;
165+
long intervalMillis = 200;
166+
long startTime = System.currentTimeMillis();
167+
168+
while (System.currentTimeMillis() - startTime < timeoutMillis) {
169+
document = PsiDocumentManager.getInstance(file.getProject()).getCachedDocument(file);
170+
String memoryContent = document.getText();
171+
String diskContent = "";
172+
173+
try {
174+
if (Files.exists(path)) {
175+
diskContent = Files.readString(path, StandardCharsets.UTF_8);
176+
} else {
177+
LOG.debug("Waiting for file to appear: " + filePath);
178+
}
179+
} catch (IOException e) {
180+
LOG.warn("Failed to read file from disk during wait: " + filePath, e);
181+
}
182+
183+
if (memoryContent.equals(diskContent)) {
184+
LOG.debug("Memory and disk content match for: " + filePath);
185+
}
175186

187+
try {
188+
Thread.sleep(intervalMillis);
189+
} catch (InterruptedException e) {
190+
Thread.currentThread().interrupt();
191+
LOG.warn("Wait interrupted");
192+
}
193+
}
194+
LOG.warn("Timeout: Memory and disk content did not match within 5 seconds for: " + filePath);
195+
}
176196
}

0 commit comments

Comments
 (0)