diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java index e24e49c6ea0..b1ac89f01ee 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.resolve.calls.CallsPackage; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor; @@ -246,6 +247,8 @@ public class LazyTopDownAnalyzer { declarationResolver.checkRedeclarationsInPackages(resolveSession, topLevelFqNames); declarationResolver.checkRedeclarationsInInnerClassNames(c); + CallsPackage.checkTraitRequirements(c.getDeclaredClasses(), trace); + overrideResolver.check(c); resolveImportsInAllFiles(c, resolveSession); diff --git a/idea/testData/checker/unmetTraitRequirements.kt b/idea/testData/checker/unmetTraitRequirements.kt new file mode 100644 index 00000000000..5b19d7489a2 --- /dev/null +++ b/idea/testData/checker/unmetTraitRequirements.kt @@ -0,0 +1,15 @@ +open class Base { +} + +trait Derived: Base { + fun foo() { + f1(this@Derived) + } +} + +class DerivedImpl(): Derived {} +object ObjectImpl: Derived {} + +fun f1(b: Base) = b + +// KT-3006 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java index 19a82b7b0e1..69e6e1c339e 100644 --- a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java @@ -255,6 +255,11 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest { doTest("idea/testData/checker/trivialHierarchyLoop.kt"); } + @TestMetadata("unmetTraitRequirements.kt") + public void testUnmetTraitRequirements() throws Exception { + doTest("idea/testData/checker/unmetTraitRequirements.kt"); + } + @TestMetadata("UnreachableCode.kt") public void testUnreachableCode() throws Exception { doTest("idea/testData/checker/UnreachableCode.kt");