K2 IC: fix classifiers lookups
in particular nested classifiers and companions. #KTIJ-24833 fixed #KTIJ-24830 fixed #KT-55195 fixed
This commit is contained in:
committed by
Space Team
parent
a823bfd600
commit
39b05a0a1c
+7
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.classId
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
||||
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
|
||||
@@ -21,6 +23,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.utils.SmartList
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
|
||||
|
||||
abstract class FirNestedClassifierScope(val klass: FirClass, val useSiteSession: FirSession) : FirContainingNamesAwareScope() {
|
||||
@@ -45,6 +48,10 @@ abstract class FirNestedClassifierScope(val klass: FirClass, val useSiteSession:
|
||||
abstract fun isEmpty(): Boolean
|
||||
|
||||
override fun getCallableNames(): Set<Name> = emptySet()
|
||||
|
||||
override val scopeOwnerLookupNames: List<String> =
|
||||
if (klass.isLocal) emptyList()
|
||||
else SmartList(klass.classId.asFqNameString())
|
||||
}
|
||||
|
||||
class FirNestedClassifierScopeImpl(klass: FirClass, useSiteSession: FirSession) : FirNestedClassifierScope(klass, useSiteSession) {
|
||||
|
||||
@@ -43,11 +43,18 @@ fun BodyResolveComponents.resolveRootPartOfQualifier(
|
||||
this.nonFatalDiagnostics.addAll(nonFatalDiagnosticsFromExpression.orEmpty())
|
||||
annotations += qualifiedAccess.annotations
|
||||
}.apply {
|
||||
setTypeOfQualifier(session)
|
||||
setTypeOfQualifier(this@resolveRootPartOfQualifier)
|
||||
}
|
||||
}
|
||||
|
||||
for (scope in createCurrentScopeList()) {
|
||||
val scopes = createCurrentScopeList()
|
||||
session.lookupTracker?.recordNameLookup(
|
||||
name,
|
||||
scopes.asSequence().flatMap { it.scopeOwnerLookupNames }.asIterable(),
|
||||
qualifiedAccess.source,
|
||||
file.source
|
||||
)
|
||||
for (scope in scopes) {
|
||||
scope.getSingleVisibleClassifier(session, this, name)?.let {
|
||||
val klass = (it as? FirClassLikeSymbol<*>)?.fullyExpandedClass(session)
|
||||
?: return@let
|
||||
@@ -79,7 +86,7 @@ fun BodyResolveComponents.resolveRootPartOfQualifier(
|
||||
)
|
||||
annotations += qualifiedAccess.annotations
|
||||
}.apply {
|
||||
setTypeOfQualifier(session)
|
||||
setTypeOfQualifier(this@resolveRootPartOfQualifier)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,6 +111,9 @@ fun FirResolvedQualifier.continueQualifier(
|
||||
val firClass = outerClassSymbol.fir
|
||||
if (firClass !is FirClass) return null
|
||||
return firClass.scopeProvider.getNestedClassifierScope(firClass, components.session, components.scopeSession)
|
||||
?.also {
|
||||
session.lookupTracker?.recordNameLookup(name, it.scopeOwnerLookupNames, qualifiedAccess.source, components.file.source)
|
||||
}
|
||||
?.getSingleVisibleClassifier(session, components, name)
|
||||
?.takeIf { it is FirClassLikeSymbol<*> }
|
||||
?.let { nestedClassSymbol ->
|
||||
@@ -128,7 +138,7 @@ fun FirResolvedQualifier.continueQualifier(
|
||||
)
|
||||
)
|
||||
}.apply {
|
||||
setTypeOfQualifier(components.session)
|
||||
setTypeOfQualifier(components)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -156,7 +166,7 @@ private fun FqName.continueQualifierInPackage(
|
||||
this.nonFatalDiagnostics.addAll(nonFatalDiagnosticsFromExpression.orEmpty())
|
||||
annotations += qualifiedAccess.annotations
|
||||
}.apply {
|
||||
setTypeOfQualifier(components.session)
|
||||
setTypeOfQualifier(components)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,7 +191,7 @@ private fun FqName.continueQualifierInPackage(
|
||||
isFullyQualified = true
|
||||
annotations += qualifiedAccess.annotations
|
||||
}.apply {
|
||||
setTypeOfQualifier(components.session)
|
||||
setTypeOfQualifier(components)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -213,22 +213,22 @@ fun BodyResolveComponents.buildResolvedQualifierForClass(
|
||||
this.annotations.addAll(annotations)
|
||||
}.build().apply {
|
||||
if (classId.isLocal) {
|
||||
resultType = typeForQualifierByDeclaration(regularClass.fir, session)
|
||||
resultType = typeForQualifierByDeclaration(regularClass.fir, session, element = this@apply, file)
|
||||
?.also { replaceCanBeValue(true) }
|
||||
?: session.builtinTypes.unitType.type
|
||||
} else {
|
||||
setTypeOfQualifier(session)
|
||||
setTypeOfQualifier(this@buildResolvedQualifierForClass)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun FirResolvedQualifier.setTypeOfQualifier(session: FirSession) {
|
||||
fun FirResolvedQualifier.setTypeOfQualifier(components: BodyResolveComponents) {
|
||||
val classSymbol = symbol
|
||||
if (classSymbol != null) {
|
||||
classSymbol.lazyResolveToPhase(FirResolvePhase.TYPES)
|
||||
val declaration = classSymbol.fir
|
||||
if (declaration !is FirTypeAlias || typeArguments.isEmpty()) {
|
||||
val typeByDeclaration = typeForQualifierByDeclaration(declaration, session)
|
||||
val typeByDeclaration = typeForQualifierByDeclaration(declaration, components.session, element = this, components.file)
|
||||
if (typeByDeclaration != null) {
|
||||
this.resultType = typeByDeclaration
|
||||
replaceCanBeValue(true)
|
||||
@@ -236,7 +236,7 @@ fun FirResolvedQualifier.setTypeOfQualifier(session: FirSession) {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.resultType = session.builtinTypes.unitType.type
|
||||
this.resultType = components.session.builtinTypes.unitType.type
|
||||
}
|
||||
|
||||
internal fun typeForReifiedParameterReference(parameterReferenceBuilder: FirResolvedReifiedParameterReferenceBuilder): ConeLookupTagBasedType {
|
||||
@@ -244,10 +244,12 @@ internal fun typeForReifiedParameterReference(parameterReferenceBuilder: FirReso
|
||||
return typeParameterSymbol.constructType(emptyArray(), false)
|
||||
}
|
||||
|
||||
internal fun typeForQualifierByDeclaration(declaration: FirDeclaration, session: FirSession): ConeKotlinType? {
|
||||
internal fun typeForQualifierByDeclaration(
|
||||
declaration: FirDeclaration, session: FirSession, element: FirElement, file: FirFile
|
||||
): ConeKotlinType? {
|
||||
if (declaration is FirTypeAlias) {
|
||||
val expandedDeclaration = declaration.expandedConeType?.lookupTag?.toSymbol(session)?.fir ?: return null
|
||||
return typeForQualifierByDeclaration(expandedDeclaration, session)
|
||||
return typeForQualifierByDeclaration(expandedDeclaration, session, element, file)
|
||||
}
|
||||
if (declaration is FirRegularClass) {
|
||||
if (declaration.classKind == ClassKind.OBJECT) {
|
||||
@@ -255,6 +257,7 @@ internal fun typeForQualifierByDeclaration(declaration: FirDeclaration, session:
|
||||
} else {
|
||||
val companionObjectSymbol = declaration.companionObjectSymbol
|
||||
if (companionObjectSymbol != null) {
|
||||
session.lookupTracker?.recordCompanionLookup(companionObjectSymbol.classId, element.source, file.source)
|
||||
return companionObjectSymbol.constructType(emptyArray(), false)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -119,7 +119,7 @@ internal abstract class FirBaseTowerResolveTask(
|
||||
this.symbol = it
|
||||
this.source = source?.fakeElement(KtFakeSourceElementKind.ImplicitReceiver)
|
||||
}.apply {
|
||||
setTypeOfQualifier(components.session)
|
||||
setTypeOfQualifier(components)
|
||||
}
|
||||
ExpressionReceiverValue(resolvedQualifier)
|
||||
}
|
||||
|
||||
+1
-1
@@ -363,7 +363,7 @@ internal class ScopeTowerLevel(
|
||||
this.symbol = this@toResolvedQualifierExpressionReceiver
|
||||
this.source = source?.fakeElement(KtFakeSourceElementKind.ImplicitReceiver)
|
||||
}.apply {
|
||||
setTypeOfQualifier(bodyResolveComponents.session)
|
||||
setTypeOfQualifier(bodyResolveComponents)
|
||||
}
|
||||
return ExpressionReceiverValue(resolvedQualifier)
|
||||
}
|
||||
|
||||
+4
-1
@@ -18,7 +18,10 @@ import org.jetbrains.kotlin.name.FqName
|
||||
@NoMutableState
|
||||
class FirQualifierResolverImpl(val session: FirSession) : FirQualifierResolver() {
|
||||
|
||||
override fun resolveSymbolWithPrefix(parts: List<FirQualifierPart>, prefix: ClassId): FirClassifierSymbol<*>? {
|
||||
override fun resolveSymbolWithPrefix(
|
||||
parts: List<FirQualifierPart>, prefix: ClassId
|
||||
): FirClassifierSymbol<*>? {
|
||||
|
||||
val symbolProvider = session.symbolProvider
|
||||
|
||||
val fqName = ClassId(
|
||||
|
||||
+7
-1
@@ -118,6 +118,10 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver() {
|
||||
}
|
||||
}
|
||||
|
||||
session.lookupTracker?.recordUserTypeRefLookup(
|
||||
typeRef, scopes.asSequence().flatMap { it.scopeOwnerLookupNames }.asIterable(), useSiteFile?.source
|
||||
)
|
||||
|
||||
for (scope in scopes) {
|
||||
if (applicability == CandidateApplicability.RESOLVED) break
|
||||
scope.processClassifiersByNameWithSubstitution(qualifier.first().name) { symbol, substitutorFromScope ->
|
||||
@@ -205,7 +209,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver() {
|
||||
@OptIn(SymbolInternals::class)
|
||||
private fun FirQualifierResolver.resolveEnumEntrySymbol(
|
||||
qualifier: List<FirQualifierPart>,
|
||||
classId: ClassId
|
||||
classId: ClassId,
|
||||
): FirVariableSymbol<FirEnumEntry>? {
|
||||
// Assuming the current qualifier refers to an enum entry, we drop the last part so we get a reference to the enum class.
|
||||
val enumClassSymbol = resolveSymbolWithPrefix(qualifier.dropLast(1), classId) ?: return null
|
||||
@@ -453,6 +457,8 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver() {
|
||||
}
|
||||
}
|
||||
else -> error(typeRef.render())
|
||||
}.also {
|
||||
session.lookupTracker?.recordTypeResolveAsLookup(it.type, typeRef.source, useSiteFile?.source)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-4
@@ -15,8 +15,6 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeUnexpectedTypeArgumentsError
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.lookupTracker
|
||||
import org.jetbrains.kotlin.fir.recordTypeLookup
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.FirTypeResolutionResult
|
||||
import org.jetbrains.kotlin.fir.resolve.SupertypeSupplier
|
||||
@@ -87,11 +85,11 @@ class FirSpecificTypeResolverTransformer(
|
||||
|
||||
@OptIn(PrivateForInline::class)
|
||||
override fun transformTypeRef(typeRef: FirTypeRef, data: ScopeClassDeclaration): FirResolvedTypeRef {
|
||||
session.lookupTracker?.recordTypeLookup(typeRef, data.scopes.flatMap { it.scopeOwnerLookupNames }, currentFile?.source)
|
||||
withBareTypes(allowed = false) {
|
||||
typeRef.transformChildren(this, data)
|
||||
}
|
||||
val (resolvedType, diagnostic) = resolveType(typeRef, data)
|
||||
|
||||
return transformType(typeRef, resolvedType, diagnostic, data)
|
||||
}
|
||||
|
||||
@@ -101,7 +99,6 @@ class FirSpecificTypeResolverTransformer(
|
||||
data: ScopeClassDeclaration
|
||||
): FirResolvedTypeRef {
|
||||
functionTypeRef.transformChildren(this, data)
|
||||
session.lookupTracker?.recordTypeLookup(functionTypeRef, data.scopes.flatMap { it.scopeOwnerLookupNames }, currentFile?.source)
|
||||
val resolvedTypeWithDiagnostic = resolveType(functionTypeRef, data)
|
||||
val resolvedType = resolvedTypeWithDiagnostic.type.takeIfAcceptable()
|
||||
val diagnostic = resolvedTypeWithDiagnostic.diagnostic
|
||||
@@ -254,6 +251,7 @@ class FirSpecificTypeResolverTransformer(
|
||||
val typeRefToTry = buildUserTypeRef {
|
||||
qualifier += qualifiersToTry
|
||||
isMarkedNullable = false
|
||||
source = typeRef.source
|
||||
}
|
||||
val (resolvedType, diagnostic) = resolveType(typeRefToTry, data)
|
||||
if (resolvedType is ConeErrorType || diagnostic != null) continue
|
||||
|
||||
+4
-12
@@ -8,7 +8,8 @@ package org.jetbrains.kotlin.fir.resolve.transformers
|
||||
import kotlinx.collections.immutable.PersistentList
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
|
||||
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.extensions.FirSupertypeGenerationExtension
|
||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||
import org.jetbrains.kotlin.fir.extensions.supertypeGenerators
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.isLocalClassOrAnonymousObject
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeTypeParameterSupertype
|
||||
@@ -41,7 +43,7 @@ import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.withFileAnalysisExceptionWrapping
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.types.model.TypeArgumentMarker
|
||||
import org.jetbrains.kotlin.util.PrivateForInline
|
||||
@@ -450,16 +452,6 @@ open class FirSupertypeResolverVisitor(
|
||||
supertypeRefs: List<FirTypeRef>,
|
||||
): List<FirResolvedTypeRef> {
|
||||
return resolveSpecificClassLikeSupertypes(classLikeDeclaration) { transformer, scopeDeclaration ->
|
||||
if (!classLikeDeclaration.isLocalClassOrAnonymousObject()) {
|
||||
session.lookupTracker?.let {
|
||||
val fileSource = getFirClassifierContainerFileIfAny(classLikeDeclaration.symbol)?.source
|
||||
val scopeOwnerLookupNames = scopeDeclaration.scopes.flatMap { scope -> scope.scopeOwnerLookupNames }
|
||||
for (supertypeRef in supertypeRefs) {
|
||||
it.recordTypeLookup(supertypeRef, scopeOwnerLookupNames, fileSource)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
supertypeRefs.mapTo(mutableListOf()) {
|
||||
val superTypeRef = it.transform<FirTypeRef, ScopeClassDeclaration>(transformer, scopeDeclaration)
|
||||
val typeParameterType = superTypeRef.coneTypeSafe<ConeTypeParameterType>()
|
||||
|
||||
+11
-2
@@ -158,16 +158,25 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
|
||||
},
|
||||
data,
|
||||
)
|
||||
|
||||
fun FirStatement.alsoRecordLookup() = also {
|
||||
if (transformedCallee is FirExpression && transformedCallee.isResolved) {
|
||||
session.lookupTracker?.recordTypeResolveAsLookup(
|
||||
transformedCallee.resolvedType, callee.source, components.file.source
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// NB: here we can get raw expression because of dropped qualifiers (see transform callee),
|
||||
// so candidate existence must be checked before calling completion
|
||||
if (transformedCallee is FirQualifiedAccessExpression && transformedCallee.candidate() != null) {
|
||||
if (!transformedCallee.isAcceptableResolvedQualifiedAccess()) {
|
||||
return qualifiedAccessExpression
|
||||
return qualifiedAccessExpression.alsoRecordLookup()
|
||||
}
|
||||
callCompleter.completeCall(transformedCallee, data)
|
||||
} else {
|
||||
transformedCallee
|
||||
}
|
||||
}.alsoRecordLookup()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,22 +40,24 @@ fun FirLookupTrackerComponent.recordCallLookup(callInfo: AbstractCallInfo, inSco
|
||||
recordNameLookup(callInfo.name, inScopes, callInfo.callSite.source, callInfo.containingFile.source)
|
||||
}
|
||||
|
||||
fun FirLookupTrackerComponent.recordTypeLookup(typeRef: FirTypeRef, inScopes: Iterable<String>, fileSource: KtSourceElement?) {
|
||||
if (typeRef is FirUserTypeRef) recordNameLookup(typeRef.qualifier.first().name, inScopes, typeRef.source, fileSource)
|
||||
}
|
||||
|
||||
fun FirLookupTrackerComponent.recordClassLikeLookup(classId: ClassId, source: KtSourceElement?, fileSource: KtSourceElement?) {
|
||||
if (!classId.isLocal && classId !in StandardClassIds.allBuiltinTypes) {
|
||||
recordLookup(classId.relativeClassName.asString(), classId.packageFqName.asString(), source, fileSource)
|
||||
if (classId.shortClassName == DEFAULT_NAME_FOR_COMPANION_OBJECT) {
|
||||
val classFqName = classId.asSingleFqName()
|
||||
recordLookup(classFqName.shortName().asString(), classFqName.parent().asString(), source, fileSource)
|
||||
}
|
||||
}
|
||||
|
||||
fun FirLookupTrackerComponent.recordCompanionLookup(classId: ClassId, source: KtSourceElement?, fileSource: KtSourceElement?) {
|
||||
if (!classId.isLocal && classId !in StandardClassIds.allBuiltinTypes) {
|
||||
val classFqName = classId.asSingleFqName()
|
||||
recordLookup(classFqName.shortName().asString(), classFqName.parent().asString(), source, fileSource)
|
||||
recordLookup(
|
||||
classId.outerClassId!!.relativeClassName.asString(),
|
||||
classId.outerClassId!!.packageFqName.asString(),
|
||||
classFqName.parent().shortName().asString(),
|
||||
classFqName.parent().parent().asString(),
|
||||
source, fileSource
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun FirLookupTrackerComponent.recordClassMemberLookup(
|
||||
memberName: String, classId: ClassId, source: KtSourceElement?, fileSource: KtSourceElement?
|
||||
@@ -82,6 +84,15 @@ fun FirLookupTrackerComponent.recordTypeResolveAsLookup(typeRef: FirTypeRef, sou
|
||||
recordTypeResolveAsLookup(typeRef.type, source, fileSource)
|
||||
}
|
||||
|
||||
fun FirLookupTrackerComponent.recordUserTypeRefLookup(typeRef: FirUserTypeRef, inScopes: Iterable<String>, fileSource: KtSourceElement?) {
|
||||
inScopes.forEach { scope ->
|
||||
typeRef.qualifier.fold(FqName(scope)) { result, suffix ->
|
||||
recordLookup(suffix.name.asString(), result.asString(), typeRef.source, fileSource)
|
||||
result.child(suffix.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: review all places that record resolved type as lookup and consider minimize the number of them; see #KT-66366
|
||||
fun FirLookupTrackerComponent.recordTypeResolveAsLookup(type: ConeKotlinType?, source: KtSourceElement?, fileSource: KtSourceElement?) {
|
||||
if (type == null) return
|
||||
|
||||
Generated
+15
@@ -34,6 +34,11 @@ public class JvmLookupTrackerTestGenerated extends AbstractJvmLookupTrackerTest
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/");
|
||||
}
|
||||
|
||||
@TestMetadata("companion")
|
||||
public void testCompanion() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/companion/");
|
||||
}
|
||||
|
||||
@TestMetadata("conventions")
|
||||
public void testConventions() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/");
|
||||
@@ -64,6 +69,16 @@ public class JvmLookupTrackerTestGenerated extends AbstractJvmLookupTrackerTest
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/localDeclarations/");
|
||||
}
|
||||
|
||||
@TestMetadata("namedCompanion")
|
||||
public void testNamedCompanion() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/namedCompanion/");
|
||||
}
|
||||
|
||||
@TestMetadata("nested")
|
||||
public void testNested() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/");
|
||||
}
|
||||
|
||||
@TestMetadata("packageDeclarations")
|
||||
public void testPackageDeclarations() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/packageDeclarations/");
|
||||
|
||||
Generated
+15
@@ -34,6 +34,11 @@ public class K1JvmLookupTrackerTestGenerated extends AbstractK1JvmLookupTrackerT
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/classifierMembers/");
|
||||
}
|
||||
|
||||
@TestMetadata("companion")
|
||||
public void testCompanion() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/companion/");
|
||||
}
|
||||
|
||||
@TestMetadata("conventions")
|
||||
public void testConventions() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/conventions/");
|
||||
@@ -64,6 +69,16 @@ public class K1JvmLookupTrackerTestGenerated extends AbstractK1JvmLookupTrackerT
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/localDeclarations/");
|
||||
}
|
||||
|
||||
@TestMetadata("namedCompanion")
|
||||
public void testNamedCompanion() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/namedCompanion/");
|
||||
}
|
||||
|
||||
@TestMetadata("nested")
|
||||
public void testNested() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/nested/");
|
||||
}
|
||||
|
||||
@TestMetadata("packageDeclarations")
|
||||
public void testPackageDeclarations() {
|
||||
runTest("jps/jps-plugin/testData/incremental/lookupTracker/jvm/packageDeclarations/");
|
||||
|
||||
Vendored
+6
-15
@@ -2,27 +2,19 @@
|
||||
|
||||
After chunkBuildStarted. Marked as dirty by Kotlin:
|
||||
src/A.kt
|
||||
Cleaning output files:
|
||||
out/production/module/A$Companion.class
|
||||
out/production/module/A.class
|
||||
out/production/module/META-INF/module.kotlin_module
|
||||
End of files
|
||||
Compiling files:
|
||||
src/A.kt
|
||||
End of files
|
||||
After build round. Marked as dirty by Kotlin:
|
||||
src/companionExtension.kt
|
||||
src/companionReferenceExplicit.kt
|
||||
src/companionReferenceImplicit.kt
|
||||
Exit code: ADDITIONAL_PASS_REQUIRED
|
||||
------------------------------------------
|
||||
Cleaning output files:
|
||||
out/production/module/A$Companion.class
|
||||
out/production/module/A.class
|
||||
out/production/module/CompanionExtensionKt.class
|
||||
out/production/module/CompanionReferenceExplicitKt.class
|
||||
out/production/module/CompanionReferenceImplicitKt.class
|
||||
out/production/module/META-INF/module.kotlin_module
|
||||
End of files
|
||||
Compiling files:
|
||||
src/A.kt
|
||||
src/companionExtension.kt
|
||||
src/companionReferenceExplicit.kt
|
||||
src/companionReferenceImplicit.kt
|
||||
@@ -30,13 +22,12 @@ End of files
|
||||
Exit code: ABORT
|
||||
------------------------------------------
|
||||
COMPILATION FAILED
|
||||
Unresolved reference 'Companion'.
|
||||
Unresolved reference 'x'.
|
||||
Unresolved reference 'Companion'.
|
||||
|
||||
================ Step #2 =================
|
||||
|
||||
Cleaning output files:
|
||||
out/production/module/A$AA.class
|
||||
out/production/module/A.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/A.kt
|
||||
src/companionExtension.kt
|
||||
|
||||
+2
-2
@@ -2,6 +2,6 @@ package foo
|
||||
|
||||
import bar.*
|
||||
|
||||
/*p:foo*/fun <T : /*p:bar p:foo*/A?, B : /*p:bar p:foo*/Iterable</*p:bar p:foo*/Number>, C, D> test()
|
||||
where C : /*p:bar p:foo*/Number, C : /*p:bar p:foo*/Comparable</*p:bar p:foo*/Number>, D : /*p:bar p:foo*/B
|
||||
/*p:foo*/fun <T : /*p:bar p:foo*/A?, B : /*p:bar p:foo p:kotlin(Number) p:kotlin.collections*/Iterable</*p:bar p:foo p:kotlin*/Number>, C, D> test()
|
||||
where C : /*p:bar p:foo p:kotlin*/Number, C : /*p:bar p:foo p:kotlin p:kotlin(Number)*/Comparable</*p:bar p:foo p:kotlin*/Number>, D : /*p:bar p:foo*/B
|
||||
{}
|
||||
|
||||
+6
-6
@@ -6,10 +6,10 @@ import bar.*
|
||||
val a = 1
|
||||
var b = ""
|
||||
|
||||
val c: /*p:bar p:foo*/String
|
||||
val c: /*p:bar p:foo p:foo.A*/String
|
||||
get() = /*p:foo.A*/b
|
||||
|
||||
var d: /*p:bar p:foo*/String = "ddd"
|
||||
var d: /*p:bar p:foo p:foo.A*/String = "ddd"
|
||||
get() = field
|
||||
set(v) { field = v }
|
||||
|
||||
@@ -27,7 +27,7 @@ import bar.*
|
||||
val a = 1
|
||||
|
||||
companion object CO {
|
||||
fun bar(a: /*p:bar p:foo*/Int) {}
|
||||
fun bar(a: /*p:bar p:foo p:foo.A p:foo.A.B*/Int) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ import bar.*
|
||||
}
|
||||
|
||||
/*p:foo*/interface I {
|
||||
var a: /*p:bar p:foo*/Int
|
||||
var a: /*p:bar p:foo p:foo.I*/Int
|
||||
fun foo()
|
||||
|
||||
class NI
|
||||
@@ -64,8 +64,8 @@ import bar.*
|
||||
val a = 1
|
||||
fun foo() {
|
||||
/*p:foo.E*/a
|
||||
/*p:bar p:foo p:foo.E p:foo.E(a) p:kotlin.Enum p:kotlin.Enum.Companion*/Y.a
|
||||
/*p:bar p:foo p:foo(E) p:foo.E p:foo.E(a) p:kotlin(Enum) p:kotlin.Enum p:kotlin.Enum(Companion) p:kotlin.Enum.Companion*/Y.a
|
||||
/*p:foo.E*/foo()
|
||||
/*p:bar p:foo p:foo.E p:foo.E(foo) p:kotlin.Enum p:kotlin.Enum.Companion*/X.foo()
|
||||
/*p:bar p:foo p:foo(E) p:foo.E p:foo.E(foo) p:kotlin(Enum) p:kotlin.Enum p:kotlin.Enum(Companion) p:kotlin.Enum.Companion*/X.foo()
|
||||
}
|
||||
}
|
||||
|
||||
+27
-27
@@ -8,43 +8,43 @@ import bar.*
|
||||
/*p:foo p:foo.A(c)*/A().c
|
||||
/*p:foo p:foo.A(d)*/A().d = "new value"
|
||||
/*p:foo p:foo.A(foo)*/A().foo()
|
||||
/*p:foo p:foo.A.B(a)*/A.B().a
|
||||
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.bar(1)
|
||||
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.CO.bar(1)
|
||||
/*p:foo*/A
|
||||
/*p:foo p:foo.A(a) p:foo.A.Companion(a)*/A.a
|
||||
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
|
||||
/*p:foo*/A.Companion
|
||||
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.Companion.baz()
|
||||
/*p:foo*/A.O
|
||||
/*p:foo p:foo.A.O(v)*/A.O.v = "OK"
|
||||
/*p:bar p:foo p:foo.A(B) p:foo.A(Companion) p:foo.A.B(a)*/A.B().a
|
||||
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B(bar) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B.bar(1)
|
||||
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B./*p:foo.A.B*/CO.bar(1)
|
||||
/*p:foo p:foo.A(Companion)*/A
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(a) p:foo.A.Companion(a)*/A.a
|
||||
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
|
||||
/*p:bar p:foo p:foo.A(Companion)*/A./*p:foo.A*/Companion
|
||||
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A./*p:foo.A*/Companion.baz()
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O)*/A./*p:foo.A*/O
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O) p:foo.A.O(v)*/A./*p:foo.A*/O.v = "OK"
|
||||
|
||||
/*p:foo.I(a)*/i.a = 2
|
||||
/*p:foo p:foo.Obj(a)*/Obj.a
|
||||
/*p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
|
||||
/*p:foo(I) p:foo.I(a)*/i.a = 2
|
||||
/*p:bar p:foo p:foo.Obj(a)*/Obj.a
|
||||
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
|
||||
var ii: /*p:bar p:foo*/I = /*p:foo*/Obj
|
||||
/*p:foo.I(a)*/ii.a
|
||||
/*p:foo.I(foo)*/ii.foo()
|
||||
/*p:foo p:foo.Obj(b)*/Obj.b
|
||||
val iii = /*p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
|
||||
/*p:foo.I(foo)*/iii.foo()
|
||||
/*p:foo(I) p:foo.I(a)*/ii.a
|
||||
/*p:foo(I) p:foo.I(foo)*/ii.foo()
|
||||
/*p:bar p:foo p:foo.Obj(b)*/Obj.b
|
||||
val iii = /*p:bar p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
|
||||
/*p:foo(I) p:foo.I(foo)*/iii.foo()
|
||||
|
||||
/*p:bar p:foo p:foo.E(X)*/E.X
|
||||
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E.X.a
|
||||
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E.Y.foo()
|
||||
/*p:bar p:foo p:foo.E(X)*/E./*p:foo(E)*/X
|
||||
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E./*p:foo(E)*/X.a
|
||||
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E./*p:foo(E)*/Y.foo()
|
||||
/*p:bar p:foo p:foo.E(values) p:kotlin(Array)*/E.values()
|
||||
/*p:bar p:foo p:foo.E(valueOf)*/E.valueOf("")
|
||||
}
|
||||
|
||||
/*p:foo*/fun classifiers(
|
||||
a: /*p:bar p:foo*/A,
|
||||
ab: /*p:bar p:foo*/A.B,
|
||||
ac: /*p:bar p:foo*/A.C,
|
||||
abCo: /*p:bar p:foo*/A.B.CO,
|
||||
aCompanion: /*p:bar p:foo*/A.Companion,
|
||||
aO: /*p:bar p:foo*/A.O,
|
||||
ab: /*p:bar p:bar.A(B) p:foo p:foo.A(B)*/A.B,
|
||||
ac: /*p:bar p:bar.A(C) p:foo p:foo.A(C)*/A.C,
|
||||
abCo: /*p:bar p:bar.A(B) p:bar.A.B(CO) p:foo p:foo.A(B) p:foo.A.B(CO)*/A.B.CO,
|
||||
aCompanion: /*p:bar p:bar.A(Companion) p:foo p:foo.A(Companion)*/A.Companion,
|
||||
aO: /*p:bar p:bar.A(O) p:foo p:foo.A(O)*/A.O,
|
||||
i: /*p:bar p:foo*/I,
|
||||
ni: /*p:bar p:foo*/I.NI,
|
||||
ni: /*p:bar p:bar.I(NI) p:foo p:foo.I(NI)*/I.NI,
|
||||
obj: /*p:bar p:foo*/Obj,
|
||||
e: /*p:bar p:foo*/E
|
||||
) {}
|
||||
|
||||
+29
-29
@@ -8,32 +8,32 @@ import bar.*
|
||||
/*p:foo p:foo.A(c)*/A().c
|
||||
/*p:foo p:foo.A(d)*/A().d = "new value"
|
||||
/*p:foo p:foo.A(foo)*/A().foo()
|
||||
/*p:foo p:foo.A.B(a)*/A.B().a
|
||||
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.bar(1)
|
||||
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.CO.bar(1)
|
||||
/*p:foo*/A
|
||||
/*p:foo p:foo.A(a) p:foo.A.Companion(a)*/A.a
|
||||
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
|
||||
/*p:foo*/A.Companion
|
||||
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.Companion.baz()
|
||||
/*p:foo*/A.O
|
||||
/*p:foo p:foo.A.O(v)*/A.O.v = "OK"
|
||||
/*p:bar(vala) p:foo p:foo(vala) p:foo.A(vala) p:foo.A.Companion(vala)*/A.vala
|
||||
/*p:bar(vara) p:foo p:foo(vara) p:foo.A(vara) p:foo.A.Companion(vara)*/A.vara()
|
||||
/*p:bar p:foo p:foo.A(B) p:foo.A(Companion) p:foo.A.B(a)*/A.B().a
|
||||
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B(bar) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B.bar(1)
|
||||
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B./*p:foo.A.B*/CO.bar(1)
|
||||
/*p:foo p:foo.A(Companion)*/A
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(a) p:foo.A.Companion(a)*/A.a
|
||||
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
|
||||
/*p:bar p:foo p:foo.A(Companion)*/A./*p:foo.A*/Companion
|
||||
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A./*p:foo.A*/Companion.baz()
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O)*/A./*p:foo.A*/O
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O) p:foo.A.O(v)*/A./*p:foo.A*/O.v = "OK"
|
||||
/*p:bar p:bar(vala) p:foo p:foo(vala) p:foo.A(Companion) p:foo.A(vala) p:foo.A.Companion(vala)*/A.vala
|
||||
/*p:bar p:bar(vara) p:foo p:foo(vara) p:foo.A(Companion) p:foo.A(vara) p:foo.A.Companion(vara)*/A.vara()
|
||||
|
||||
/*p:foo.I(a)*/i.a = 2
|
||||
/*p:foo p:foo.Obj(a)*/Obj.a
|
||||
/*p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
|
||||
/*p:foo(I) p:foo.I(a)*/i.a = 2
|
||||
/*p:bar p:foo p:foo.Obj(a)*/Obj.a
|
||||
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
|
||||
var ii: /*p:bar p:foo*/I = /*p:foo*/Obj
|
||||
/*p:foo.I(a)*/ii.a
|
||||
/*p:foo.I(foo)*/ii.foo()
|
||||
/*p:foo p:foo.Obj(b)*/Obj.b
|
||||
val iii = /*p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
|
||||
/*p:foo.I(foo)*/iii.foo()
|
||||
/*p:foo(I) p:foo.I(a)*/ii.a
|
||||
/*p:foo(I) p:foo.I(foo)*/ii.foo()
|
||||
/*p:bar p:foo p:foo.Obj(b)*/Obj.b
|
||||
val iii = /*p:bar p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
|
||||
/*p:foo(I) p:foo.I(foo)*/iii.foo()
|
||||
|
||||
/*p:bar p:foo p:foo.E(X)*/E.X
|
||||
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E.X.a
|
||||
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E.Y.foo()
|
||||
/*p:bar p:foo p:foo.E(X)*/E./*p:foo(E)*/X
|
||||
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E./*p:foo(E)*/X.a
|
||||
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E./*p:foo(E)*/Y.foo()
|
||||
/*p:bar p:foo p:foo.E(values) p:kotlin(Array)*/E.values()
|
||||
/*p:bar p:foo p:foo.E(valueOf)*/E.valueOf("")
|
||||
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.E(foo)*/E.foo
|
||||
@@ -42,13 +42,13 @@ import bar.*
|
||||
|
||||
/*p:foo*/fun classifiers(
|
||||
a: /*p:bar p:foo*/A,
|
||||
ab: /*p:bar p:foo*/A.B,
|
||||
ac: /*p:bar p:foo*/A.C,
|
||||
abCo: /*p:bar p:foo*/A.B.CO,
|
||||
aCompanion: /*p:bar p:foo*/A.Companion,
|
||||
aO: /*p:bar p:foo*/A.O,
|
||||
ab: /*p:bar p:bar.A(B) p:foo p:foo.A(B)*/A.B,
|
||||
ac: /*p:bar p:bar.A(C) p:foo p:foo.A(C)*/A.C,
|
||||
abCo: /*p:bar p:bar.A(B) p:bar.A.B(CO) p:foo p:foo.A(B) p:foo.A.B(CO)*/A.B.CO,
|
||||
aCompanion: /*p:bar p:bar.A(Companion) p:foo p:foo.A(Companion)*/A.Companion,
|
||||
aO: /*p:bar p:bar.A(O) p:foo p:foo.A(O)*/A.O,
|
||||
i: /*p:bar p:foo*/I,
|
||||
ni: /*p:bar p:foo*/I.NI,
|
||||
ni: /*p:bar p:bar.I(NI) p:foo p:foo.I(NI)*/I.NI,
|
||||
obj: /*p:bar p:foo*/Obj,
|
||||
e: /*p:bar p:foo*/E
|
||||
) {}
|
||||
|
||||
+12
-12
@@ -1,18 +1,18 @@
|
||||
package foo.bar
|
||||
|
||||
/*p:foo.bar*/fun testComparisons(a: /*p:foo.bar*/A, b: /*p:foo.bar*/Int, c: /*p:foo.bar*/Any, na: /*p:foo.bar*/A?) {
|
||||
a == c
|
||||
a != c
|
||||
na == a
|
||||
na == null
|
||||
/*p:foo.bar(A)*/a == c
|
||||
/*p:foo.bar(A)*/a != c
|
||||
/*p:foo.bar(A)*/na == /*p:foo.bar(A)*/a
|
||||
/*p:foo.bar(A)*/na == null
|
||||
|
||||
/*p:foo.bar.A(compareTo)*/a > b
|
||||
/*p:foo.bar.A(compareTo)*/a < b
|
||||
/*p:foo.bar.A(compareTo)*/a >= b
|
||||
/*p:foo.bar.A(compareTo)*/a <= b
|
||||
/*p:foo.bar(A) p:foo.bar.A(compareTo)*/a > b
|
||||
/*p:foo.bar(A) p:foo.bar.A(compareTo)*/a < b
|
||||
/*p:foo.bar(A) p:foo.bar.A(compareTo)*/a >= b
|
||||
/*p:foo.bar(A) p:foo.bar.A(compareTo)*/a <= b
|
||||
|
||||
/*p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a > c
|
||||
/*p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a < c
|
||||
/*p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a >= c
|
||||
/*p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a <= c
|
||||
/*p:foo.bar(A) p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a > c
|
||||
/*p:foo.bar(A) p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a < c
|
||||
/*p:foo.bar(A) p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a >= c
|
||||
/*p:foo.bar(A) p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a <= c
|
||||
}
|
||||
|
||||
+4
-4
@@ -3,16 +3,16 @@ package foo.bar
|
||||
/*p:kotlin.reflect(KProperty)*/import kotlin.reflect.KProperty
|
||||
|
||||
/*p:foo.bar*/class D1 {
|
||||
operator fun getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>) = 1
|
||||
operator fun getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>) = 1
|
||||
}
|
||||
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D1.setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>, v: /*p:foo.bar*/Int) {}
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D1.setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar*/Int) {}
|
||||
|
||||
/*p:foo.bar(D2)*/open class D2 {
|
||||
operator fun setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>, v: /*p:foo.bar*/Int) {}
|
||||
operator fun setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar*/Int) {}
|
||||
}
|
||||
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>) = 1
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>) = 1
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.provideDelegate(p: /*p:foo.bar*/Any?, k: /*p:foo.bar*/Any) = this
|
||||
|
||||
/*p:foo.bar*/class D3 : /*p:foo.bar*/D2() {
|
||||
|
||||
+10
-10
@@ -1,24 +1,24 @@
|
||||
package foo.bar
|
||||
|
||||
/*p:foo.bar*/fun testOperators(a: /*p:foo.bar*/A, b: /*p:foo.bar*/Int) {
|
||||
var d = a
|
||||
var d = /*p:foo.bar(A)*/a
|
||||
|
||||
d/*p:foo.bar(A) p:foo.bar.A(inc)*/++
|
||||
/*p:foo.bar(A) p:foo.bar.A(inc)*/++d
|
||||
d/*p:foo.bar(A) p:foo.bar(dec) p:foo.bar.A(dec)*/--
|
||||
/*p:foo.bar(A) p:foo.bar(dec) p:foo.bar.A(dec)*/--d
|
||||
/*p:foo.bar(A)*/d/*p:foo.bar(A) p:foo.bar.A(inc)*/++
|
||||
/*p:foo.bar(A) p:foo.bar.A(inc)*/++/*p:foo.bar(A)*/d
|
||||
/*p:foo.bar(A)*/d/*p:foo.bar(A) p:foo.bar(dec) p:foo.bar.A(dec)*/--
|
||||
/*p:foo.bar(A) p:foo.bar(dec) p:foo.bar.A(dec)*/--/*p:foo.bar(A)*/d
|
||||
|
||||
/*p:foo.bar(A) p:foo.bar.A(plus)*/a + b
|
||||
/*p:foo.bar(A) p:foo.bar(minus) p:foo.bar.A(minus)*/a - b
|
||||
/*p:foo.bar(not) p:foo.bar.A(not)*/!a
|
||||
/*p:foo.bar(not) p:foo.bar.A(not)*/!/*p:foo.bar(A)*/a
|
||||
|
||||
// for val
|
||||
/*p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/a *= b
|
||||
/*p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/a /= b
|
||||
/*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/a *= b
|
||||
/*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/a /= b
|
||||
|
||||
// for var
|
||||
/*p:foo.bar(A) p:foo.bar(plusAssign) p:foo.bar.A(plus) p:foo.bar.A(plusAssign)*/d += b
|
||||
/*p:foo.bar(A) p:foo.bar(minus) p:foo.bar(minusAssign) p:foo.bar.A(minus) p:foo.bar.A(minusAssign)*/d -= b
|
||||
/*p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/d *= b
|
||||
/*p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/d /= b
|
||||
/*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/d *= b
|
||||
/*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/d /= b
|
||||
}
|
||||
|
||||
+4
-4
@@ -1,15 +1,15 @@
|
||||
package foo.bar
|
||||
|
||||
/*p:foo.bar*/fun testOther(a: /*p:foo.bar*/A, b: /*p:foo.bar*/Int, c: /*p:foo.bar*/Any, na: /*p:foo.bar*/A?) {
|
||||
/*p:foo.bar(set) p:foo.bar.A(set)*/a[1] = /*p:foo.bar.A(get)*/a[2]
|
||||
/*p:foo.bar(A) p:foo.bar(set) p:foo.bar.A(set)*/a[1] = /*p:foo.bar(A) p:foo.bar.A(get)*/a[2]
|
||||
|
||||
/*p:foo.bar.A(contains)*/b in a
|
||||
/*p:foo.bar(contains) p:foo.bar.A(contains) p:kotlin.Boolean(not)*/"s" !in a
|
||||
/*p:foo.bar.A(contains)*/b in /*p:foo.bar(A)*/a
|
||||
/*p:foo.bar(contains) p:foo.bar.A(contains) p:kotlin.Boolean(not)*/"s" !in /*p:foo.bar(A)*/a
|
||||
|
||||
/*p:foo.bar(A) p:foo.bar.A(invoke)*/a()
|
||||
/*p:foo.bar p:foo.bar(A) p:foo.bar(invoke) p:foo.bar.A(invoke)*/a(1)
|
||||
|
||||
val (/*p:foo.bar(A) p:foo.bar.A(component1)*/h, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/t) = a;
|
||||
val (/*p:foo.bar(A) p:foo.bar.A(component1)*/h, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/t) = /*p:foo.bar(A)*/a;
|
||||
|
||||
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next)*/a);
|
||||
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar(iterator) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next)*/na);
|
||||
|
||||
+2
-2
@@ -2,9 +2,9 @@ package foo
|
||||
|
||||
// From KT-10772 Problem with daemon on Idea 15.0.3 & 1-dev-25
|
||||
|
||||
/*p:foo*/fun <T> identity(): (/*p:foo*/T) -> /*p:foo*/T = null as (/*p:foo*/T) -> /*p:foo*/T
|
||||
/*p:foo*/fun <T> identity(): /*p:kotlin(Function1)*/(/*p:foo*/T) -> /*p:foo*/T = null as /*p:kotlin(Function1)*/(/*p:foo*/T) -> /*p:foo*/T
|
||||
|
||||
/*p:foo*/fun <T> compute(f: () -> /*p:foo*/T) {
|
||||
/*p:foo*/fun <T> compute(f: /*p:kotlin(Function0)*/() -> /*p:foo*/T) {
|
||||
val result = /*p:kotlin(Function0) p:kotlin.Function0(invoke)*/f()
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ package foo
|
||||
/*p:foo*/fun getListOfA() = /*p:foo p:foo(A) p:kotlin.collections(List)*/listOf(/*p:foo*/A())
|
||||
/*p:foo*/fun getListOfB() = /*p:foo p:foo(B) p:kotlin.collections(List)*/listOf(/*p:foo*/B())
|
||||
|
||||
/*p:foo*/fun useListOfA(a: /*p:foo*/List</*p:foo*/A>) {}
|
||||
/*p:foo*/fun useListOfB(b: /*p:foo*/List</*p:foo*/B>) {}
|
||||
/*p:foo*/fun useListOfA(a: /*p:foo p:foo(A) p:kotlin.collections*/List</*p:foo*/A>) {}
|
||||
/*p:foo*/fun useListOfB(b: /*p:foo p:foo(B) p:kotlin.collections*/List</*p:foo*/B>) {}
|
||||
|
||||
/*p:foo*/fun testInferredType() {
|
||||
/*p:foo*/useListOfA(/*p:foo p:foo(A) p:kotlin.collections(List)*/getListOfA())
|
||||
|
||||
Vendored
+3
-3
@@ -2,10 +2,10 @@ package foo
|
||||
|
||||
/*p:foo*/class C
|
||||
|
||||
/*p:foo*/fun lambdaConsumer(fn: (/*p:foo*/A)->/*p:foo*/Unit) {}
|
||||
/*p:foo*/fun extensionConsumer(fn: /*p:foo*/A.()->/*p:foo*/Unit) {}
|
||||
/*p:foo*/fun lambdaConsumer(fn: /*p:foo(A) p:kotlin(Function1)*/(/*p:foo*/A)->/*p:foo*/Unit) {}
|
||||
/*p:foo*/fun extensionConsumer(fn: /*p:foo p:kotlin(Function1)*/A.()->/*p:foo*/Unit) {}
|
||||
|
||||
/*p:foo*/fun testLambdaParameterType() {
|
||||
/*p:foo*/lambdaConsumer /*p:foo(A) p:kotlin(Function1)*/{ it }
|
||||
/*p:foo*/lambdaConsumer /*p:foo(A) p:kotlin(Function1)*/{ /*p:foo(A)*/it }
|
||||
/*p:foo*/extensionConsumer /*p:foo(A) p:kotlin(Function1)*/{ this }
|
||||
}
|
||||
|
||||
+4
-4
@@ -4,14 +4,14 @@ import bar.*
|
||||
/*p:baz(C)*/import baz.C
|
||||
|
||||
/*p:foo*/val a = /*p:bar p:foo*/A()
|
||||
/*p:foo*/var b: /*p:bar p:foo*/baz.B = /*p:bar p:baz(B) p:foo*/baz.B()
|
||||
/*p:foo*/var b: /*p:bar p:bar.baz(B) p:baz(B) p:foo p:foo.baz(B)*/baz.B = /*p:bar p:baz(B) p:foo*/baz.B()
|
||||
|
||||
/*p:foo*/fun function(p: /*p:bar p:foo*/B): /*p:bar p:foo*/B {
|
||||
/*p:foo*/a
|
||||
/*p:bar(A) p:foo*/a
|
||||
return /*p:bar p:foo*/B()
|
||||
}
|
||||
|
||||
/*p:foo*/fun /*p:bar p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:bar p:foo*/Array</*p:bar p:foo*/B>, e: /*p:bar p:foo*/MyEnum, c: /**???*//*p:bar p:foo*/C): /*p:bar p:foo*/MyInterface {
|
||||
/*p:bar p:foo p:foo.MyClass*/b
|
||||
/*p:foo*/fun /*p:bar p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:bar p:bar(B) p:foo p:kotlin*/Array</*p:bar p:foo*/B>, e: /*p:bar p:foo*/MyEnum, c: /**???*//*p:bar p:baz p:foo*/C): /*p:bar p:foo*/MyInterface {
|
||||
/*p:bar p:baz(B) p:foo p:foo.MyClass*/b
|
||||
return /*p:bar p:foo p:foo.MyClass*/MyClass()
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package foo.bar
|
||||
|
||||
/*p:foo.bar*/fun main(args: /*p:foo.bar*/Array</*p:foo.bar*/String>) {
|
||||
val f: /*p:foo.bar*/Array</*p:foo.bar*/Int>
|
||||
/*p:foo.bar*/fun main(args: /*p:foo.bar p:kotlin*/Array</*p:foo.bar*/String>) {
|
||||
val f: /*p:foo.bar p:kotlin*/Array</*p:foo.bar*/Int>
|
||||
val s: /*p:foo.bar*/String
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ package foo
|
||||
/*p:bar(C)*/import bar.C
|
||||
/*p:bar(SAMInterface)*/import bar.SAMInterface
|
||||
|
||||
/*p:foo*/fun foo(c: /*p:foo*/C) {
|
||||
/*p:bar.C(foo) p:foo(foo)*/c.foo()
|
||||
/*p:bar(SAMInterface) p:bar.C(foo) p:bar.SAMInterface(<SAM-CONSTRUCTOR>)*/c.foo /*p:kotlin(Function1)*/{ }
|
||||
/*p:foo*/fun foo(c: /*p:bar p:foo*/C) {
|
||||
/*p:bar(C) p:bar.C(foo) p:foo(foo)*/c.foo()
|
||||
/*p:bar(C) p:bar(SAMInterface) p:bar.C(foo) p:bar.SAMInterface(<SAM-CONSTRUCTOR>)*/c.foo /*p:kotlin(Function1)*/{ }
|
||||
|
||||
/*p:bar.C(bar) p:foo p:foo(bar)*/C.bar()
|
||||
/*p:bar(SAMInterface) p:bar.C(bar) p:bar.SAMInterface(<SAM-CONSTRUCTOR>) p:foo*/C.bar /*p:kotlin(Function1)*/{}
|
||||
|
||||
+2
-2
@@ -2,6 +2,6 @@ package foo
|
||||
|
||||
import bar.*
|
||||
|
||||
/*p:foo*/fun <T : /*p:bar p:foo*/A?, B : /*p:bar p:foo*/Iterable</*p:bar p:foo*/Number>, C, D> test()
|
||||
where C : /*p:bar p:foo*/Number, C : /*p:bar p:foo*/Comparable</*p:bar p:foo*/Number>, D : /*p:bar p:foo*/B
|
||||
/*p:foo*/fun <T : /*p:bar p:foo*/A?, B : /*p:bar p:foo p:kotlin(Number) p:kotlin.collections*/Iterable</*p:bar p:foo p:kotlin*/Number>, C, D> test()
|
||||
where C : /*p:bar p:foo p:kotlin*/Number, C : /*p:bar p:foo p:kotlin p:kotlin(Number)*/Comparable</*p:bar p:foo p:kotlin*/Number>, D : /*p:bar p:foo*/B
|
||||
{}
|
||||
|
||||
+6
-6
@@ -6,10 +6,10 @@ import bar.*
|
||||
val a = 1
|
||||
var b = ""
|
||||
|
||||
val c: /*p:bar p:foo*/String
|
||||
val c: /*p:bar p:foo p:foo.A*/String
|
||||
get() = /*p:foo.A*/b
|
||||
|
||||
var d: /*p:bar p:foo*/String = "ddd"
|
||||
var d: /*p:bar p:foo p:foo.A*/String = "ddd"
|
||||
get() = field
|
||||
set(v) { field = v }
|
||||
|
||||
@@ -27,7 +27,7 @@ import bar.*
|
||||
val a = 1
|
||||
|
||||
companion object CO {
|
||||
fun bar(a: /*p:bar p:foo*/Int) {}
|
||||
fun bar(a: /*p:bar p:foo p:foo.A p:foo.A.B*/Int) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ import bar.*
|
||||
}
|
||||
|
||||
/*p:foo*/interface I {
|
||||
var a: /*p:bar p:foo*/Int
|
||||
var a: /*p:bar p:foo p:foo.I*/Int
|
||||
fun foo()
|
||||
|
||||
class NI
|
||||
@@ -64,8 +64,8 @@ import bar.*
|
||||
val a = 1
|
||||
fun foo() {
|
||||
/*p:foo.E*/a
|
||||
/*p:bar p:foo p:foo.E p:foo.E(a) p:kotlin.Enum p:kotlin.Enum.Companion*/Y.a
|
||||
/*p:bar p:foo p:foo(E) p:foo.E p:foo.E(a) p:kotlin(Enum) p:kotlin.Enum p:kotlin.Enum(Companion) p:kotlin.Enum.Companion*/Y.a
|
||||
/*p:foo.E*/foo()
|
||||
/*p:bar p:foo p:foo.E p:foo.E(foo) p:kotlin.Enum p:kotlin.Enum.Companion*/X.foo()
|
||||
/*p:bar p:foo p:foo(E) p:foo.E p:foo.E(foo) p:kotlin(Enum) p:kotlin.Enum p:kotlin.Enum(Companion) p:kotlin.Enum.Companion*/X.foo()
|
||||
}
|
||||
}
|
||||
|
||||
+27
-27
@@ -8,43 +8,43 @@ import bar.*
|
||||
/*p:foo p:foo.A(c)*/A().c
|
||||
/*p:foo p:foo.A(d)*/A().d = "new value"
|
||||
/*p:foo p:foo.A(foo)*/A().foo()
|
||||
/*p:foo p:foo.A.B(a)*/A.B().a
|
||||
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.bar(1)
|
||||
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.CO.bar(1)
|
||||
/*p:foo*/A
|
||||
/*p:foo p:foo.A(a) p:foo.A.Companion(a)*/A.a
|
||||
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
|
||||
/*p:foo*/A.Companion
|
||||
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.Companion.baz()
|
||||
/*p:foo*/A.O
|
||||
/*p:foo p:foo.A.O(v)*/A.O.v = "OK"
|
||||
/*p:bar p:foo p:foo.A(B) p:foo.A(Companion) p:foo.A.B(a)*/A.B().a
|
||||
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B(bar) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B.bar(1)
|
||||
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B./*p:foo.A.B*/CO.bar(1)
|
||||
/*p:foo p:foo.A(Companion)*/A
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(a) p:foo.A.Companion(a)*/A.a
|
||||
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
|
||||
/*p:bar p:foo p:foo.A(Companion)*/A./*p:foo.A*/Companion
|
||||
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A./*p:foo.A*/Companion.baz()
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O)*/A./*p:foo.A*/O
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O) p:foo.A.O(v)*/A./*p:foo.A*/O.v = "OK"
|
||||
|
||||
/*p:foo.I(a)*/i.a = 2
|
||||
/*p:foo p:foo.Obj(a)*/Obj.a
|
||||
/*p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
|
||||
/*p:foo(I) p:foo.I(a)*/i.a = 2
|
||||
/*p:bar p:foo p:foo.Obj(a)*/Obj.a
|
||||
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
|
||||
var ii: /*p:bar p:foo*/I = /*p:foo*/Obj
|
||||
/*p:foo.I(a)*/ii.a
|
||||
/*p:foo.I(foo)*/ii.foo()
|
||||
/*p:foo p:foo.Obj(b)*/Obj.b
|
||||
val iii = /*p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
|
||||
/*p:foo.I(foo)*/iii.foo()
|
||||
/*p:foo(I) p:foo.I(a)*/ii.a
|
||||
/*p:foo(I) p:foo.I(foo)*/ii.foo()
|
||||
/*p:bar p:foo p:foo.Obj(b)*/Obj.b
|
||||
val iii = /*p:bar p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
|
||||
/*p:foo(I) p:foo.I(foo)*/iii.foo()
|
||||
|
||||
/*p:bar p:foo p:foo.E(X)*/E.X
|
||||
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E.X.a
|
||||
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E.Y.foo()
|
||||
/*p:bar p:foo p:foo.E(X)*/E./*p:foo(E)*/X
|
||||
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E./*p:foo(E)*/X.a
|
||||
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E./*p:foo(E)*/Y.foo()
|
||||
/*p:bar p:foo p:foo.E(values) p:kotlin(Array)*/E.values()
|
||||
/*p:bar p:foo p:foo.E(valueOf)*/E.valueOf("")
|
||||
}
|
||||
|
||||
/*p:foo*/fun classifiers(
|
||||
a: /*p:bar p:foo*/A,
|
||||
ab: /*p:bar p:foo*/A.B,
|
||||
ac: /*p:bar p:foo*/A.C,
|
||||
abCo: /*p:bar p:foo*/A.B.CO,
|
||||
aCompanion: /*p:bar p:foo*/A.Companion,
|
||||
aO: /*p:bar p:foo*/A.O,
|
||||
ab: /*p:bar p:bar.A(B) p:foo p:foo.A(B)*/A.B,
|
||||
ac: /*p:bar p:bar.A(C) p:foo p:foo.A(C)*/A.C,
|
||||
abCo: /*p:bar p:bar.A(B) p:bar.A.B(CO) p:foo p:foo.A(B) p:foo.A.B(CO)*/A.B.CO,
|
||||
aCompanion: /*p:bar p:bar.A(Companion) p:foo p:foo.A(Companion)*/A.Companion,
|
||||
aO: /*p:bar p:bar.A(O) p:foo p:foo.A(O)*/A.O,
|
||||
i: /*p:bar p:foo*/I,
|
||||
ni: /*p:bar p:foo*/I.NI,
|
||||
ni: /*p:bar p:bar.I(NI) p:foo p:foo.I(NI)*/I.NI,
|
||||
obj: /*p:bar p:foo*/Obj,
|
||||
e: /*p:bar p:foo*/E
|
||||
) {}
|
||||
+29
-29
@@ -8,32 +8,32 @@ import bar.*
|
||||
/*p:foo p:foo.A(c)*/A().c
|
||||
/*p:foo p:foo.A(d)*/A().d = "new value"
|
||||
/*p:foo p:foo.A(foo)*/A().foo()
|
||||
/*p:foo p:foo.A.B(a)*/A.B().a
|
||||
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.bar(1)
|
||||
/*p:bar(bar) p:foo p:foo(bar) p:foo.A.B.CO(bar)*/A.B.CO.bar(1)
|
||||
/*p:foo*/A
|
||||
/*p:foo p:foo.A(a) p:foo.A.Companion(a)*/A.a
|
||||
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
|
||||
/*p:foo*/A.Companion
|
||||
/*p:bar(baz) p:foo p:foo(baz) p:foo.A(baz) p:foo.A.Companion(baz)*/A.Companion.baz()
|
||||
/*p:foo*/A.O
|
||||
/*p:foo p:foo.A.O(v)*/A.O.v = "OK"
|
||||
/*p:bar(vala) p:foo p:foo(vala) p:foo.A(vala) p:foo.A.Companion(vala)*/A.vala
|
||||
/*p:bar(vara) p:foo p:foo(vara) p:foo.A(vara) p:foo.A.Companion(vara)*/A.vara()
|
||||
/*p:bar p:foo p:foo.A(B) p:foo.A(Companion) p:foo.A.B(a)*/A.B().a
|
||||
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B(bar) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B.bar(1)
|
||||
/*p:bar p:bar(bar) p:foo p:foo(bar) p:foo.A(B) p:foo.A(Companion) p:foo.A.B(CO) p:foo.A.B.CO(bar)*/A./*p:foo.A.B(CO)*/B./*p:foo.A.B*/CO.bar(1)
|
||||
/*p:foo p:foo.A(Companion)*/A
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(a) p:foo.A.Companion(a)*/A.a
|
||||
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A.baz()
|
||||
/*p:bar p:foo p:foo.A(Companion)*/A./*p:foo.A*/Companion
|
||||
/*p:bar p:bar(baz) p:foo p:foo(baz) p:foo.A(Companion) p:foo.A(baz) p:foo.A.Companion(baz)*/A./*p:foo.A*/Companion.baz()
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O)*/A./*p:foo.A*/O
|
||||
/*p:bar p:foo p:foo.A(Companion) p:foo.A(O) p:foo.A.O(v)*/A./*p:foo.A*/O.v = "OK"
|
||||
/*p:bar p:bar(vala) p:foo p:foo(vala) p:foo.A(Companion) p:foo.A(vala) p:foo.A.Companion(vala)*/A.vala
|
||||
/*p:bar p:bar(vara) p:foo p:foo(vara) p:foo.A(Companion) p:foo.A(vara) p:foo.A.Companion(vara)*/A.vara()
|
||||
|
||||
/*p:foo.I(a)*/i.a = 2
|
||||
/*p:foo p:foo.Obj(a)*/Obj.a
|
||||
/*p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
|
||||
/*p:foo(I) p:foo.I(a)*/i.a = 2
|
||||
/*p:bar p:foo p:foo.Obj(a)*/Obj.a
|
||||
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.Obj(foo)*/Obj.foo()
|
||||
var ii: /*p:bar p:foo*/I = /*p:foo*/Obj
|
||||
/*p:foo.I(a)*/ii.a
|
||||
/*p:foo.I(foo)*/ii.foo()
|
||||
/*p:foo p:foo.Obj(b)*/Obj.b
|
||||
val iii = /*p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
|
||||
/*p:foo.I(foo)*/iii.foo()
|
||||
/*p:foo(I) p:foo.I(a)*/ii.a
|
||||
/*p:foo(I) p:foo.I(foo)*/ii.foo()
|
||||
/*p:bar p:foo p:foo.Obj(b)*/Obj.b
|
||||
val iii = /*p:bar p:bar(bar) p:foo p:foo(I) p:foo(bar) p:foo.Obj(bar)*/Obj.bar()
|
||||
/*p:foo(I) p:foo.I(foo)*/iii.foo()
|
||||
|
||||
/*p:bar p:foo p:foo.E(X)*/E.X
|
||||
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E.X.a
|
||||
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E.Y.foo()
|
||||
/*p:bar p:foo p:foo.E(X)*/E./*p:foo(E)*/X
|
||||
/*p:bar p:foo p:foo.E(X) p:foo.E(a)*/E./*p:foo(E)*/X.a
|
||||
/*p:bar p:foo p:foo.E(Y) p:foo.E(foo)*/E./*p:foo(E)*/Y.foo()
|
||||
/*p:bar p:foo p:foo.E(values) p:kotlin(Array)*/E.values()
|
||||
/*p:bar p:foo p:foo.E(valueOf)*/E.valueOf("")
|
||||
/*p:bar p:bar(foo) p:foo p:foo(foo) p:foo.E(foo)*/E.foo
|
||||
@@ -42,13 +42,13 @@ import bar.*
|
||||
|
||||
/*p:foo*/fun classifiers(
|
||||
a: /*p:bar p:foo*/A,
|
||||
ab: /*p:bar p:foo*/A.B,
|
||||
ac: /*p:bar p:foo*/A.C,
|
||||
abCo: /*p:bar p:foo*/A.B.CO,
|
||||
aCompanion: /*p:bar p:foo*/A.Companion,
|
||||
aO: /*p:bar p:foo*/A.O,
|
||||
ab: /*p:bar p:bar.A(B) p:foo p:foo.A(B)*/A.B,
|
||||
ac: /*p:bar p:bar.A(C) p:foo p:foo.A(C)*/A.C,
|
||||
abCo: /*p:bar p:bar.A(B) p:bar.A.B(CO) p:foo p:foo.A(B) p:foo.A.B(CO)*/A.B.CO,
|
||||
aCompanion: /*p:bar p:bar.A(Companion) p:foo p:foo.A(Companion)*/A.Companion,
|
||||
aO: /*p:bar p:bar.A(O) p:foo p:foo.A(O)*/A.O,
|
||||
i: /*p:bar p:foo*/I,
|
||||
ni: /*p:bar p:foo*/I.NI,
|
||||
ni: /*p:bar p:bar.I(NI) p:foo p:foo.I(NI)*/I.NI,
|
||||
obj: /*p:bar p:foo*/Obj,
|
||||
e: /*p:bar p:foo*/E
|
||||
) {}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/*p:<root>*/class MainClass {
|
||||
companion object {
|
||||
fun f() {
|
||||
|
||||
}
|
||||
|
||||
class T
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/*p:<root>*/fun Explicit() /*p:MainClass(Companion)*/{
|
||||
/*p:<root> p:MainClass(Companion)*/MainClass./*p:MainClass p:MainClass.Companion*/Companion
|
||||
}
|
||||
|
||||
/*p:<root>*/fun ExplicitMethod() {
|
||||
/*p:<root>*/MainClass./*p:MainClass*/Companion./*p:MainClass.Companion*/f()
|
||||
}
|
||||
|
||||
/*p:<root>*/fun Implicit() /*p:MainClass(Companion)*/{
|
||||
/*p:<root> p:MainClass(Companion)*/MainClass
|
||||
}
|
||||
|
||||
/*p:<root>*/fun ImplicitMethod() {
|
||||
/*p:<root>*/MainClass./*p:MainClass p:MainClass.Companion*/f()
|
||||
}
|
||||
|
||||
/*p:<root>*/fun InstanceExplicit() {
|
||||
val t = /*p:<root> p:MainClass(Companion)*/MainClass./*p:MainClass p:MainClass.Companion*/Companion
|
||||
}
|
||||
|
||||
/*p:<root>*/fun Type(t: /*p:<root>*/MainClass./*p:MainClass*/Companion) {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/*p:<root>*/fun Explicit() {
|
||||
/*p:<root> p:MainClass(Companion)*/MainClass./*p:MainClass*/Companion
|
||||
}
|
||||
|
||||
/*p:<root>*/fun ExplicitMethod() {
|
||||
/*p:<root> p:<root>(f) p:MainClass(Companion) p:MainClass(f) p:MainClass.Companion(f)*/MainClass./*p:MainClass*/Companion.f()
|
||||
}
|
||||
|
||||
/*p:<root>*/fun Implicit() {
|
||||
/*p:<root> p:MainClass(Companion)*/MainClass
|
||||
}
|
||||
|
||||
/*p:<root>*/fun ImplicitMethod() {
|
||||
/*p:<root> p:<root>(f) p:MainClass(Companion) p:MainClass(f) p:MainClass.Companion(f)*/MainClass.f()
|
||||
}
|
||||
|
||||
/*p:<root>*/fun InstanceExplicit() {
|
||||
val t = /*p:<root> p:MainClass(Companion)*/MainClass./*p:MainClass*/Companion
|
||||
}
|
||||
|
||||
/*p:<root>*/fun Type(t: /*p:<root> p:MainClass(Companion)*/MainClass.Companion) {
|
||||
|
||||
}
|
||||
+12
-12
@@ -1,18 +1,18 @@
|
||||
package foo.bar
|
||||
|
||||
/*p:foo.bar*/fun testComparisons(a: /*p:foo.bar*/A, b: /*p:foo.bar*/Int, c: /*p:foo.bar*/Any, na: /*p:foo.bar*/A?) {
|
||||
a == c
|
||||
a != c
|
||||
na == a
|
||||
na == null
|
||||
/*p:foo.bar(A)*/a == c
|
||||
/*p:foo.bar(A)*/a != c
|
||||
/*p:foo.bar(A)*/na == /*p:foo.bar(A)*/a
|
||||
/*p:foo.bar(A)*/na == null
|
||||
|
||||
/*p:foo.bar.A(compareTo)*/a > b
|
||||
/*p:foo.bar.A(compareTo)*/a < b
|
||||
/*p:foo.bar.A(compareTo)*/a >= b
|
||||
/*p:foo.bar.A(compareTo)*/a <= b
|
||||
/*p:foo.bar(A) p:foo.bar.A(compareTo)*/a > b
|
||||
/*p:foo.bar(A) p:foo.bar.A(compareTo)*/a < b
|
||||
/*p:foo.bar(A) p:foo.bar.A(compareTo)*/a >= b
|
||||
/*p:foo.bar(A) p:foo.bar.A(compareTo)*/a <= b
|
||||
|
||||
/*p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a > c
|
||||
/*p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a < c
|
||||
/*p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a >= c
|
||||
/*p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a <= c
|
||||
/*p:foo.bar(A) p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a > c
|
||||
/*p:foo.bar(A) p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a < c
|
||||
/*p:foo.bar(A) p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a >= c
|
||||
/*p:foo.bar(A) p:foo.bar(compareTo) p:foo.bar.A(compareTo)*/a <= c
|
||||
}
|
||||
|
||||
+4
-4
@@ -3,16 +3,16 @@ package foo.bar
|
||||
/*p:kotlin.reflect(KProperty)*/import kotlin.reflect.KProperty
|
||||
|
||||
/*p:foo.bar*/class D1 {
|
||||
operator fun getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>) = 1
|
||||
operator fun getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>) = 1
|
||||
}
|
||||
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D1.setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>, v: /*p:foo.bar*/Int) {}
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D1.setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar*/Int) {}
|
||||
|
||||
/*p:foo.bar(D2)*/open class D2 {
|
||||
operator fun setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>, v: /*p:foo.bar*/Int) {}
|
||||
operator fun setValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar*/Int) {}
|
||||
}
|
||||
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar*/KProperty<*>) = 1
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.getValue(t: /*p:foo.bar*/Any?, p: /*p:foo.bar p:kotlin.reflect*/KProperty<*>) = 1
|
||||
/*p:foo.bar*/operator fun /*p:foo.bar*/D2.provideDelegate(p: /*p:foo.bar*/Any?, k: /*p:foo.bar*/Any) = this
|
||||
|
||||
/*p:foo.bar*/class D3 : /*p:foo.bar*/D2() {
|
||||
|
||||
+10
-10
@@ -1,24 +1,24 @@
|
||||
package foo.bar
|
||||
|
||||
/*p:foo.bar*/fun testOperators(a: /*p:foo.bar*/A, b: /*p:foo.bar*/Int) {
|
||||
var d = a
|
||||
var d = /*p:foo.bar(A)*/a
|
||||
|
||||
d/*p:foo.bar(A) p:foo.bar.A(inc)*/++
|
||||
/*p:foo.bar(A) p:foo.bar.A(inc)*/++d
|
||||
d/*p:foo.bar(A) p:foo.bar(dec) p:foo.bar.A(dec)*/--
|
||||
/*p:foo.bar(A) p:foo.bar(dec) p:foo.bar.A(dec)*/--d
|
||||
/*p:foo.bar(A)*/d/*p:foo.bar(A) p:foo.bar.A(inc)*/++
|
||||
/*p:foo.bar(A) p:foo.bar.A(inc)*/++/*p:foo.bar(A)*/d
|
||||
/*p:foo.bar(A)*/d/*p:foo.bar(A) p:foo.bar(dec) p:foo.bar.A(dec)*/--
|
||||
/*p:foo.bar(A) p:foo.bar(dec) p:foo.bar.A(dec)*/--/*p:foo.bar(A)*/d
|
||||
|
||||
/*p:foo.bar(A) p:foo.bar.A(plus)*/a + b
|
||||
/*p:foo.bar(A) p:foo.bar(minus) p:foo.bar.A(minus)*/a - b
|
||||
/*p:foo.bar(not) p:foo.bar.A(not)*/!a
|
||||
/*p:foo.bar(not) p:foo.bar.A(not)*/!/*p:foo.bar(A)*/a
|
||||
|
||||
// for val
|
||||
/*p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/a *= b
|
||||
/*p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/a /= b
|
||||
/*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/a *= b
|
||||
/*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/a /= b
|
||||
|
||||
// for var
|
||||
/*p:foo.bar(A) p:foo.bar(plusAssign) p:foo.bar.A(plus) p:foo.bar.A(plusAssign)*/d += b
|
||||
/*p:foo.bar(A) p:foo.bar(minus) p:foo.bar(minusAssign) p:foo.bar.A(minus) p:foo.bar.A(minusAssign)*/d -= b
|
||||
/*p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/d *= b
|
||||
/*p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/d /= b
|
||||
/*p:foo.bar(A) p:foo.bar(times) p:foo.bar.A(times) p:foo.bar.A(timesAssign)*/d *= b
|
||||
/*p:foo.bar(A) p:foo.bar(div) p:foo.bar(divAssign) p:foo.bar.A(div) p:foo.bar.A(divAssign)*/d /= b
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package foo.bar
|
||||
|
||||
/*p:foo.bar*/fun testOther(a: /*p:foo.bar*/A, b: /*p:foo.bar*/Int, c: /*p:foo.bar*/Any, na: /*p:foo.bar*/A?) {
|
||||
/*p:foo.bar(set) p:foo.bar.A(set)*/a[1] = /*p:foo.bar.A(get)*/a[2]
|
||||
/*p:foo.bar(A) p:foo.bar(set) p:foo.bar.A(set)*/a[1] = /*p:foo.bar(A) p:foo.bar.A(get)*/a[2]
|
||||
|
||||
/*p:foo.bar.A(contains)*/b in a
|
||||
/*p:foo.bar(contains) p:foo.bar.A(contains) p:kotlin.Boolean(not)*/"s" !in a
|
||||
/*p:foo.bar.A(contains)*/b in /*p:foo.bar(A)*/a
|
||||
/*p:foo.bar(contains) p:foo.bar.A(contains) p:kotlin.Boolean(not)*/"s" !in /*p:foo.bar(A)*/a
|
||||
|
||||
/*p:foo.bar(A) p:foo.bar.A(invoke)*/a()
|
||||
/*p:foo.bar p:foo.bar(A) p:foo.bar(invoke) p:foo.bar.A(invoke)*/a(1)
|
||||
|
||||
val (/*p:foo.bar(A) p:foo.bar.A(component1)*/h, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/t) = a;
|
||||
val (/*p:foo.bar(A) p:foo.bar.A(component1)*/h, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/t) = /*p:foo.bar(A)*/a;
|
||||
|
||||
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next)*/a);
|
||||
for ((/*p:foo.bar(A) p:foo.bar.A(component1)*/f, /*p:foo.bar(A) p:foo.bar(component2) p:foo.bar.A(component2)*/s) in /*p:foo.bar(A) p:foo.bar(hasNext) p:foo.bar(iterator) p:foo.bar.A(hasNext) p:foo.bar.A(iterator) p:foo.bar.A(next)*/na);
|
||||
|
||||
+2
-2
@@ -2,9 +2,9 @@ package foo
|
||||
|
||||
// From KT-10772 Problem with daemon on Idea 15.0.3 & 1-dev-25
|
||||
|
||||
/*p:foo*/fun <T> identity(): (/*p:foo*/T) -> /*p:foo*/T = null as (/*p:foo*/T) -> /*p:foo*/T
|
||||
/*p:foo*/fun <T> identity(): /*p:kotlin(Function1)*/(/*p:foo*/T) -> /*p:foo*/T = null as /*p:kotlin(Function1)*/(/*p:foo*/T) -> /*p:foo*/T
|
||||
|
||||
/*p:foo*/fun <T> compute(f: () -> /*p:foo*/T) {
|
||||
/*p:foo*/fun <T> compute(f: /*p:kotlin(Function0)*/() -> /*p:foo*/T) {
|
||||
val result = /*p:kotlin(Function0) p:kotlin.Function0(invoke)*/f()
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ package foo
|
||||
/*p:foo*/fun getListOfA() = /*p:foo p:foo(A) p:kotlin.collections(List)*/listOf(/*p:foo*/A())
|
||||
/*p:foo*/fun getListOfB() = /*p:foo p:foo(B) p:kotlin.collections(List)*/listOf(/*p:foo*/B())
|
||||
|
||||
/*p:foo*/fun useListOfA(a: /*p:foo*/List</*p:foo*/A>) {}
|
||||
/*p:foo*/fun useListOfB(b: /*p:foo*/List</*p:foo*/B>) {}
|
||||
/*p:foo*/fun useListOfA(a: /*p:foo p:foo(A) p:kotlin.collections*/List</*p:foo*/A>) {}
|
||||
/*p:foo*/fun useListOfB(b: /*p:foo p:foo(B) p:kotlin.collections*/List</*p:foo*/B>) {}
|
||||
|
||||
/*p:foo*/fun testInferredType() {
|
||||
/*p:foo*/useListOfA(/*p:foo p:foo(A) p:kotlin.collections(List)*/getListOfA())
|
||||
|
||||
Vendored
+3
-3
@@ -2,10 +2,10 @@ package foo
|
||||
|
||||
/*p:foo*/class C
|
||||
|
||||
/*p:foo*/fun lambdaConsumer(fn: (/*p:foo*/A)->/*p:foo*/Unit) {}
|
||||
/*p:foo*/fun extensionConsumer(fn: /*p:foo*/A.()->/*p:foo*/Unit) {}
|
||||
/*p:foo*/fun lambdaConsumer(fn: /*p:foo(A) p:kotlin(Function1)*/(/*p:foo*/A)->/*p:foo*/Unit) {}
|
||||
/*p:foo*/fun extensionConsumer(fn: /*p:foo p:kotlin(Function1)*/A.()->/*p:foo*/Unit) {}
|
||||
|
||||
/*p:foo*/fun testLambdaParameterType() {
|
||||
/*p:foo*/lambdaConsumer /*p:foo(A) p:kotlin(Function1)*/{ it }
|
||||
/*p:foo*/lambdaConsumer /*p:foo(A) p:kotlin(Function1)*/{ /*p:foo(A)*/it }
|
||||
/*p:foo*/extensionConsumer /*p:foo(A) p:kotlin(Function1)*/{ this }
|
||||
}
|
||||
|
||||
@@ -6,40 +6,40 @@ import baz.*
|
||||
/*p:foo*/fun usages() {
|
||||
val c = /*p:bar*/C()
|
||||
|
||||
/*p:bar.C(field)*/c.field
|
||||
/*p:bar.C(field)*/c.field = 2
|
||||
/*p:bar.C(func)*/c.func()
|
||||
/*p:bar(C.B) p:bar.C(B)*/c.B()
|
||||
/*p:bar(C) p:bar.C(field)*/c.field
|
||||
/*p:bar(C) p:bar.C(field)*/c.field = 2
|
||||
/*p:bar(C) p:bar.C(func)*/c.func()
|
||||
/*p:bar(C) p:bar.C(B)*/c.B()
|
||||
|
||||
/*p:bar.C(sfield) p:baz p:foo*/C.sfield
|
||||
/*p:bar.C(sfield) p:baz p:foo*/C.sfield = "new"
|
||||
/*p:bar.C(sfunc) p:baz p:foo*/C.sfunc()
|
||||
/*p:bar p:bar.C(S) p:baz p:foo*/C.S()
|
||||
/*p:bar.C(S) p:baz p:foo*/C.S()
|
||||
|
||||
// inherited from I
|
||||
/*p:bar.C(ifunc)*/c.ifunc()
|
||||
/*p:bar(C) p:bar.C(ifunc)*/c.ifunc()
|
||||
/*p:bar.C(isfield) p:baz p:foo*/C.isfield
|
||||
// expected error: Unresolved reference: IS
|
||||
/*p:bar.C(IS) p:baz p:baz(IS) p:foo p:foo(IS)*/C.IS()
|
||||
|
||||
|
||||
val i: /*p:baz p:foo*/I = c
|
||||
/*p:foo.I(ifunc)*/i.ifunc()
|
||||
val i: /*p:baz p:foo*/I = /*p:bar(C)*/c
|
||||
/*p:foo(I) p:foo.I(ifunc)*/i.ifunc()
|
||||
|
||||
/*p:baz p:foo p:foo.I(isfield)*/I.isfield
|
||||
/*p:baz p:foo p:foo.I(IS)*/I.IS()
|
||||
|
||||
/*p:baz p:baz.E(F) p:foo*/E.F
|
||||
/*p:baz p:baz.E(F) p:baz.E(field) p:foo*/E.F.field
|
||||
/*p:baz p:baz.E(S) p:baz.E(func) p:foo*/E.S.func()
|
||||
/*p:baz p:baz.E(F) p:foo*/E./*p:baz(E)*/F
|
||||
/*p:baz p:baz.E(F) p:baz.E(field) p:foo*/E./*p:baz(E)*/F.field
|
||||
/*p:baz p:baz.E(S) p:baz.E(func) p:foo*/E./*p:baz(E)*/S.func()
|
||||
}
|
||||
|
||||
fun classifiers(
|
||||
c: /*p:baz p:foo*/C,
|
||||
b: /*p:baz p:foo*/C.B,
|
||||
s: /*p:baz p:foo*/C.S,
|
||||
cis: /*p:baz p:foo*/C.IS,
|
||||
c: /*p:bar p:baz p:foo*/C,
|
||||
b: /*p:bar.C(B) p:baz p:baz.C(B) p:foo p:foo.C(B)*/C.B,
|
||||
s: /*p:bar.C(S) p:baz p:baz.C(S) p:foo p:foo.C(S)*/C.S,
|
||||
cis: /*p:bar p:baz p:baz.C(IS) p:foo p:foo.C(IS)*/C.IS,
|
||||
i: /*p:baz p:foo*/I,
|
||||
iis: /*p:baz p:foo*/I.IS,
|
||||
iis: /*p:baz p:baz.I(IS) p:foo p:foo.I(IS)*/I.IS,
|
||||
e: /*p:baz p:foo*/E
|
||||
) {}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package foo
|
||||
|
||||
/*p:foo(A)*/open class A {
|
||||
/*p:kotlin.jvm(JvmName)*/@/*p:foo*/JvmName("g")
|
||||
/*p:kotlin.jvm(JvmName)*/@/*p:foo p:kotlin.jvm*/JvmName("g")
|
||||
fun f() {}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package foo
|
||||
|
||||
/*p:foo(A)*/open class A {
|
||||
/*p:kotlin.jvm(JvmName)*/@/*p:foo*/JvmName("h")
|
||||
/*p:kotlin.jvm(JvmName)*/@/*p:foo p:kotlin.jvm*/JvmName("h")
|
||||
fun f() {}
|
||||
}
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
package foo
|
||||
|
||||
/*p:foo*/fun useAChild(a: /*p:foo*/AChild) {
|
||||
/*p:foo.A(f) p:foo.AChild(f)*/a.f()
|
||||
/*p:foo(AChild) p:foo.A(f) p:foo.AChild(f)*/a.f()
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
/*p:<root>*/class MainClass {
|
||||
companion object Name {
|
||||
fun f() {
|
||||
|
||||
}
|
||||
|
||||
class T
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
/*p:<root>*/fun Explicit() /*p:MainClass(Name)*/{
|
||||
/*p:<root> p:MainClass(Name)*/MainClass./*p:MainClass p:MainClass.Name*/Name
|
||||
}
|
||||
|
||||
/*p:<root>*/fun ExplicitMethod() {
|
||||
/*p:<root>*/MainClass./*p:MainClass*/Name./*p:MainClass.Name*/f()
|
||||
}
|
||||
|
||||
/*p:<root>*/fun Implicit() /*p:MainClass(Name)*/{
|
||||
/*p:<root> p:MainClass(Name)*/MainClass
|
||||
}
|
||||
|
||||
/*p:<root>*/fun ImplicitMethod() {
|
||||
/*p:<root>*/MainClass./*p:MainClass p:MainClass.Name*/f()
|
||||
}
|
||||
|
||||
/*p:<root>*/fun InstanceExplicit() {
|
||||
val t = /*p:<root> p:MainClass(Name)*/MainClass./*p:MainClass p:MainClass.Name*/Name
|
||||
}
|
||||
|
||||
/*p:<root>*/fun Type(t: /*p:<root>*/MainClass./*p:MainClass*/Name) {
|
||||
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
/*p:<root>*/fun Explicit() {
|
||||
/*p:<root> p:MainClass(Name)*/MainClass./*p:MainClass*/Name
|
||||
}
|
||||
|
||||
/*p:<root>*/fun ExplicitMethod() {
|
||||
/*p:<root> p:<root>(f) p:MainClass(Name) p:MainClass.Name(f)*/MainClass./*p:MainClass*/Name.f()
|
||||
}
|
||||
|
||||
/*p:<root>*/fun Implicit() {
|
||||
/*p:<root> p:MainClass(Name)*/MainClass
|
||||
}
|
||||
|
||||
/*p:<root>*/fun ImplicitMethod() {
|
||||
/*p:<root> p:<root>(f) p:MainClass(Name) p:MainClass(f) p:MainClass.Name(f)*/MainClass.f()
|
||||
}
|
||||
|
||||
/*p:<root>*/fun InstanceExplicit() {
|
||||
val t = /*p:<root> p:MainClass(Name)*/MainClass./*p:MainClass*/Name
|
||||
}
|
||||
|
||||
/*p:<root>*/fun Type(t: /*p:<root> p:MainClass(Name)*/MainClass.Name) {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
/*p:<root>*/class MainClass {
|
||||
class NestedClass {
|
||||
object A {
|
||||
class B {
|
||||
object F {
|
||||
val x = 42
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
==== INITIAL BUILD ====
|
||||
Compiling files:
|
||||
src/MainClass.kt
|
||||
src/usage.kt
|
||||
Exit code: OK
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
/*p:<root>*/fun usageAsCall(): /*p:<root>*/Int /*p:kotlin(Nothing)*/{
|
||||
val f = /*p:<root> p:MainClass.NestedClass.A.B(F) p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/MainClass./*p:MainClass*/NestedClass./*p:MainClass.NestedClass*/A./*p:MainClass.NestedClass.A*/B./*p:MainClass.NestedClass.A.B*/F
|
||||
/*p:kotlin(Nothing)*/return /*p:<root> p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/MainClass./*p:MainClass*/NestedClass./*p:MainClass.NestedClass*/A./*p:MainClass.NestedClass.A*/B./*p:MainClass.NestedClass.A.B*/F./*p:MainClass.NestedClass.A.B.F*/x
|
||||
}
|
||||
|
||||
/*p:<root>*/fun usageAsType(f: /*p:<root>*/MainClass./*p:MainClass*/NestedClass./*p:MainClass.NestedClass*/A./*p:MainClass.NestedClass.A*/B./*p:MainClass.NestedClass.A.B*/F) {}
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
/*p:<root>*/fun usageAsCall(): /*p:<root>*/Int {
|
||||
val f = /*p:<root> p:MainClass(NestedClass) p:MainClass.NestedClass(A) p:MainClass.NestedClass.A(B) p:MainClass.NestedClass.A.B(F)*/MainClass.NestedClass./*p:MainClass.NestedClass*/A.B./*p:MainClass.NestedClass.A.B*/F
|
||||
return /*p:<root> p:MainClass(NestedClass) p:MainClass.NestedClass(A) p:MainClass.NestedClass.A(B) p:MainClass.NestedClass.A.B(F) p:MainClass.NestedClass.A.B.F(x)*/MainClass.NestedClass./*p:MainClass.NestedClass*/A.B./*p:MainClass.NestedClass.A.B*/F.x
|
||||
}
|
||||
|
||||
/*p:<root>*/fun usageAsType(f: /*p:<root> p:MainClass(NestedClass) p:MainClass.NestedClass(A) p:MainClass.NestedClass.A(B) p:MainClass.NestedClass.A.B(F)*/MainClass.NestedClass.A.B.F) = /*p:MainClass.NestedClass.A.B(F)*/f
|
||||
+4
-4
@@ -4,14 +4,14 @@ import bar.*
|
||||
/*p:baz(C)*/import baz.C
|
||||
|
||||
/*p:foo*/val a = /*p:bar p:foo*/A()
|
||||
/*p:foo*/var b: /*p:bar p:foo*/baz.B = /*p:bar p:baz(B) p:foo*/baz.B()
|
||||
/*p:foo*/var b: /*p:bar p:bar.baz(B) p:baz(B) p:foo p:foo.baz(B)*/baz.B = /*p:bar p:baz(B) p:foo*/baz.B()
|
||||
|
||||
/*p:foo*/fun function(p: /*p:bar p:foo*/B): /*p:bar p:foo*/B {
|
||||
/*p:foo*/a
|
||||
/*p:bar(A) p:foo*/a
|
||||
return /*p:bar p:foo*/B()
|
||||
}
|
||||
|
||||
/*p:foo*/fun /*p:bar p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:bar p:foo*/Array</*p:bar p:foo*/B>, e: /*p:bar p:foo*/MyEnum, c: /*p:bar p:foo*/C): /*p:bar p:foo*/MyInterface {
|
||||
/*p:bar p:foo p:foo.MyClass*/b
|
||||
/*p:foo*/fun /*p:bar p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:bar p:bar(B) p:foo p:kotlin*/Array</*p:bar p:foo*/B>, e: /*p:bar p:foo*/MyEnum, c: /*p:bar p:baz p:foo*/C): /*p:bar p:foo*/MyInterface {
|
||||
/*p:bar p:baz(B) p:foo p:foo.MyClass*/b
|
||||
return /*p:bar p:foo p:foo.MyClass*/MyClass()
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package foo.bar
|
||||
|
||||
/*p:foo.bar*/fun main(args: /*p:foo.bar*/Array</*p:foo.bar*/String>) {
|
||||
val f: /*p:foo.bar*/Array</*p:foo.bar*/Int>
|
||||
/*p:foo.bar*/fun main(args: /*p:foo.bar p:kotlin*/Array</*p:foo.bar*/String>) {
|
||||
val f: /*p:foo.bar p:kotlin*/Array</*p:foo.bar*/Int>
|
||||
val s: /*p:foo.bar*/String
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ package foo
|
||||
|
||||
/*p:<root>(JavaClass)*/import JavaClass
|
||||
|
||||
/*p:foo*/class KotlinClass : /*p:foo*/JavaClass() {
|
||||
/*p:foo*/class KotlinClass : /*p:<root> p:foo*/JavaClass() {
|
||||
override fun getFoo() = 2
|
||||
fun setFoo(i: /*p:foo*/Int) {}
|
||||
}
|
||||
|
||||
+20
-20
@@ -7,24 +7,24 @@ package foo.bar
|
||||
val j = /*p:<root>*/JavaClass()
|
||||
val k = /*p:foo*/KotlinClass()
|
||||
|
||||
/*p:JavaClass(getFoo)*/j.getFoo()
|
||||
/*p:JavaClass(setFoo) p:foo.bar(setFoo)*/j.setFoo(2)
|
||||
/*p:JavaClass(foo)*/j.foo = 2
|
||||
/*p:JavaClass(foo)*/j.foo
|
||||
/*p:JavaClass(bar)*/j.bar
|
||||
/*p:JavaClass(bar)*/j.bar = ""
|
||||
/*p:JavaClass(bazBaz)*/j.bazBaz
|
||||
/*p:JavaClass(bazBaz)*/j.bazBaz = ""
|
||||
/*p:JavaClass(setBoo)*/j.setBoo(2)
|
||||
/*p:JavaClass(boo) p:foo.bar(boo)*/j.boo = 2
|
||||
/*p:foo.KotlinClass(getFoo)*/k.getFoo() // getFoo may be an inner class in JavaClass
|
||||
/*p:foo.KotlinClass(setFoo)*/k.setFoo(2)
|
||||
/*p:foo.KotlinClass(foo)*/k.foo = 2
|
||||
/*p:foo.KotlinClass(foo)*/k.foo
|
||||
/*p:JavaClass(bar) p:foo.KotlinClass(bar)*/k.bar
|
||||
/*p:JavaClass(bar) p:foo.KotlinClass(bar)*/k.bar = ""
|
||||
/*p:JavaClass(bazBaz) p:foo.KotlinClass(bazBaz)*/k.bazBaz
|
||||
/*p:JavaClass(bazBaz) p:foo.KotlinClass(bazBaz)*/k.bazBaz = ""
|
||||
/*p:JavaClass(setBoo) p:foo.KotlinClass(setBoo)*/k.setBoo(2)
|
||||
/*p:foo.KotlinClass(boo) p:foo.bar(boo)*/k.boo = 2
|
||||
/*p:<root>(JavaClass) p:JavaClass(getFoo)*/j.getFoo()
|
||||
/*p:<root>(JavaClass) p:JavaClass(setFoo) p:foo.bar(setFoo)*/j.setFoo(2)
|
||||
/*p:<root>(JavaClass) p:JavaClass(foo)*/j.foo = 2
|
||||
/*p:<root>(JavaClass) p:JavaClass(foo)*/j.foo
|
||||
/*p:<root>(JavaClass) p:JavaClass(bar)*/j.bar
|
||||
/*p:<root>(JavaClass) p:JavaClass(bar)*/j.bar = ""
|
||||
/*p:<root>(JavaClass) p:JavaClass(bazBaz)*/j.bazBaz
|
||||
/*p:<root>(JavaClass) p:JavaClass(bazBaz)*/j.bazBaz = ""
|
||||
/*p:<root>(JavaClass) p:JavaClass(setBoo)*/j.setBoo(2)
|
||||
/*p:<root>(JavaClass) p:JavaClass(boo) p:foo.bar(boo)*/j.boo = 2
|
||||
/*p:foo(KotlinClass) p:foo.KotlinClass(getFoo)*/k.getFoo() // getFoo may be an inner class in JavaClass
|
||||
/*p:foo(KotlinClass) p:foo.KotlinClass(setFoo)*/k.setFoo(2)
|
||||
/*p:foo(KotlinClass) p:foo.KotlinClass(foo)*/k.foo = 2
|
||||
/*p:foo(KotlinClass) p:foo.KotlinClass(foo)*/k.foo
|
||||
/*p:JavaClass(bar) p:foo(KotlinClass) p:foo.KotlinClass(bar)*/k.bar
|
||||
/*p:JavaClass(bar) p:foo(KotlinClass) p:foo.KotlinClass(bar)*/k.bar = ""
|
||||
/*p:JavaClass(bazBaz) p:foo(KotlinClass) p:foo.KotlinClass(bazBaz)*/k.bazBaz
|
||||
/*p:JavaClass(bazBaz) p:foo(KotlinClass) p:foo.KotlinClass(bazBaz)*/k.bazBaz = ""
|
||||
/*p:JavaClass(setBoo) p:foo(KotlinClass) p:foo.KotlinClass(setBoo)*/k.setBoo(2)
|
||||
/*p:foo(KotlinClass) p:foo.KotlinClass(boo) p:foo.bar(boo)*/k.boo = 2
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
package top
|
||||
|
||||
/*p:top*/fun typeAliasUsage(a: /*p:top*/TypeAlias) {
|
||||
/*p:top.Foo(prop) p:top.TypeAlias(prop)*/a.prop
|
||||
/*p:top(TypeAlias) p:top.Foo(prop) p:top.TypeAlias(prop)*/a.prop
|
||||
}
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
================ Step #1 =================
|
||||
|
||||
After chunkBuildStarted. Marked as dirty by Kotlin:
|
||||
src/A.kt
|
||||
src/useAbar.kt
|
||||
src/useAfoo.kt
|
||||
Cleaning output files:
|
||||
out/production/module/META-INF/module.kotlin_module
|
||||
out/production/module/foo/A$Companion.class
|
||||
out/production/module/foo/A.class
|
||||
out/production/module/use/UseAbarKt.class
|
||||
out/production/module/use/UseAfooKt.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/A.kt
|
||||
src/useAbar.kt
|
||||
src/useAfoo.kt
|
||||
End of files
|
||||
Exit code: ABORT
|
||||
------------------------------------------
|
||||
COMPILATION FAILED
|
||||
Unresolved reference 'bar'.
|
||||
Unresolved reference 'foo'.
|
||||
|
||||
================ Step #2 =================
|
||||
|
||||
Compiling files:
|
||||
src/A.kt
|
||||
src/useAbar.kt
|
||||
src/useAfoo.kt
|
||||
End of files
|
||||
Exit code: OK
|
||||
------------------------------------------
|
||||
+6
-14
@@ -2,25 +2,16 @@
|
||||
|
||||
After chunkBuildStarted. Marked as dirty by Kotlin:
|
||||
src/A.kt
|
||||
Cleaning output files:
|
||||
out/production/module/META-INF/module.kotlin_module
|
||||
out/production/module/foo/A$Companion.class
|
||||
out/production/module/foo/A.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/A.kt
|
||||
End of files
|
||||
After build round. Marked as dirty by Kotlin:
|
||||
src/getACompanion.kt
|
||||
src/getACompanionShort.kt
|
||||
src/useACompanionImplicitly.kt
|
||||
src/useACompanionShortImplicitly.kt
|
||||
src/useAbarWithImplicitReceiver.kt
|
||||
src/useAfooWithImplicitReceiver.kt
|
||||
Exit code: ADDITIONAL_PASS_REQUIRED
|
||||
------------------------------------------
|
||||
Cleaning output files:
|
||||
out/production/module/META-INF/module.kotlin_module
|
||||
out/production/module/foo/A$Companion.class
|
||||
out/production/module/foo/A.class
|
||||
out/production/module/use/GetACompanionKt.class
|
||||
out/production/module/use/GetACompanionShortKt.class
|
||||
out/production/module/use/UseACompanionImplicitlyKt.class
|
||||
@@ -29,6 +20,7 @@ Cleaning output files:
|
||||
out/production/module/use/UseAfooWithImplicitReceiverKt.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/A.kt
|
||||
src/getACompanion.kt
|
||||
src/getACompanionShort.kt
|
||||
src/useACompanionImplicitly.kt
|
||||
@@ -39,12 +31,12 @@ End of files
|
||||
Exit code: ABORT
|
||||
------------------------------------------
|
||||
COMPILATION FAILED
|
||||
Unresolved reference 'Companion'.
|
||||
Classifier 'class A : Any' does not have a companion object, so it cannot be used as an expression.
|
||||
Unresolved reference 'bar'.
|
||||
|
||||
================ Step #2 =================
|
||||
|
||||
Cleaning output files:
|
||||
out/production/module/foo/A.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/A.kt
|
||||
src/getACompanion.kt
|
||||
|
||||
@@ -79,12 +79,6 @@ org.jetbrains.uast.test.kotlin.SimpleKotlinRenderLogTest.testReceiverFun, Analys
|
||||
org.jetbrains.kotlin.checkers.FirKotlinHighlightingPassTestGenerated.Regression.testJet53,,, FLAKY
|
||||
org.jetbrains.kotlin.checkers.FirKotlinHighlightingPassTestGenerated.Checker.testResolveTypeInAnnotationArgumentRuntime,,, FLAKY
|
||||
org.jetbrains.kotlin.idea.caches.resolve.MultiModuleHighlightingTest.testLanguageVersionsViaFacets,,, FLAKY
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2JvmJpsTestGenerated.PureKotlin.testRemoveMemberTypeAlias, KT-55195,,
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2LightTreeJvmJpsTestGenerated.PureKotlin.testRemoveMemberTypeAlias, KT-55195,,
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2FirICLightTreeJvmJpsTestGenerated.PureKotlin.testRemoveMemberTypeAlias, KT-55195,,
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2JvmJpsTestGenerated.PureKotlin.testAddMemberTypeAlias, KT-55195,,
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2LightTreeJvmJpsTestGenerated.PureKotlin.testAddMemberTypeAlias, KT-55195,,
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2FirICLightTreeJvmJpsTestGenerated.PureKotlin.testAddMemberTypeAlias, KT-55195,,
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2JvmJpsTestGenerated.IncrementalJvmCompilerOnly.testChangeAnnotationInJavaClass, KT-55696,,
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2LightTreeJvmJpsTestGenerated.IncrementalJvmCompilerOnly.testChangeAnnotationInJavaClass, KT-55696,,
|
||||
org.jetbrains.kotlin.jps.build.IncrementalK2FirICLightTreeJvmJpsTestGenerated.IncrementalJvmCompilerOnly.testChangeAnnotationInJavaClass, KT-55696,,
|
||||
|
||||
|
Reference in New Issue
Block a user