Skip to content

Commit f494a30

Browse files
committed
Fix static resolve
1 parent 60ccdd0 commit f494a30

File tree

3 files changed

+41
-8
lines changed

3 files changed

+41
-8
lines changed

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
object Versions {
2-
const val project = "0.8.1"
2+
const val project = "0.9.0"
33
const val idePlugin = "1.1.0"
44

55
const val kotlin = "1.4.0-rc"

ide-plugin/src/main/kotlin/net/mamoe/kjbb/ide/BlockingBridgeLineMarkerProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class BlockingBridgeLineMarkerProvider : LineMarkerProvider {
8080
fun PsiReferenceExpression.hasBridgeCalls(): Boolean {
8181
val resolved = this.resolve() as? KtLightMethod ?: return false
8282

83-
return resolved.isCompanionedWithBlockingBrideInThisOrSuper()
83+
return resolved.canHaveBridgeFunctions()
8484
}
8585

8686
fun PsiElement.getLineNumber(start: Boolean = true): Int {

ide-plugin/src/main/kotlin/net/mamoe/kjbb/ide/JvmBlockingBridgePsiAugmentProvider.kt

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
1515
import org.jetbrains.kotlin.asJava.classes.KtUltraLightClassForFacade
1616
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
1717
import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl
18+
import org.jetbrains.kotlin.descriptors.Modality
1819
import org.jetbrains.kotlin.idea.search.declarationsSearch.forEachOverridingMethod
1920
import org.jetbrains.kotlin.name.Name
2021
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
@@ -60,20 +61,20 @@ class JvmBlockingBridgePsiAugmentProvider : PsiAugmentProvider() {
6061

6162
internal fun PsiExtensibleClass.generateAugmentElements(): List<PsiElement> {
6263
return this.ownMethods.asSequence()
63-
.filter { it.isCompanionedWithBlockingBrideInThisOrSuper() }
64+
.filter { it.canHaveBridgeFunctions() }
6465
.filterIsInstance<KtLightMethod>()
6566
.map { it.generateLightMethod() }
6667
.toList()
6768
}
6869

69-
internal fun PsiMethod.isCompanionedWithBlockingBrideInThisOrSuper(): Boolean {
70+
internal fun PsiMethod.canHaveBridgeFunctions(): Boolean {
7071
return if (isSuspend()
7172
&& Name.isValidIdentifier(this.name)
7273
&& this.hasAnnotation(JvmBlockingBridge::class.qualifiedName!!)
7374
) {
7475
true
7576
} else {
76-
return findOverrides()?.any { it.isCompanionedWithBlockingBrideInThisOrSuper() } == true
77+
return findOverrides()?.any { it.canHaveBridgeFunctions() } == true
7778
}
7879
}
7980

@@ -138,14 +139,24 @@ internal fun KtLightMethod.generateLightMethod(): PsiMethod {
138139
for (it in originMethod.parameterList.parameters.dropLast(1)) {
139140
addParameter(it)
140141
}
141-
if (isJvmStatic()) {
142+
143+
if (isJvmStatic() || originMethod.parent is KtUltraLightClassForFacade) {
142144
addModifier(PsiModifier.STATIC)
143145
}
144146

145-
PsiModifier.MODIFIERS
147+
VISIBILITIES_MODIFIERS
146148
.filter { originMethod.hasModifierProperty(it) }
147149
.forEach { addModifier(it) }
148150

151+
addModifier(
152+
if (containingClass?.isInterface == true) {
153+
PsiModifier.OPEN
154+
} else when (containingClass?.modality) {
155+
Modality.OPEN, Modality.ABSTRACT, Modality.SEALED -> PsiModifier.OPEN
156+
else -> PsiModifier.FINAL
157+
}
158+
)
159+
149160
for (typeParameter in originMethod.typeParameters) {
150161
addTypeParameter(typeParameter)
151162
}
@@ -196,4 +207,26 @@ class BlockingBridgeStubMethod(manager: PsiManager, language: Language, name: St
196207
return _body ?: super.getBody()
197208
}
198209

199-
}
210+
}
211+
212+
internal val VISIBILITIES_MODIFIERS = arrayOf(
213+
PsiModifier.PUBLIC,
214+
PsiModifier.PACKAGE_LOCAL,
215+
PsiModifier.PRIVATE,
216+
PsiModifier.PROTECTED,
217+
)
218+
219+
internal val PsiModifierListOwner.modality: Modality
220+
get() {
221+
if (this is PsiMember && this.containingClass?.isInterface == true) {
222+
return Modality.OPEN //
223+
}
224+
225+
return when {
226+
this.hasModifierProperty(PsiModifier.OPEN) -> Modality.OPEN
227+
this.hasModifierProperty(PsiModifier.FINAL) -> Modality.FINAL
228+
this.hasModifierProperty(PsiModifier.ABSTRACT) -> Modality.ABSTRACT
229+
this.hasModifierProperty("sealed") -> Modality.ABSTRACT
230+
else -> Modality.FINAL
231+
}
232+
}

0 commit comments

Comments
 (0)