aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/com')
-rw-r--r--src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
index 07d7d1d..f7b50ba 100644
--- a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
+++ b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
@@ -219,7 +219,9 @@ internal class PsiMapper(
}
val parent: PsiElement? = expr.parent
if ((parent is KtUserType || parent is KtQualifiedExpression) && parent.text == name) {
- replace(parent, mapped)
+ if (valid(parent)) {
+ replace(parent, mapped)
+ }
return
}
// FIXME this incorrectly filters things like "Packet<?>" and doesn't filter same-name type aliases
@@ -549,6 +551,24 @@ internal class PsiMapper(
return super.visitNamedFunction(function, data)
}
+ override fun visitDotQualifiedExpression(expression: KtDotQualifiedExpression, data: Void?): Void? {
+ // Dot qualified expressions such as "a.pkg.A.Inner" we want to remap back to front because the
+ // latter parts are more specific.
+ // I.e. we start with the inner class, and only if there is no mapping for that, do we try to remap
+ // the outer class.
+ expression.selectorExpression?.accept(this)
+ expression.receiverExpression.accept(this)
+ return null
+ }
+
+ override fun visitUserType(type: KtUserType, data: Void?): Void? {
+ // Same as visitDotQualifiedExpression but for typealias declarations
+ type.referenceExpression?.accept(this)
+ type.qualifier?.accept(this)
+ type.typeArgumentList?.accept(this)
+ return null
+ }
+
override fun visitReferenceExpression(expression: KtReferenceExpression, data: Void?): Void? {
if (valid(expression)) {
val target = bindingContext[BindingContext.REFERENCE_TARGET, expression]