Skip to content

Commit

Permalink
Add visibility check in ResolverAAImpl.overrides
Browse files Browse the repository at this point in the history
override cannot happen without visibility.
  • Loading branch information
ting-yuan committed Jan 16, 2025
1 parent f47b8c7 commit a1bc1eb
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,8 @@ class ResolverAAImpl(
}
recordLookupForPropertyOrMethod(overrider)
recordLookupForPropertyOrMethod(overridee)
if (!overridee.isVisibleFrom(overrider))
return false
return analyze {
overriderSymbol.allOverriddenSymbols.contains(overrideeSymbol) ||
overriderSymbol.intersectionOverriddenSymbols.contains(overrideeSymbol)
Expand Down
17 changes: 17 additions & 0 deletions kotlin-analysis-api/testData/checkOverride.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
// Base.f1 overrides MyInterface3.f1: true
// Base.prop overrides MyInterface3.prop: true
// JBase.getProp overrides MyInterface3.prop: true
// pkg1.PackagePrivate.packagePrivateFun overrides pkg2.PackagePrivateBase.packagePrivateFun: false
// END
// FILE: a.kt

Expand Down Expand Up @@ -187,3 +188,19 @@ public abstract class JavaDifferentReturnType extends JavaList {
return "";
}
}

// FILE: PackagePrivate.java
package pkg1;
public class PackagePrivate extends pkg2.PackagePrivateBase {
int packagePrivateFun() {
return 1;
}
}

// FILE: PackagePrivateBase.java
package pkg2;
public class PackagePrivateBase {
int packagePrivateFun() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,14 @@ class CheckOverrideProcessor : AbstractTestProcessor() {
val jBaseOverride = resolver.getClassDeclarationByName("JBaseOverride")!!
val jbaseProp = jbase.declarations.single { it.simpleName.asString() == "getProp" }
checkOverride(jbaseProp, myInterfaceProp, jBaseOverride)

val packagePrivateBase = resolver.getClassDeclarationByName("pkg2.PackagePrivateBase")!!
val packagePrivateBaseFun = packagePrivateBase.declarations
.single { it.simpleName.asString() == "packagePrivateFun" }
val packagePrivate = resolver.getClassDeclarationByName("pkg1.PackagePrivate")!!
val packagePrivateFun = packagePrivate.declarations
.single { it.simpleName.asString() == "packagePrivateFun" }
checkOverride(packagePrivateFun, packagePrivateBaseFun)
return emptyList()
}
}
17 changes: 17 additions & 0 deletions test-utils/testData/api/checkOverride.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
// Base.f1 overrides MyInterface3.f1: true
// Base.prop overrides MyInterface3.prop: true
// JBase.getProp overrides MyInterface3.prop: true
// pkg1.PackagePrivate.packagePrivateFun overrides pkg2.PackagePrivateBase.packagePrivateFun: false
// END
// FILE: a.kt

Expand Down Expand Up @@ -187,3 +188,19 @@ public abstract class JavaDifferentReturnType extends JavaList {
return "";
}
}

// FILE: PackagePrivate.java
package pkg1;
public class PackagePrivate extends pkg2.PackagePrivateBase {
int packagePrivateFun() {
return 1;
}
}

// FILE: PackagePrivateBase.java
package pkg2;
public class PackagePrivateBase {
int packagePrivateFun() {
return 0;
}
}

0 comments on commit a1bc1eb

Please sign in to comment.