├── docs
├── dialog.png
├── right-click.png
└── search-todo.png
├── gradle
├── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
└── libs.versions.toml
├── .gitignore
├── settings.gradle.kts
├── src
└── main
│ ├── resources
│ ├── META-INF
│ │ ├── lol.bai.ravel-kotlin.xml
│ │ ├── lol.bai.ravel-json.xml
│ │ ├── plugin.xml
│ │ └── pluginIcon.svg
│ ├── messages
│ │ └── RavelBundle.properties
│ └── icons
│ │ └── pluginAction.svg
│ ├── kotlin
│ └── lol
│ │ └── bai
│ │ └── ravel
│ │ ├── psi
│ │ ├── JsonPsiExt.kt
│ │ ├── KotlinPsiExt.kt
│ │ └── JavaPsiExt.kt
│ │ ├── mapping
│ │ ├── BasicMapping.kt
│ │ ├── downloader
│ │ │ ├── MappingDownloader.kt
│ │ │ ├── MojMapDownloader.kt
│ │ │ └── YarnDownloader.kt
│ │ ├── MappingNsVisitor.kt
│ │ ├── MioMapping.kt
│ │ └── Mapping.kt
│ │ ├── util
│ │ ├── MultiMap.kt
│ │ ├── Cache.kt
│ │ ├── Holder.kt
│ │ ├── Extension.kt
│ │ ├── Utils.kt
│ │ ├── PathUtils.kt
│ │ └── HttpUtils.kt
│ │ ├── remapper
│ │ ├── JsonRemapper.kt
│ │ ├── PsiRemapper.kt
│ │ ├── Remapper.kt
│ │ ├── MixinJsonRemapper.kt
│ │ ├── FabricModJsonRemapper.kt
│ │ ├── JvmRemapper.kt
│ │ ├── ClassTweakerRemapper.kt
│ │ ├── JavaRemapper.kt
│ │ ├── KotlinRemapper.kt
│ │ └── MixinRemapper.kt
│ │ └── ui
│ │ ├── UiBindings.kt
│ │ ├── ModuleAction.kt
│ │ ├── RemapperDialog.kt
│ │ ├── RemapperAction.kt
│ │ └── MappingAction.kt
│ └── java
│ └── lol
│ └── bai
│ └── ravel
│ └── util
│ └── NoInline.java
├── gradle.properties
├── .run
├── Run Tests.run.xml
├── Run Plugin.run.xml
└── Run Verifications.run.xml
├── LICENSE
├── CHANGELOG.md
├── README.md
├── gradlew.bat
├── .github
└── workflows
│ └── build.yml
└── gradlew
/docs/dialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/badasintended/ravel/HEAD/docs/dialog.png
--------------------------------------------------------------------------------
/docs/right-click.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/badasintended/ravel/HEAD/docs/right-click.png
--------------------------------------------------------------------------------
/docs/search-todo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/badasintended/ravel/HEAD/docs/search-todo.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/badasintended/ravel/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .gradle
3 | .idea
4 | .intellijPlatform
5 | .kotlin
6 | .qodana
7 | build
8 | keys
9 | release.sh
10 |
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
3 | }
4 |
5 | rootProject.name = "Ravel Remapper"
6 |
--------------------------------------------------------------------------------
/src/main/resources/META-INF/lol.bai.ravel-kotlin.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/src/main/kotlin/lol/bai/ravel/psi/JsonPsiExt.kt:
--------------------------------------------------------------------------------
1 | package lol.bai.ravel.psi
2 |
3 | import com.intellij.json.psi.JsonElementGenerator
4 | import com.intellij.psi.PsiComment
5 |
6 | fun JsonElementGenerator.createComment(comment: String): PsiComment {
7 | val file = createDummyFile(comment)
8 | return file.firstChild as PsiComment
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/resources/META-INF/lol.bai.ravel-json.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Opt-out flag for bundling Kotlin standard library
2 | # https://jb.gg/intellij-platform-kotlin-stdlib
3 | kotlin.stdlib.default.dependency = false
4 |
5 | # Enable Gradle Configuration Cache
6 | # https://docs.gradle.org/current/userguide/configuration_cache.html
7 | org.gradle.configuration-cache = true
8 |
9 | # Enable Gradle Build Cache
10 | # https://docs.gradle.org/current/userguide/build_cache.html
11 | org.gradle.caching = true
12 |
--------------------------------------------------------------------------------
/src/main/kotlin/lol/bai/ravel/mapping/BasicMapping.kt:
--------------------------------------------------------------------------------
1 | package lol.bai.ravel.mapping
2 |
3 | class BasicClassMapping(
4 | override val oldName: String,
5 | override val newName: String?
6 | ) : MutableClassMapping()
7 |
8 | class BasicFieldMapping(
9 | override val oldName: String,
10 | override val newName: String?
11 | ): FieldMapping()
12 |
13 | class BasicMethodMapping(
14 | override val oldName: String,
15 | override val oldDesc: String,
16 | override val newName: String?
17 | ) : MethodMapping()
18 |
--------------------------------------------------------------------------------
/src/main/kotlin/lol/bai/ravel/psi/KotlinPsiExt.kt:
--------------------------------------------------------------------------------
1 | package lol.bai.ravel.psi
2 |
3 | import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
4 | import org.jetbrains.kotlin.asJava.toLightClass
5 | import org.jetbrains.kotlin.psi.KtClassOrObject
6 | import org.jetbrains.kotlin.psi.KtFile
7 |
8 | val KtClassOrObject.jvmName get() = toLightClass()?.jvmName
9 |
10 | val KtFile.jvmName: String?
11 | get() {
12 | for (pClass in classes) {
13 | if (pClass is KtLightClassForFacade) return pClass.jvmName
14 | }
15 | return null
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/kotlin/lol/bai/ravel/util/MultiMap.kt:
--------------------------------------------------------------------------------
1 | package lol.bai.ravel.util
2 |
3 | class MultiMap(
4 | private val map: MutableMap> = linkedMapOf(),
5 | private val factory: () -> MutableCollection,
6 | ) : MutableMap> by map {
7 |
8 | fun put(key: K, value: V) {
9 | map.getOrPut(key, factory).add(value)
10 | }
11 |
12 | }
13 |
14 | fun setMultiMap() = MultiMap { HashSet() }
15 | fun linkedSetMultiMap() = MultiMap { LinkedHashSet() }
16 | fun listMultiMap() = MultiMap { ArrayList() }
17 |
--------------------------------------------------------------------------------
/src/main/kotlin/lol/bai/ravel/mapping/downloader/MappingDownloader.kt:
--------------------------------------------------------------------------------
1 | package lol.bai.ravel.mapping.downloader
2 |
3 | import lol.bai.ravel.util.Extension
4 | import java.nio.file.Path
5 |
6 | val MappingDownloaderExtension = Extension("lol.bai.ravel.mappingDownloader")
7 |
8 | abstract class MappingDownloader(
9 | val name: String
10 | ) {
11 |
12 | override fun toString() = name
13 |
14 | abstract fun resolveDest(version: String): Pair
15 | abstract suspend fun versions(): List
16 | abstract suspend fun download(version: String, dest: Path): Boolean
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/kotlin/lol/bai/ravel/util/Cache.kt:
--------------------------------------------------------------------------------
1 | package lol.bai.ravel.util
2 |
3 | class Cache {
4 | private val map = hashMapOf>()
5 |
6 | val values get() = map.values
7 | .filter { it.value != null }
8 | .map { it.value!! as V }
9 |
10 | fun has(key: K): Boolean = map.containsKey(key)
11 | fun get(key: K): V? = map.getOrPut(key) { null.held }.value
12 | fun put(key: K, value: V?) {
13 | map[key] = value.held
14 | }
15 |
16 | inline fun getOrPut(key: K, defaultValue: () -> V?): V? {
17 | if (has(key)) return get(key)
18 | val new = defaultValue()
19 | put(key, new)
20 | return new
21 | }
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/src/main/kotlin/lol/bai/ravel/util/Holder.kt:
--------------------------------------------------------------------------------
1 | package lol.bai.ravel.util
2 |
3 | import com.intellij.openapi.util.Key
4 | import com.intellij.openapi.util.UserDataHolder
5 |
6 | typealias HolderKey = Key>
7 |
8 | data class Holder(val value: T) {
9 | companion object {
10 | val nullHolder = Holder(null)
11 |
12 | fun key(key: String): HolderKey {
13 | return Key.create>("lol.bai.ravel.${key}")
14 | }
15 | }
16 | }
17 |
18 | @Suppress("UNCHECKED_CAST")
19 | val T?.held: Holder
20 | get() = if (this == null) Holder.nullHolder as Holder else Holder(this)
21 |
22 | fun HolderKey.put(holder: UserDataHolder, value: T?): T? {
23 | holder.putUserData(this, value.held)
24 | return value
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/lol/bai/ravel/util/NoInline.java:
--------------------------------------------------------------------------------
1 | package lol.bai.ravel.util;
2 |
3 | import com.intellij.platform.util.progress.RawProgressReporter;
4 | import com.intellij.platform.util.progress.StepsKt;
5 | import java.util.function.Consumer;
6 | import kotlin.coroutines.Continuation;
7 |
8 | /**
9 | * Hack to suppress internal API usage errors because inlined functions.
10 | *
11 | * @see MP-7133
12 | */
13 | @SuppressWarnings("UnstableApiUsage")
14 | public final class NoInline {
15 | public static void reportRawProgress(Continuation