From 4475bb24820fb0dbce6e0fe058a38e4f072007e2 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 20 Mar 2017 13:34:54 +0100 Subject: [PATCH] Cache VirtualFileManager instance in a way that is compatible with Kotlin tests (which recreate Application several times during execution) --- .../intellij/openapi/vfs/VirtualFileManager.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileManager.java b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileManager.java index 150ec7d37c3c..79431e634cf1 100644 --- a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileManager.java +++ b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -17,6 +17,7 @@ package com.intellij.openapi.vfs; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.CachedSingletonsRegistry; import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.vfs.newvfs.BulkFileListener; import com.intellij.util.io.URLUtil; @@ -41,9 +42,7 @@ public abstract class VirtualFileManager implements ModificationTracker { } }; - private static class InstanceHolder { - static final VirtualFileManager ourInstance = ApplicationManager.getApplication().getComponent(VirtualFileManager.class); - } + private static VirtualFileManager ourInstance = CachedSingletonsRegistry.markCachedField(VirtualFileManager.class); /** * Gets the instance of {@code VirtualFileManager}. @@ -52,7 +51,11 @@ public abstract class VirtualFileManager implements ModificationTracker { */ @NotNull public static VirtualFileManager getInstance() { - return InstanceHolder.ourInstance; + VirtualFileManager result = ourInstance; + if (result == null) { + ourInstance = result = ApplicationManager.getApplication().getComponent(VirtualFileManager.class); + } + return result; } /**