[platform] IJPL-224518 Cleanup private modifier usages with extensions/services in intellij.java

GitOrigin-RevId: 631ef5d79777e3567ed571f2902936d7ccab2b2d
This commit is contained in:
Yuriy Artamonov
2025-12-22 22:17:32 +00:00
committed by intellij-monorepo-bot
parent 5e6ce05858
commit 782d94c537
44 changed files with 47 additions and 49 deletions
@@ -8,7 +8,7 @@ import com.intellij.openapi.startup.ProjectActivity
import com.intellij.packaging.artifacts.ArtifactManager
import com.intellij.packaging.artifacts.ArtifactType
private class ArtifactTypeFeatureCollector : ProjectActivity {
internal class ArtifactTypeFeatureCollector : ProjectActivity {
override suspend fun execute(project: Project) {
serviceAsync<PluginFeatureService>().collectFeatureMapping(
ArtifactManager.FEATURE_TYPE,
@@ -7,7 +7,7 @@ import com.intellij.platform.debugger.impl.shared.FrontendDescriptorStateManager
import com.intellij.xdebugger.frame.XDescriptor
import kotlinx.coroutines.CoroutineScope
private class JavaValueDescriptorStateExtension : FrontendDescriptorStateManagerExtension {
internal class JavaValueDescriptorStateExtension : FrontendDescriptorStateManagerExtension {
override fun createState(descriptor: XDescriptor, cs: CoroutineScope): Any? {
if (descriptor !is JavaValueDescriptor) return null
return JavaValueDescriptorState(descriptor, cs)
@@ -539,7 +539,7 @@ private fun splitFirstTwoAndRemainingLines(text: String): Triple<String, String,
return Triple(first, second, remaining)
}
private class JavaVirtualThreadsProvider : ThreadDumpItemsProviderFactory() {
internal class JavaVirtualThreadsProvider : ThreadDumpItemsProviderFactory() {
override fun getProvider(context: DebuggerContextImpl) = object : ThreadDumpItemsProvider {
val vm = context.debugProcess!!.virtualMachineProxy
@@ -71,7 +71,7 @@ internal class SteppingProgressTracker(private val debuggerProcessImpl: DebugPro
}
}
private class CancelingSteppingListener : SteppingListener {
internal class CancelingSteppingListener : SteppingListener {
override fun beforeSteppingStarted(suspendContext: SuspendContextImpl, steppingAction: SteppingAction) {
val debuggerProcessImpl: DebugProcessImpl = suspendContext.debugProcess
val filter: LightOrRealThreadInfo? = debuggerProcessImpl.requestsManager.filterThread
@@ -20,7 +20,7 @@ import com.intellij.util.containers.ContainerUtil
import com.sun.jdi.*
import java.util.*
private class JavaDfaAssistProvider : DfaAssistProvider {
internal class JavaDfaAssistProvider : DfaAssistProvider {
override suspend fun locationMatches(element: PsiElement, location: Location): Boolean {
val method = location.method()
val methodName = method.name()
@@ -10,7 +10,7 @@ import com.sun.jdi.ClassType
private val HELPER_CLASS_CACHE_KEY = Key.create<HelperClassCache>("HELPER_CLASS_CACHE_KEY")
private class JdiHelperClassLoaderImpl : JdiHelperClassLoader {
internal class JdiHelperClassLoaderImpl : JdiHelperClassLoader {
@Throws(EvaluateException::class)
override fun getHelperClass(
cls: Class<*>, evaluationContext: EvaluationContextImpl,
@@ -10,7 +10,7 @@ import com.intellij.xdebugger.hotswap.HotSwapProvider
import com.intellij.xdebugger.hotswap.HotSwapResultListener
import com.intellij.xdebugger.impl.hotswap.HotSwapDebugSessionManager
private class JvmHotSwapInDebugSessionEnabler : HotSwapInDebugSessionEnabler {
internal class JvmHotSwapInDebugSessionEnabler : HotSwapInDebugSessionEnabler {
override fun createProvider(process: XDebugProcess): HotSwapProvider<*>? {
val session = (process as? JavaDebugProcess)?.debuggerSession ?: return null
return JvmHotSwapProvider(session)
@@ -63,7 +63,7 @@ data class AdditionalContextElement(val name: String, val jvmSignature: String,
* This icon provider works only for elements with [AdditionalContextProvider.ADDITIONAL_CONTEXT_ELEMENT_KEY] set,
* so it should be only elements suggested in evaluation.
*/
private class AdditionalContextIconProvider : IconProvider(), DumbAware {
internal class AdditionalContextIconProvider : IconProvider(), DumbAware {
override fun getIcon(element: PsiElement, flags: Int): Icon? {
val contextElement = element.getUserData(AdditionalContextProvider.ADDITIONAL_CONTEXT_ELEMENT_KEY) ?: return null
return contextElement.icon
@@ -15,7 +15,7 @@ import com.intellij.xdebugger.XDebuggerBundle
import com.intellij.xdebugger.impl.hotswap.HotSwapUiExtension
import javax.swing.Icon
private class JvmHotSwapUiExtension : HotSwapUiExtension {
internal class JvmHotSwapUiExtension : HotSwapUiExtension {
override fun isApplicable(): Boolean = PlatformUtils.isIntelliJ() || PlatformUtils.isJetBrainsClient()
override fun showFloatingToolbar(project: Project) = DebuggerSettings.getInstance().HOTSWAP_SHOW_FLOATING_BUTTON
@@ -25,7 +25,7 @@ private class JvmHotSwapUiExtension : HotSwapUiExtension {
override fun popupMenuActions() = DefaultActionGroup(ToggleShowButtonAction())
}
private class ToggleShowButtonAction : DumbAwareToggleAction(XDebuggerBundle.message("label.debugger.hotswap.option.suggest.in.editor")) {
internal class ToggleShowButtonAction : DumbAwareToggleAction(XDebuggerBundle.message("label.debugger.hotswap.option.suggest.in.editor")) {
override fun getActionUpdateThread() = ActionUpdateThread.BGT
override fun isSelected(e: AnActionEvent) = DebuggerSettings.getInstance().HOTSWAP_SHOW_FLOATING_BUTTON
override fun setSelected(e: AnActionEvent, state: Boolean) {
@@ -4,7 +4,7 @@ package com.intellij.debugger.settings
import com.intellij.ide.settings.RemoteSettingInfo
import com.intellij.ide.settings.RemoteSettingInfoProvider
private class JavaDebuggerSettingsProvider : RemoteSettingInfoProvider {
internal class JavaDebuggerSettingsProvider : RemoteSettingInfoProvider {
override fun getRemoteSettingsInfo() =
mapOf("DebuggerSettings" to RemoteSettingInfo(RemoteSettingInfo.Direction.InitialFromFrontend))
@@ -4,7 +4,7 @@ package com.intellij.java.debugger.impl.shared
import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.ProjectActivity
private class SharedDebuggerInitializationProjectActivity : ProjectActivity {
internal class SharedDebuggerInitializationProjectActivity : ProjectActivity {
override suspend fun execute(project: Project) {
SharedJavaDebuggerManager.getInstance(project)
}
@@ -10,7 +10,7 @@ import com.intellij.platform.debugger.impl.shared.proxy.XDebugManagerProxy
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil
import kotlinx.coroutines.launch
private class CreateRendererAction : AnAction(), SplitDebuggerAction {
internal class CreateRendererAction : AnAction(), SplitDebuggerAction {
override fun update(e: AnActionEvent) {
val values = getSelectedJavaValuesWithDescriptors(e)
val value = values.singleOrNull()?.second
@@ -13,7 +13,7 @@ import com.intellij.platform.project.projectId
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil
import kotlinx.coroutines.launch
private class CustomizeContextViewAction : AnAction(), DumbAware, SplitDebuggerAction {
internal class CustomizeContextViewAction : AnAction(), DumbAware, SplitDebuggerAction {
override fun actionPerformed(e: AnActionEvent) {
val session = DebuggerUIUtil.getSessionProxy(e) ?: return
session.coroutineScope.launch {
@@ -11,7 +11,7 @@ import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeSplitActionBase
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl
import kotlinx.coroutines.launch
private class FreezeThreadAction : XDebuggerTreeSplitActionBase() {
internal class FreezeThreadAction : XDebuggerTreeSplitActionBase() {
override fun perform(node: XValueNodeImpl, nodeName: String, e: AnActionEvent) {
val project = e.project
if (project == null) {
@@ -11,7 +11,7 @@ import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeSplitActionBase
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl
import kotlinx.coroutines.launch
private class InterruptThreadAction : XDebuggerTreeSplitActionBase() {
internal class InterruptThreadAction : XDebuggerTreeSplitActionBase() {
override fun perform(node: XValueNodeImpl, nodeName: String, e: AnActionEvent) {
val project = e.project
if (project == null) {
@@ -12,7 +12,7 @@ import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeSplitActionBase
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl
import kotlinx.coroutines.launch
private class ResumeThreadAction : XDebuggerTreeSplitActionBase() {
internal class ResumeThreadAction : XDebuggerTreeSplitActionBase() {
override fun perform(node: XValueNodeImpl, nodeName: String, e: AnActionEvent) {
val project = e.project
if (project == null) {
@@ -11,7 +11,7 @@ import com.intellij.platform.debugger.impl.shared.SplitDebuggerAction
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil
import kotlinx.coroutines.launch
private class StepOutOfBlockAction : AnAction(), DumbAware, SplitDebuggerAction {
internal class StepOutOfBlockAction : AnAction(), DumbAware, SplitDebuggerAction {
override fun actionPerformed(e: AnActionEvent) {
val sessionProxy = DebuggerUIUtil.getSessionProxy(e) ?: return
sessionProxy.coroutineScope.launch {
@@ -35,7 +35,7 @@ import org.jetbrains.annotations.Nls
import java.awt.event.InputEvent
import javax.swing.Icon
private class ThreadDumpAction : DumbAwareAction(), SplitDebuggerAction {
internal class ThreadDumpAction : DumbAwareAction(), SplitDebuggerAction {
@OptIn(ExperimentalCoroutinesApi::class)
override fun actionPerformed(e: AnActionEvent) {
@@ -26,7 +26,7 @@ internal class ViewAsGroup : ActionGroup(Presentation.NULL_STRING, true), DumbAw
return ActionUpdateThread.BGT
}
private class RendererAction(private val nodeRenderer: NodeRendererDto) : ToggleAction(nodeRenderer.name) {
internal class RendererAction(private val nodeRenderer: NodeRendererDto) : ToggleAction(nodeRenderer.name) {
init {
getTemplatePresentation().setKeepPopupOnPerform(KeepPopupOnPerform.IfRequested)
}
@@ -18,7 +18,7 @@ data class JavaExecutionStackDescriptor(
override val kind: String = JAVA_EXECUTION_STACK_KIND
}
private class JavaExecutionStackDescriptorSerializerProvider : CustomXDescriptorSerializerProvider {
internal class JavaExecutionStackDescriptorSerializerProvider : CustomXDescriptorSerializerProvider {
override fun getSerializer(kind: String): KSerializer<out XDescriptor>? {
if (kind == JAVA_EXECUTION_STACK_KIND) {
return JavaExecutionStackDescriptor.serializer()
@@ -47,7 +47,7 @@ data class JavaValueObjectReferenceInfo(
val canGetInstanceInfo: Boolean,
)
private class JavaValueDescriptorSerializerProvider : CustomXDescriptorSerializerProvider {
internal class JavaValueDescriptorSerializerProvider : CustomXDescriptorSerializerProvider {
override fun getSerializer(kind: String): KSerializer<out XDescriptor>? {
if (kind == JAVA_VALUE_KIND) {
return JavaValueDescriptor.serializer()
@@ -15,7 +15,7 @@ fun convertToJavaStringLiteral(text: String): String {
return StringUtil.wrapWithDoubleQuote(SharedDebuggerUtils.translateStringValue(text))
}
private class JavaValueTextModificationPreparatorProvider : XValueTextModificationPreparatorProvider {
internal class JavaValueTextModificationPreparatorProvider : XValueTextModificationPreparatorProvider {
override fun getTextValuePreparator(value: XValue): XValueTextModificationPreparator? {
if (value.xValueDescriptorAsync?.getNow(null)?.kind == JAVA_VALUE_KIND &&
(value as? XValueTextProvider)?.shouldShowTextValue() == true &&
@@ -110,7 +110,7 @@ class JavaAutoRunTrackerService(val project: Project, val scope: CoroutineScope)
}
}
private class JavaAutoRunTrackerActivity() : ProjectActivity {
internal class JavaAutoRunTrackerActivity() : ProjectActivity {
override suspend fun execute(project: Project) {
project.service<JavaAutoRunTrackerService>().registerListeners()
}
@@ -72,7 +72,7 @@ class JavaAutoRunFloatingToolbarProvider : FloatingToolbarProvider {
}
}
private class DisableAutoTestAction : AnAction(), CustomComponentAction, DumbAware {
internal class DisableAutoTestAction : AnAction(), CustomComponentAction, DumbAware {
override fun actionPerformed(e: AnActionEvent) {}
override fun createCustomComponent(presentation: Presentation, place: String): JComponent {
@@ -90,7 +90,7 @@ private class DisableAutoTestAction : AnAction(), CustomComponentAction, DumbAwa
}
}
private class DisableAction : AnAction(IdeBundle.message("button.disable"), JavaFrontbackBundle.message("auto.run.floating.toolbar.disable.action"), AllIcons.Actions.RerunAutomatically) {
internal class DisableAction : AnAction(IdeBundle.message("button.disable"), JavaFrontbackBundle.message("auto.run.floating.toolbar.disable.action"), AllIcons.Actions.RerunAutomatically) {
override fun actionPerformed(e: AnActionEvent) {
val project = e.project ?: return
project.service<AutoRunFloatingToolbarService>().scope.launch {
@@ -99,7 +99,7 @@ private class DisableAction : AnAction(IdeBundle.message("button.disable"), Java
}
}
private class HideAction : AnAction() {
internal class HideAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) {
val project = e.project ?: return
project.service<AutoRunFloatingToolbarService>().scope.launch {
@@ -36,7 +36,7 @@ import org.jetbrains.annotations.Nls
import org.jetbrains.uast.*
import javax.swing.Icon
private class TestFailedLineManagerImpl(project: Project) : TestFailedLineManager, FileEditorManagerListener {
internal class TestFailedLineManagerImpl(project: Project) : TestFailedLineManager, FileEditorManagerListener {
private val testStorage = TestStateStorage.getInstance(project)
private val cache = FactoryMap.create<VirtualFile, MutableMap<String, TestInfoCache>> { hashMapOf() }
@@ -9,7 +9,7 @@ import com.intellij.util.PlatformUtils
import training.ui.welcomeScreen.OnboardingLessonPromoter
import javax.swing.Icon
private class JavaOnboardingTourPromoter : OnboardingLessonPromoter(
internal class JavaOnboardingTourPromoter : OnboardingLessonPromoter(
ideaOnboardingLessonId, javaLanguageId, JavaLessonsBundle.message("java.onboarding.lesson.name")
) {
override val promoImage: Icon
@@ -35,7 +35,7 @@ import kotlin.io.path.name
* If the library contains only jars from one of the known library, a fix will be suggested.
* Fix will replace the library with its repository equivalent.
*/
private class IdeaLibDependencyNotifier : ProjectActivity {
internal class IdeaLibDependencyNotifier : ProjectActivity {
init {
if (ApplicationManager.getApplication().isHeadlessEnvironment) {
throw ExtensionNotApplicableException.create()
@@ -54,7 +54,7 @@ private val NOTIFICATION_GROUP: NotificationGroup
private const val SCAN_DEPTH_LIMIT = 5
private const val MAX_ROOTS_IN_TRIVIAL_PROJECT_STRUCTURE = 3
private class SetupJavaProjectFromSourcesActivity : ProjectActivity {
internal class SetupJavaProjectFromSourcesActivity : ProjectActivity {
init {
if (ApplicationManager.getApplication().isHeadlessEnvironment) {
throw ExtensionNotApplicableException.create()
@@ -154,7 +154,7 @@ class ModuleDependenciesCleaner(
notification.notify(project)
}
private class ShowDependenciesAction(private val module: Module, private val builder: ForwardDependenciesBuilder)
internal class ShowDependenciesAction(private val module: Module, private val builder: ForwardDependenciesBuilder)
: NotificationAction(JavaUiBundle.message("notification.action.text.show.dependencies")) {
private val project = module.project
@@ -57,7 +57,7 @@ internal fun obtainAuthenticationData(description: RemoteRepositoryDescription):
return null
}
private class MavenSettingsXmlRepositoryAuthenticationDataProvider: JarRepositoryAuthenticationDataProvider {
internal class MavenSettingsXmlRepositoryAuthenticationDataProvider: JarRepositoryAuthenticationDataProvider {
override fun provideAuthenticationData(remote: RemoteRepositoryDescription): AuthenticationData? {
return service<MavenSettingsXmlRepositoryAuthenticationDataService>().provideAuthenticationData(remote)
}
@@ -5,9 +5,7 @@ import com.intellij.openapi.components.BaseState
import com.intellij.openapi.components.SimplePersistentStateComponent
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
internal interface RepositoryLibrarySettings {
fun isSha256ChecksumUiSettingsDisplayed(): Boolean
@@ -34,7 +32,7 @@ internal interface RepositoryLibrarySettings {
override fun isJarRepositoryAutoBindEnabled() = false
}
private class Service : SimplePersistentStateComponent<Service.State>(State()), RepositoryLibrarySettings {
class Service : SimplePersistentStateComponent<Service.State>(State()), RepositoryLibrarySettings {
class State : BaseState() {
/**
* Display SHA256 checksum internal actions and SHA256 checksum checkbox in library editor.
@@ -23,7 +23,7 @@ import org.jetbrains.idea.maven.utils.library.RepositoryLibraryDescription
import org.jetbrains.idea.maven.utils.library.RepositoryLibraryProperties
import org.jetbrains.idea.maven.utils.library.RepositoryUtils
private class RepositoryLibrarySynchronizer : ProjectActivity {
internal class RepositoryLibrarySynchronizer : ProjectActivity {
init {
if (ApplicationManager.getApplication().isUnitTestMode) {
throw ExtensionNotApplicableException.create()
@@ -10,7 +10,7 @@ import com.intellij.psi.*
import com.intellij.psi.util.PsiTreeUtil
import com.intellij.psi.util.elementType
private class JavaSafeDeleteCompletionCommandProvider : AbstractSafeDeleteCompletionCommandProvider() {
internal class JavaSafeDeleteCompletionCommandProvider : AbstractSafeDeleteCompletionCommandProvider() {
override fun findElement(offset: Int, psiFile: PsiFile, editor: Editor?): PsiElement? {
if (editor == null) return null
var element = getCommandContext(offset, psiFile) ?: return null
@@ -177,7 +177,7 @@ private class ProjectPsiChangesProcessor(scope: CoroutineScope) {
}
}
private class ProjectProblemFileSelectionListenerStartupActivity : ProjectActivity {
internal class ProjectProblemFileSelectionListenerStartupActivity : ProjectActivity {
override suspend fun execute(project: Project) {
if (ApplicationManager.getApplication().isHeadlessEnvironment && !TestModeFlags.`is`(ProjectProblemUtils.ourTestingProjectProblems)) {
return
@@ -7,7 +7,7 @@ import com.intellij.psi.*
import com.intellij.psi.util.PsiUtil
import java.awt.event.MouseEvent
private class JavaVcsCodeVisionContext : VcsCodeVisionCurlyBracketLanguageContext() {
internal class JavaVcsCodeVisionContext : VcsCodeVisionCurlyBracketLanguageContext() {
override fun isAccepted(element: PsiElement): Boolean {
return element is PsiMethod || (element is PsiClass && element !is PsiTypeParameter)
}
@@ -37,7 +37,7 @@ import com.intellij.util.concurrency.annotations.RequiresReadLock
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
private class FileNotInSourceRootChecker : ProjectActivity {
internal class FileNotInSourceRootChecker : ProjectActivity {
override suspend fun execute(project: Project) {
project.serviceAsync<FileNotInSourceRootService>().init()
}
@@ -14,7 +14,7 @@ import com.intellij.psi.SyntheticElement
import com.intellij.util.PlatformIcons
import javax.swing.Icon
private class JavaFileIconPatcher : FileIconPatcher {
internal class JavaFileIconPatcher : FileIconPatcher {
override fun patchIcon(icon: Icon, file: VirtualFile, flags: Int, project: Project?): Icon {
if (project == null) {
return icon
@@ -4,7 +4,7 @@ package com.intellij.ide.java
import com.intellij.codeInsight.codeVision.CodeVisionAnchorKind
import com.intellij.codeInsight.codeVision.settings.CodeVisionSettingsDefaults
private class JavaCodeVisionSettingsDefaults : CodeVisionSettingsDefaults {
internal class JavaCodeVisionSettingsDefaults : CodeVisionSettingsDefaults {
override val defaultPosition: CodeVisionAnchorKind
get() = CodeVisionAnchorKind.Right
}
@@ -7,7 +7,7 @@ import com.intellij.platform.workspace.jps.entities.ModuleId
import com.intellij.platform.workspace.storage.EntityStorage
import com.intellij.platform.workspace.storage.entities
private class MavenCoordinateDependencySubstitutionExtension : DependencySubstitutionExtension {
internal class MavenCoordinateDependencySubstitutionExtension : DependencySubstitutionExtension {
override fun buildLibraryToModuleMap(storage: EntityStorage): Map<LibraryId, ModuleId> {
val modules = storage.entities<ModuleMavenCoordinateEntity>()
@@ -12,7 +12,7 @@ import java.util.concurrent.atomic.AtomicReference
* Registers [WebModuleType] in IDEs which don't register neither [WebModuleType] nor [com.intellij.webcore.moduleType.PlatformWebModuleType]
* but still need to use [WebModuleTypeBase] because they have Java plugin installed.
*/
private class WebModuleTypeRegistrar(coroutineScope: CoroutineScope) : Disposable {
internal class WebModuleTypeRegistrar(coroutineScope: CoroutineScope) : Disposable {
private val webModuleTypeRef = AtomicReference<WebModuleType>()
init {
@@ -17,7 +17,7 @@ import com.intellij.openapi.startup.ProjectActivity
/**
* Project activity that reports unsupported JDKs used in the project.
*/
private class JavaVersionChecker: ProjectActivity {
internal class JavaVersionChecker: ProjectActivity {
override suspend fun execute(project: Project) {
val projectSdk = ProjectRootManager.getInstance(project).projectSdk
@@ -23,7 +23,7 @@ import org.jetbrains.jps.model.java.JdkVersionDetector
* - Automatically registers JDKs on the computer in the [ProjectJdkTable]
* - Uses the first JDK found as project SDK if none was configured
*/
private class ExistingJdkConfigurationActivity : ProjectActivity {
internal class ExistingJdkConfigurationActivity : ProjectActivity {
override suspend fun execute(project: Project) {
if (!Registry.`is`("jdk.configure.existing", false)) {
return
@@ -11,7 +11,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.*
private class AcceptedLanguageLevelsSettingsStartupActivity : ProjectActivity {
internal class AcceptedLanguageLevelsSettingsStartupActivity : ProjectActivity {
init {
if (ApplicationManager.getApplication().isUnitTestMode) {
throw ExtensionNotApplicableException.create()
@@ -11,7 +11,7 @@ import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiJavaModule
import com.intellij.psi.PsiManager
private class JavaEditorTabTitleProvider : EditorTabTitleProvider {
internal class JavaEditorTabTitleProvider : EditorTabTitleProvider {
override suspend fun getEditorTabTitleAsync(project: Project, file: VirtualFile): String? {
val fileName = file.name
if (PsiJavaModule.MODULE_INFO_FILE != fileName) {