[FE 1.0] Implement deprecation PRIVATE_CLASS_MEMBER_FROM_INLINE_WARNING warning
^KT-55179 ^KT-56171 Fixed
This commit is contained in:
committed by
Space Team
parent
d01a2c7271
commit
a83caec94f
+6
@@ -18069,6 +18069,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
||||
runTest("compiler/testData/diagnostics/tests/inline/nonPublicMember/kt14887.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt55179.kt")
|
||||
public void testKt55179() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/nonPublicMember/kt55179.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localClass.kt")
|
||||
public void testLocalClass() throws Exception {
|
||||
|
||||
+6
@@ -18075,6 +18075,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
||||
runTest("compiler/testData/diagnostics/tests/inline/nonPublicMember/kt14887.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt55179.kt")
|
||||
public void testKt55179() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/nonPublicMember/kt55179.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localClass.kt")
|
||||
public void testLocalClass() throws Exception {
|
||||
|
||||
+6
@@ -18069,6 +18069,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
||||
runTest("compiler/testData/diagnostics/tests/inline/nonPublicMember/kt14887.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt55179.kt")
|
||||
public void testKt55179() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/nonPublicMember/kt55179.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localClass.kt")
|
||||
public void testLocalClass() throws Exception {
|
||||
|
||||
@@ -1292,6 +1292,8 @@ public interface Errors {
|
||||
DiagnosticFactory0<KtElement> DEPRECATED_IMPLICIT_NON_PUBLIC_API_ACCESS = DiagnosticFactory0.create(WARNING, CALL_ELEMENT);
|
||||
DiagnosticFactory2<KtElement, DeclarationDescriptor, DeclarationDescriptor> PRIVATE_CLASS_MEMBER_FROM_INLINE =
|
||||
DiagnosticFactory2.create(ERROR, CALL_ELEMENT);
|
||||
DiagnosticFactory2<KtElement, DeclarationDescriptor, DeclarationDescriptor> PRIVATE_CLASS_MEMBER_FROM_INLINE_WARNING =
|
||||
DiagnosticFactory2.create(WARNING, CALL_ELEMENT);
|
||||
DiagnosticFactory1<KtElement, KtElement> NON_LOCAL_RETURN_NOT_ALLOWED = DiagnosticFactory1.create(ERROR, CALL_ELEMENT);
|
||||
DiagnosticFactory1<KtDeclaration, String> NOT_YET_SUPPORTED_IN_INLINE =
|
||||
DiagnosticFactory1.create(ERROR, NOT_SUPPORTED_IN_INLINE_MOST_RELEVANT);
|
||||
|
||||
+1
@@ -1121,6 +1121,7 @@ public class DefaultErrorMessages {
|
||||
MAP.put(NON_PUBLIC_CALL_FROM_PUBLIC_INLINE, "Public-API inline function cannot access non-public-API ''{0}''", SHORT_NAMES_IN_TYPES, SHORT_NAMES_IN_TYPES);
|
||||
MAP.put(DEPRECATED_IMPLICIT_NON_PUBLIC_API_ACCESS, "Deprecated implicit access of non-public-API from public-API inline function");
|
||||
MAP.put(PRIVATE_CLASS_MEMBER_FROM_INLINE, "Non-private inline function cannot access members of private classes: ''{0}''", SHORT_NAMES_IN_TYPES, SHORT_NAMES_IN_TYPES);
|
||||
MAP.put(PRIVATE_CLASS_MEMBER_FROM_INLINE_WARNING, "Non-private inline function cannot access members of private classes: ''{0}''. This warning will become an error in 2.0", SHORT_NAMES_IN_TYPES, SHORT_NAMES_IN_TYPES);
|
||||
MAP.put(NOT_YET_SUPPORTED_IN_INLINE, "{0} are not yet supported in inline functions", STRING);
|
||||
MAP.put(DECLARATION_CANT_BE_INLINED, "'inline' modifier is not allowed on virtual members. Only private or final members can be inlined");
|
||||
MAP.put(DECLARATION_CANT_BE_INLINED_WARNING, "'inline' modifier is not allowed on virtual enum members. Only private or final members can be inlined. This warning will become an error in K2");
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyPrivateApi
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isInsidePrivateClass
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isMemberOfCompanionOfPrivateClass
|
||||
import org.jetbrains.kotlin.resolve.inline.InlineUtil
|
||||
import org.jetbrains.kotlin.resolve.inline.InlineUtil.allowsNonLocalReturns
|
||||
import org.jetbrains.kotlin.resolve.inline.InlineUtil.checkNonLocalReturnUsage
|
||||
@@ -314,6 +315,9 @@ internal class InlineChecker(private val descriptor: FunctionDescriptor) : CallC
|
||||
if (declarationDescriptor.isInsidePrivateClass) {
|
||||
context.trace.report(PRIVATE_CLASS_MEMBER_FROM_INLINE.on(expression, declarationDescriptor, descriptor))
|
||||
context.reportDeprecationOnReplacement(expression, replacementForReport)
|
||||
} else if (declarationDescriptor.isMemberOfCompanionOfPrivateClass) {
|
||||
context.trace.report(PRIVATE_CLASS_MEMBER_FROM_INLINE_WARNING.on(expression, declarationDescriptor, descriptor))
|
||||
context.reportDeprecationOnReplacement(expression, replacementForReport)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// ISSUE: KT-55179
|
||||
// SKIP_TXT
|
||||
|
||||
private class Foo {
|
||||
companion object {
|
||||
fun buildFoo() = Foo()
|
||||
}
|
||||
}
|
||||
|
||||
internal <!NOTHING_TO_INLINE!>inline<!> fun foo() {
|
||||
<!PRIVATE_CLASS_MEMBER_FROM_INLINE!>Foo<!>()
|
||||
Foo.Companion
|
||||
Foo.buildFoo()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// ISSUE: KT-55179
|
||||
// SKIP_TXT
|
||||
|
||||
private class Foo {
|
||||
companion object {
|
||||
fun buildFoo() = Foo()
|
||||
}
|
||||
}
|
||||
|
||||
internal <!NOTHING_TO_INLINE!>inline<!> fun foo() {
|
||||
<!PRIVATE_CLASS_MEMBER_FROM_INLINE!>Foo<!>()
|
||||
Foo.<!PRIVATE_CLASS_MEMBER_FROM_INLINE!>Companion<!>
|
||||
Foo.<!PRIVATE_CLASS_MEMBER_FROM_INLINE_WARNING!>buildFoo<!>()
|
||||
}
|
||||
|
||||
Generated
+6
@@ -18075,6 +18075,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/nonPublicMember/kt14887.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt55179.kt")
|
||||
public void testKt55179() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/nonPublicMember/kt55179.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("localClass.kt")
|
||||
public void testLocalClass() throws Exception {
|
||||
|
||||
@@ -135,6 +135,13 @@ val DeclarationDescriptor.isInsidePrivateClass: Boolean
|
||||
return parent != null && DescriptorVisibilities.isPrivate(parent.visibility)
|
||||
}
|
||||
|
||||
val DeclarationDescriptor.isMemberOfCompanionOfPrivateClass: Boolean
|
||||
get() {
|
||||
val parent = containingDeclaration as? ClassDescriptor ?: return false
|
||||
if (!parent.isCompanionObject) return false
|
||||
return parent.isInsidePrivateClass
|
||||
}
|
||||
|
||||
val DeclarationDescriptor.isInsideInterface: Boolean
|
||||
get() {
|
||||
val parent = containingDeclaration as? ClassDescriptor
|
||||
|
||||
Reference in New Issue
Block a user