diff --git a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt index 800380c2b9d..1085d49403a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt @@ -106,6 +106,7 @@ fun createContainerForLazyLocalClassifierAnalyzer( platform: TargetPlatform, lookupTracker: LookupTracker, languageVersionSettings: LanguageVersionSettings, + statementFilter: StatementFilter, localClassDescriptorHolder: LocalClassDescriptorHolder ): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) { configureModule(moduleContext, platform, bindingTrace) @@ -125,6 +126,7 @@ fun createContainerForLazyLocalClassifierAnalyzer( useImpl() useInstance(languageVersionSettings) + useInstance(statementFilter) } fun createContainerForLazyResolve( diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java index 7b5aed81191..a339d2cd1a6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java @@ -35,7 +35,7 @@ public class ExpressionTypingContext extends ResolutionContext() { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt index a6dacd7cdc9..a42458820cd 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt @@ -52,7 +52,7 @@ class LocalClassifierAnalyzer( private val globalContext: GlobalContext, private val storageManager: StorageManager, private val descriptorResolver: DescriptorResolver, - private val funcionDescriptorResolver: FunctionDescriptorResolver, + private val functionDescriptorResolver: FunctionDescriptorResolver, private val typeResolver: TypeResolver, private val annotationResolver: AnnotationResolver, private val platform: TargetPlatform, @@ -74,6 +74,7 @@ class LocalClassifierAnalyzer( platform, lookupTracker, languageVersionSettings, + context.statementFilter, LocalClassDescriptorHolder( scope, classOrObject, @@ -82,7 +83,7 @@ class LocalClassifierAnalyzer( context, module, descriptorResolver, - funcionDescriptorResolver, + functionDescriptorResolver, typeResolver, annotationResolver, supertypeLoopChecker, diff --git a/idea/testData/resolve/partialBodyResolve/AnonymousObjects.completion b/idea/testData/resolve/partialBodyResolve/AnonymousObjects.completion index 85a24716b71..af9ac700056 100644 --- a/idea/testData/resolve/partialBodyResolve/AnonymousObjects.completion +++ b/idea/testData/resolve/partialBodyResolve/AnonymousObjects.completion @@ -7,18 +7,18 @@ open class C(p: Int) { fun foo(p: String?) { val o = object : Runnable { override fun run() { - if (p == null) return - print(p.size) + /* STATEMENT DELETED: if (p == null) return */ + /* STATEMENT DELETED: print(p.length) */ } } val c = object : C(p!!.size) { override fun f() { - super.f() - if (p == null) return - print(p.size) + /* STATEMENT DELETED: super.f() */ + /* STATEMENT DELETED: if (p == null) return */ + /* STATEMENT DELETED: print(p.length) */ } } - p?.size -} + p?.length +} \ No newline at end of file diff --git a/idea/testData/resolve/partialBodyResolve/AnonymousObjects.dump b/idea/testData/resolve/partialBodyResolve/AnonymousObjects.dump index 5f31b8a11b4..0e0d3bcf14e 100644 --- a/idea/testData/resolve/partialBodyResolve/AnonymousObjects.dump +++ b/idea/testData/resolve/partialBodyResolve/AnonymousObjects.dump @@ -5,15 +5,15 @@ open class C(p: Int) { } fun foo(p: String?) { - /* STATEMENT DELETED: val o = object : Runnable { override fun run() { if (p == null) return print(p.size) } } */ + /* STATEMENT DELETED: val o = object : Runnable { override fun run() { if (p == null) return print(p.length) } } */ val c = object : C(p!!.size) { override fun f() { - super.f() - if (p == null) return - print(p.size) + /* STATEMENT DELETED: super.f() */ + /* STATEMENT DELETED: if (p == null) return */ + /* STATEMENT DELETED: print(p.length) */ } } - p?.size -} + p?.length +} \ No newline at end of file diff --git a/idea/testData/resolve/partialBodyResolve/AnonymousObjects.kt b/idea/testData/resolve/partialBodyResolve/AnonymousObjects.kt index e8c56634b23..ebd16c281e5 100644 --- a/idea/testData/resolve/partialBodyResolve/AnonymousObjects.kt +++ b/idea/testData/resolve/partialBodyResolve/AnonymousObjects.kt @@ -6,7 +6,7 @@ fun foo(p: String?) { val o = object : Runnable { override fun run() { if (p == null) return - print(p.size) + print(p.length) } } @@ -14,9 +14,9 @@ fun foo(p: String?) { override fun f() { super.f() if (p == null) return - print(p.size) + print(p.length) } } - p?.size + p?.length } \ No newline at end of file diff --git a/idea/testData/resolve/partialBodyResolve/InsideAnonymousObject.dump b/idea/testData/resolve/partialBodyResolve/InsideAnonymousObject.dump new file mode 100644 index 00000000000..d31ecf7aef8 --- /dev/null +++ b/idea/testData/resolve/partialBodyResolve/InsideAnonymousObject.dump @@ -0,0 +1,23 @@ +Resolve target: val length: kotlin.Int +---------------------------------------------- +open class C(p: Int) { + open fun f(){} +} + +fun foo(p1: String?, p2: String?) { + if (p1 == null) return + /* STATEMENT DELETED: println(p1) */ + + val c = object : C(p1.length) { + override fun f() { + /* STATEMENT DELETED: super.f() */ + if (p2 == null) return + print(p2.length) + /* STATEMENT DELETED: bar() */ + } + + fun bar() { + /* STATEMENT DELETED: print(1) */ + } + } +} \ No newline at end of file diff --git a/idea/testData/resolve/partialBodyResolve/InsideAnonymousObject.kt b/idea/testData/resolve/partialBodyResolve/InsideAnonymousObject.kt new file mode 100644 index 00000000000..6cb07d4e23b --- /dev/null +++ b/idea/testData/resolve/partialBodyResolve/InsideAnonymousObject.kt @@ -0,0 +1,21 @@ +open class C(p: Int) { + open fun f(){} +} + +fun foo(p1: String?, p2: String?) { + if (p1 == null) return + println(p1) + + val c = object : C(p1.length) { + override fun f() { + super.f() + if (p2 == null) return + print(p2.length) + bar() + } + + fun bar() { + print(1) + } + } +} \ No newline at end of file diff --git a/idea/testData/resolve/partialBodyResolve/LocalClass.completion b/idea/testData/resolve/partialBodyResolve/LocalClass.completion index ea793bab250..5fe92b67cea 100644 --- a/idea/testData/resolve/partialBodyResolve/LocalClass.completion +++ b/idea/testData/resolve/partialBodyResolve/LocalClass.completion @@ -3,9 +3,9 @@ Resolve target: value-parameter p: kotlin.String? fun foo(p: String?) { class LocalClass { fun f(): String? { - if (p == null) return null - print(p.size) - return "" + /* STATEMENT DELETED: if (p == null) return null */ + /* STATEMENT DELETED: print(p.size) */ + /* STATEMENT DELETED: return "" */ } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/PartialBodyResolveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/resolve/PartialBodyResolveTestGenerated.java index 4f00967c251..f4b07033b07 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/resolve/PartialBodyResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/resolve/PartialBodyResolveTestGenerated.java @@ -317,6 +317,12 @@ public class PartialBodyResolveTestGenerated extends AbstractPartialBodyResolveT doTest(fileName); } + @TestMetadata("InsideAnonymousObject.kt") + public void testInsideAnonymousObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/resolve/partialBodyResolve/InsideAnonymousObject.kt"); + doTest(fileName); + } + @TestMetadata("IntConstantTypeBug.kt") public void testIntConstantTypeBug() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/resolve/partialBodyResolve/IntConstantTypeBug.kt");