Skip to content

Commit

Permalink
Skip finding mix.exs for OTP apps if it can't be read
Browse files Browse the repository at this point in the history
Fixes #3248
  • Loading branch information
KronicDeth committed Jun 4, 2023
1 parent e261b4f commit f963cf4
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 18 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@
* Don't resolve built-in types against the index if index is updating.
* [#3249](https://github.com/KronicDeth/intellij-elixir/pull/3249) - [@KronicDeth](https://github.com/KronicDeth)
* `findModuleForPsiElement` in `mostSpecificSdk` in read action.
* [#3250](https://github.com/KronicDeth/intellij-elixir/pull/3250) - [@KronicDeth](https://github.com/KronicDeth)
* Skip finding `mix.exs` for OTP apps if it can't be read.

## v15.0.1

Expand Down
1 change: 1 addition & 0 deletions resources/META-INF/changelog.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ <h1>v15.0.2</h1>
<li>Ignore <code>group:</code> for docs.</li>
<li>Don't resolve built-in types against the index if index is updating.</li>
<li><code>findModuleForPsiElement</code> in <code>mostSpecificSdk</code> in read action.</li>
<li>Skip finding <code>mix.exs</code> for OTP apps if it can't be read.</li>
</ul>
</li>
</ul>
Expand Down
47 changes: 29 additions & 18 deletions src/org/elixir_lang/mix/Project.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@ import com.intellij.openapi.vfs.VirtualFileVisitor
import org.elixir_lang.DepsWatcher
import org.elixir_lang.mix.project.OtpApp
import org.elixir_lang.module.ElixirModuleType
import java.io.EOFException
import java.io.File
import java.util.Comparator

object Project {
fun addSourceDirToContent(content: ContentEntry,
root: VirtualFile,
sourceDir: String,
test: Boolean) {
fun addSourceDirToContent(
content: ContentEntry,
root: VirtualFile,
sourceDir: String,
test: Boolean
) {
content.addSourceFolder("${root.url}/$sourceDir", test)
}

Expand Down Expand Up @@ -67,10 +69,10 @@ object Project {
}

fun createModulesForOtpApps(
project: Project,
otpApps: List<OtpApp>,
modifiableModuleModelFactory: () -> ModifiableModuleModel,
rootModelModifier: (OtpApp, ModifiableRootModel) -> Unit = { _, _ -> }
project: Project,
otpApps: List<OtpApp>,
modifiableModuleModelFactory: () -> ModifiableModuleModel,
rootModelModifier: (OtpApp, ModifiableRootModel) -> Unit = { _, _ -> }
): List<Module> =
if (otpApps.isNotEmpty()) {
val moduleModel = modifiableModuleModelFactory()
Expand All @@ -85,19 +87,24 @@ object Project {
moduleModel.commit()
}

ProgressManager.getInstance().run(object : Task.Modal(project, "Scanning dependencies for Libraries", true) {
override fun run(indicator: ProgressIndicator) {
DepsWatcher(project).syncLibraries(indicator)
}
})
ProgressManager.getInstance()
.run(object : Task.Modal(project, "Scanning dependencies for Libraries", true) {
override fun run(indicator: ProgressIndicator) {
DepsWatcher(project).syncLibraries(indicator)
}
})
}

createdRootModels.map { it.module }
} else {
emptyList()
}

private fun createModuleForOtpApp(otpApp: OtpApp, moduleModel: ModifiableModuleModel, rootModelModifier: (OtpApp, ModifiableRootModel) -> Unit): ModifiableRootModel? {
private fun createModuleForOtpApp(
otpApp: OtpApp,
moduleModel: ModifiableModuleModel,
rootModelModifier: (OtpApp, ModifiableRootModel) -> Unit
): ModifiableRootModel? {
val ideaModuleDir = otpApp.root
val ideaModuleFile = "${ideaModuleDir.canonicalPath}${File.separator}/${otpApp.name}.iml"
val module = moduleModel.newModule(ideaModuleFile, ElixirModuleType.MODULE_TYPE_ID)
Expand Down Expand Up @@ -136,9 +143,13 @@ object Project {
}

private fun createImportedOtpApp(appRoot: VirtualFile): OtpApp? =
appRoot.findChild("mix.exs")?.let {
OtpApp(appRoot, it)
}
try {
appRoot.findChild("mix.exs")
} catch (_: EOFException) {
null
}?.let {
OtpApp(appRoot, it)
}

private fun isAssetsOrBuildOrConfigOrDepsOrTestsDirectory(projectRootPath: String, path: String): Boolean {
return (path.endsWith("/assets")
Expand Down

0 comments on commit f963cf4

Please sign in to comment.