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");