KT-14376 ClassCastException from object with vals
#KT-14376 Fixed
This commit is contained in:
@@ -300,7 +300,7 @@ class ResolveElementCache(
|
|||||||
|
|
||||||
is KtAnonymousInitializer -> initializerAdditionalResolve(resolveSession, resolveElement, file, createStatementFilter(), bodyResolveMode.bindingTraceFilter)
|
is KtAnonymousInitializer -> initializerAdditionalResolve(resolveSession, resolveElement, file, createStatementFilter(), bodyResolveMode.bindingTraceFilter)
|
||||||
|
|
||||||
is KtPrimaryConstructor -> constructorAdditionalResolve(resolveSession, resolveElement.parent as KtClass, file, bodyResolveMode.bindingTraceFilter)
|
is KtPrimaryConstructor -> constructorAdditionalResolve(resolveSession, resolveElement.parent as KtClassOrObject, file, bodyResolveMode.bindingTraceFilter)
|
||||||
|
|
||||||
is KtSecondaryConstructor -> secondaryConstructorAdditionalResolve(resolveSession, resolveElement, file, createStatementFilter(), bodyResolveMode.bindingTraceFilter)
|
is KtSecondaryConstructor -> secondaryConstructorAdditionalResolve(resolveSession, resolveElement, file, createStatementFilter(), bodyResolveMode.bindingTraceFilter)
|
||||||
|
|
||||||
@@ -523,7 +523,7 @@ class ResolveElementCache(
|
|||||||
return trace
|
return trace
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun constructorAdditionalResolve(resolveSession: ResolveSession, klass: KtClass, file: KtFile, filter : BindingTraceFilter): BindingTrace {
|
private fun constructorAdditionalResolve(resolveSession: ResolveSession, klass: KtClassOrObject, file: KtFile, filter : BindingTraceFilter): BindingTrace {
|
||||||
val trace = createDelegatingTrace(klass, filter)
|
val trace = createDelegatingTrace(klass, filter)
|
||||||
val scope = resolveSession.declarationScopeProvider.getResolutionScopeForDeclaration(klass)
|
val scope = resolveSession.declarationScopeProvider.getResolutionScopeForDeclaration(klass)
|
||||||
|
|
||||||
|
|||||||
@@ -24,13 +24,16 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
|
|||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
import org.jetbrains.kotlin.idea.imports.importableFqName
|
import org.jetbrains.kotlin.idea.imports.importableFqName
|
||||||
|
import org.jetbrains.kotlin.idea.search.usagesSearch.constructor
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
|
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||||
import org.jetbrains.kotlin.name.SpecialNames
|
import org.jetbrains.kotlin.name.SpecialNames
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
|
|
||||||
class ResolveElementCacheTest : KotlinLightCodeInsightFixtureTestCase() {
|
class ResolveElementCacheTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||||
@@ -501,6 +504,13 @@ class C(param1: String = "", param2: Int = 0) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testKT14376() {
|
||||||
|
val file = myFixture.configureByText("Test.kt", "object Obj(val x: Int)") as KtFile
|
||||||
|
val nameRef = file.findDescendantOfType<KtNameReferenceExpression>()!!
|
||||||
|
val bindingContext = nameRef.analyze(BodyResolveMode.PARTIAL)
|
||||||
|
assert(bindingContext[BindingContext.REFERENCE_TARGET, nameRef]?.fqNameSafe?.asString() == "kotlin.Int")
|
||||||
|
}
|
||||||
|
|
||||||
private fun checkResolveMultiple(mode: BodyResolveMode, vararg expressions: KtExpression): BindingContext {
|
private fun checkResolveMultiple(mode: BodyResolveMode, vararg expressions: KtExpression): BindingContext {
|
||||||
val resolutionFacade = expressions.first().getResolutionFacade()
|
val resolutionFacade = expressions.first().getResolutionFacade()
|
||||||
val bindingContext = resolutionFacade.analyze(expressions.asList(), mode)
|
val bindingContext = resolutionFacade.analyze(expressions.asList(), mode)
|
||||||
|
|||||||
Reference in New Issue
Block a user