Implemented HiddenDeclaration annotation (doc-comment to be added!)
This commit is contained in:
@@ -610,6 +610,8 @@ public class CallResolver {
|
|||||||
) {
|
) {
|
||||||
final List<CallCandidateResolutionContext<D>> candidateResolutionContexts = ContainerUtil.newArrayList();
|
final List<CallCandidateResolutionContext<D>> candidateResolutionContexts = ContainerUtil.newArrayList();
|
||||||
for (final ResolutionCandidate<D> resolutionCandidate : task.getCandidates()) {
|
for (final ResolutionCandidate<D> resolutionCandidate : task.getCandidates()) {
|
||||||
|
if (DescriptorUtilPackage.isAnnotatedAsHidden(resolutionCandidate.getDescriptor())) continue;
|
||||||
|
|
||||||
candidatePerfCounter.time(new Function0<Unit>() {
|
candidatePerfCounter.time(new Function0<Unit>() {
|
||||||
@Override
|
@Override
|
||||||
public Unit invoke() {
|
public Unit invoke() {
|
||||||
|
|||||||
+4
@@ -575,6 +575,10 @@ public interface FloatingPointConstants</*0*/ T> {
|
|||||||
public interface Function</*0*/ out R> {
|
public interface Function</*0*/ out R> {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kotlin.annotation.target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.CONSTRUCTOR}) kotlin.annotation.annotation(mustBeDocumented = true, retention = AnnotationRetention.BINARY) public final class HiddenDeclaration : kotlin.Annotation {
|
||||||
|
/*primary*/ public constructor HiddenDeclaration()
|
||||||
|
}
|
||||||
|
|
||||||
public final enum class InlineOption : kotlin.Enum<kotlin.InlineOption> {
|
public final enum class InlineOption : kotlin.Enum<kotlin.InlineOption> {
|
||||||
enum entry LOCAL_CONTINUE_AND_BREAK
|
enum entry LOCAL_CONTINUE_AND_BREAK
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
// imports should be resolved
|
||||||
|
import test.topLevelFun
|
||||||
|
import test.topLevelProperty
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
fun topLevelFun(){}
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
var topLevelProperty = 1
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
fun String.topLevelExtensionFun(){}
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
val String.topLevelExtensionProperty: Int get() = 1
|
||||||
|
|
||||||
|
open class A {
|
||||||
|
constructor(<!UNUSED_PARAMETER!>p<!>: Int) : this(<!TYPE_MISMATCH!>""<!>) {}
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
constructor(<!UNUSED_PARAMETER!>s<!>: String){}
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
open fun memberFun(){}
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
val memberProperty = 1
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
fun String.memberExtensionFun(){}
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
val String.memberExtensionProperty: Int get() = 1
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
<!UNRESOLVED_REFERENCE!>topLevelFun<!>()
|
||||||
|
<!UNRESOLVED_REFERENCE, VARIABLE_EXPECTED!>topLevelProperty<!><!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>++<!>
|
||||||
|
"".<!UNRESOLVED_REFERENCE!>topLevelExtensionFun<!>()
|
||||||
|
"".<!UNRESOLVED_REFERENCE!>topLevelExtensionProperty<!>
|
||||||
|
|
||||||
|
<!UNRESOLVED_REFERENCE!>memberFun<!>()
|
||||||
|
<!UNRESOLVED_REFERENCE!>memberProperty<!>
|
||||||
|
"".<!UNRESOLVED_REFERENCE!>memberExtensionFun<!>()
|
||||||
|
"".<!UNRESOLVED_REFERENCE!>memberExtensionProperty<!>
|
||||||
|
|
||||||
|
A(<!TYPE_MISMATCH!>""<!>)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface I {
|
||||||
|
@HiddenDeclaration
|
||||||
|
fun foo1()
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
fun foo2()
|
||||||
|
}
|
||||||
|
|
||||||
|
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class X<!> : I {
|
||||||
|
override fun foo1() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : A(<!TYPE_MISMATCH!>""<!>) {
|
||||||
|
// still can override it
|
||||||
|
override fun memberFun() {
|
||||||
|
super.<!UNRESOLVED_REFERENCE!>memberFun<!>() // but cannot call super :)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class C : A {
|
||||||
|
constructor() : super(<!TYPE_MISMATCH!>""<!>)
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
package test {
|
||||||
|
kotlin.HiddenDeclaration() internal var topLevelProperty: kotlin.Int
|
||||||
|
kotlin.HiddenDeclaration() internal val kotlin.String.topLevelExtensionProperty: kotlin.Int
|
||||||
|
kotlin.HiddenDeclaration() internal fun topLevelFun(): kotlin.Unit
|
||||||
|
kotlin.HiddenDeclaration() internal fun kotlin.String.topLevelExtensionFun(): kotlin.Unit
|
||||||
|
|
||||||
|
internal open class A {
|
||||||
|
public constructor A(/*0*/ p: kotlin.Int)
|
||||||
|
kotlin.HiddenDeclaration() public constructor A(/*0*/ s: kotlin.String)
|
||||||
|
kotlin.HiddenDeclaration() internal final val memberProperty: kotlin.Int = 1
|
||||||
|
kotlin.HiddenDeclaration() internal final val kotlin.String.memberExtensionProperty: kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
internal final fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
kotlin.HiddenDeclaration() internal open fun memberFun(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
kotlin.HiddenDeclaration() internal final fun kotlin.String.memberExtensionFun(): kotlin.Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
internal final class B : test.A {
|
||||||
|
public constructor B()
|
||||||
|
kotlin.HiddenDeclaration() internal final override /*1*/ /*fake_override*/ val memberProperty: kotlin.Int
|
||||||
|
kotlin.HiddenDeclaration() internal final override /*1*/ /*fake_override*/ val kotlin.String.memberExtensionProperty: kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
internal final override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
internal open override /*1*/ fun memberFun(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
kotlin.HiddenDeclaration() internal final override /*1*/ /*fake_override*/ fun kotlin.String.memberExtensionFun(): kotlin.Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
internal final class C : test.A {
|
||||||
|
public constructor C()
|
||||||
|
kotlin.HiddenDeclaration() internal final override /*1*/ /*fake_override*/ val memberProperty: kotlin.Int
|
||||||
|
kotlin.HiddenDeclaration() internal final override /*1*/ /*fake_override*/ val kotlin.String.memberExtensionProperty: kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
internal final override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
kotlin.HiddenDeclaration() internal open override /*1*/ /*fake_override*/ fun memberFun(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
kotlin.HiddenDeclaration() internal final override /*1*/ /*fake_override*/ fun kotlin.String.memberExtensionFun(): kotlin.Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
internal interface I {
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
kotlin.HiddenDeclaration() internal abstract fun foo1(): kotlin.Unit
|
||||||
|
kotlin.HiddenDeclaration() internal abstract fun foo2(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
internal final class X : test.I {
|
||||||
|
public constructor X()
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
internal open override /*1*/ fun foo1(): kotlin.Unit
|
||||||
|
kotlin.HiddenDeclaration() internal abstract override /*1*/ /*fake_override*/ fun foo2(): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11676,6 +11676,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("HiddenDeclarations.kt")
|
||||||
|
public void testHiddenDeclarations() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("incompleteConstructorInvocation.kt")
|
@TestMetadata("incompleteConstructorInvocation.kt")
|
||||||
public void testIncompleteConstructorInvocation() throws Exception {
|
public void testIncompleteConstructorInvocation() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/resolve/incompleteConstructorInvocation.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/resolve/incompleteConstructorInvocation.kt");
|
||||||
|
|||||||
@@ -77,3 +77,10 @@ public annotation(retention = SOURCE) class suppress(vararg val names: String)
|
|||||||
*/
|
*/
|
||||||
target(FUNCTION)
|
target(FUNCTION)
|
||||||
public annotation(retention = SOURCE) class tailRecursive
|
public annotation(retention = SOURCE) class tailRecursive
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*/
|
||||||
|
target(FUNCTION, PROPERTY, CONSTRUCTOR)
|
||||||
|
annotation(retention = BINARY, mustBeDocumented = true)
|
||||||
|
public class HiddenDeclaration
|
||||||
|
|||||||
@@ -198,3 +198,8 @@ public val DeclarationDescriptor.parentsWithSelf: Sequence<DeclarationDescriptor
|
|||||||
|
|
||||||
public val DeclarationDescriptor.parents: Sequence<DeclarationDescriptor>
|
public val DeclarationDescriptor.parents: Sequence<DeclarationDescriptor>
|
||||||
get() = parentsWithSelf.drop(1)
|
get() = parentsWithSelf.drop(1)
|
||||||
|
|
||||||
|
private val HIDDEN_ANNOTATION_FQ_NAME = FqName("kotlin.HiddenDeclaration") /*TODO*/
|
||||||
|
|
||||||
|
public fun DeclarationDescriptor.isAnnotatedAsHidden(): Boolean = annotations.findAnnotation(HIDDEN_ANNOTATION_FQ_NAME) != null
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.SmartCastManager
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.SmartCastManager
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isAnnotatedAsHidden
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||||
import org.jetbrains.kotlin.resolve.scopes.*
|
import org.jetbrains.kotlin.resolve.scopes.*
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
@@ -75,7 +76,7 @@ public class ReferenceVariantsHelper(
|
|||||||
): Collection<DeclarationDescriptor> {
|
): Collection<DeclarationDescriptor> {
|
||||||
var variants: Collection<DeclarationDescriptor>
|
var variants: Collection<DeclarationDescriptor>
|
||||||
= getReferenceVariantsNoVisibilityFilter(expression, kindFilter, nameFilter, explicitReceiverData, useRuntimeReceiverType)
|
= getReferenceVariantsNoVisibilityFilter(expression, kindFilter, nameFilter, explicitReceiverData, useRuntimeReceiverType)
|
||||||
.filter(visibilityFilter)
|
.filter { !it.isAnnotatedAsHidden() && visibilityFilter(it) }
|
||||||
|
|
||||||
variants = ShadowedDeclarationsFilter(context, resolutionFacade, expression, explicitReceiverData).filter(variants)
|
variants = ShadowedDeclarationsFilter(context, resolutionFacade, expression, explicitReceiverData).filter(variants)
|
||||||
|
|
||||||
|
|||||||
Vendored
+14
@@ -0,0 +1,14 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
fun hiddenFun(){}
|
||||||
|
|
||||||
|
fun notHiddenFun(){}
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
var hiddenProperty: Int = 1
|
||||||
|
|
||||||
|
var notHiddenProperty: Int = 1
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
val String.hiddenExtension: Int get() = 1
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
@HiddenDeclaration
|
||||||
|
fun hiddenFunFromSameFile(){}
|
||||||
|
|
||||||
|
fun String.foo() {
|
||||||
|
hid<caret>
|
||||||
|
}
|
||||||
|
|
||||||
|
// INVOCATION_COUNT: 2
|
||||||
|
// ABSENT: hiddenFun
|
||||||
|
// ABSENT: hiddenProperty
|
||||||
|
// ABSENT: hiddenFunFromSameFile
|
||||||
|
// ABSENT: hiddenExtension
|
||||||
|
// EXIST: notHiddenFun
|
||||||
|
// EXIST: notHiddenProperty
|
||||||
+6
@@ -125,6 +125,12 @@ public class MultiFileJvmBasicCompletionTestGenerated extends AbstractMultiFileJ
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("HiddenDeclarations")
|
||||||
|
public void testHiddenDeclarations() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/multifile/HiddenDeclarations/");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("InImportedFunctionLiteralParameter")
|
@TestMetadata("InImportedFunctionLiteralParameter")
|
||||||
public void testInImportedFunctionLiteralParameter() throws Exception {
|
public void testInImportedFunctionLiteralParameter() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/multifile/InImportedFunctionLiteralParameter/");
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/multifile/InImportedFunctionLiteralParameter/");
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.SmartCastManager
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.SmartCastManager
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isAnnotatedAsHidden
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSessionUtils
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSessionUtils
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
@@ -57,11 +58,12 @@ public class KotlinIndicesHelper(
|
|||||||
private val moduleDescriptor = resolutionFacade.moduleDescriptor
|
private val moduleDescriptor = resolutionFacade.moduleDescriptor
|
||||||
private val project = resolutionFacade.project
|
private val project = resolutionFacade.project
|
||||||
|
|
||||||
private val descriptorFilter =
|
private val descriptorFilter: (DeclarationDescriptor) -> Boolean = filter@ {
|
||||||
if (applyExcludeSettings)
|
if (it.isAnnotatedAsHidden()) return@filter false
|
||||||
{ d -> visibilityFilter(d) && !isExcludedFromAutoImport(d) }
|
if (!visibilityFilter(it)) return@filter false
|
||||||
else
|
if (applyExcludeSettings && isExcludedFromAutoImport(it)) return@filter false
|
||||||
visibilityFilter
|
true
|
||||||
|
}
|
||||||
|
|
||||||
public fun getTopLevelCallablesByName(name: String): Collection<CallableDescriptor> {
|
public fun getTopLevelCallablesByName(name: String): Collection<CallableDescriptor> {
|
||||||
val declarations = HashSet<JetNamedDeclaration>()
|
val declarations = HashSet<JetNamedDeclaration>()
|
||||||
|
|||||||
Reference in New Issue
Block a user