An API (for Kotlin) for mirror source substitution.
[idea/community.git] / java / java-psi-impl / src / com / intellij / psi / impl / compiled / ClsClassImpl.java
index 4f9a039070024ed271b2ba214d83ff53c9f03bb4..968f34ad5bc3fdce723e23121f8400a86b0f6b89 100644 (file)
@@ -19,6 +19,7 @@ import com.intellij.navigation.ItemPresentation;
 import com.intellij.navigation.ItemPresentationProviders;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.ui.Queryable;
+import com.intellij.openapi.util.Key;
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.Ref;
 import com.intellij.psi.*;
@@ -52,6 +53,7 @@ public class ClsClassImpl extends ClsRepositoryPsiElement<PsiClassStub<?>> imple
   private final ClassInnerStuffCache innersCache = new ClassInnerStuffCache(this);
   private final PsiIdentifier myNameIdentifier;
   private final PsiDocComment myDocComment;
+  public static final Key<PsiClass> DELEGATE_KEY = Key.create("DELEGATE");
 
   public ClsClassImpl(final PsiClassStub stub) {
     super(stub);
@@ -540,6 +542,11 @@ public class ClsClassImpl extends ClsRepositoryPsiElement<PsiClassStub<?>> imple
 
   @Nullable
   public PsiClass getSourceMirrorClass() {
+    PsiClass delegate = getUserData(DELEGATE_KEY);
+    if (delegate instanceof ClsClassImpl) {
+      return ((ClsClassImpl)delegate).getSourceMirrorClass();
+    }
+
     PsiElement parent = getParent();
     final String name = getName();
     if (parent instanceof PsiFile) {