package jetbrains.mps.idea.java.psi.impl.blTypes; /*Generated by MPS */ import jetbrains.mps.idea.core.psi.impl.MPSPsiNode; import jetbrains.mps.idea.java.psi.impl.ComputesPsiType; import com.intellij.psi.PsiClassType; import org.jetbrains.mps.openapi.model.SNodeId; import com.intellij.psi.PsiManager; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.PsiType; import jetbrains.mps.idea.java.psi.impl.NonJavaMPSType; import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiSubstitutor; import com.intellij.psi.impl.source.PsiImmediateClassType; /** * User: danilla */ public abstract class MPSPsiCollectionType extends MPSPsiNode implements ComputesPsiType<PsiClassType> { public MPSPsiCollectionType(SNodeId id, String concept, String containingRole, PsiManager manager) { super(id, concept, containingRole, manager); } @Override public PsiClassType getPsiType() { Project project = getProject(); PsiClass claz = JavaPsiFacade.getInstance(project).findClass(getClassName(), GlobalSearchScope.allScope(project)); MPSPsiNode[] childTypeNodes = getChildTypeNodes(); PsiType[] psiChildTypes = new PsiType[childTypeNodes.length]; for (int i = 0; i < childTypeNodes.length; i++) { MPSPsiNode typeNode = childTypeNodes[i]; PsiType psiType; if (typeNode instanceof ComputesPsiType) { psiType = ((ComputesPsiType) typeNode).getPsiType(); } else { psiType = new NonJavaMPSType(PsiAnnotation.EMPTY_ARRAY); } psiChildTypes[i] = psiType; } PsiSubstitutor subst = PsiSubstitutor.EMPTY.putAll(claz, psiChildTypes); return new PsiImmediateClassType(claz, subst); } protected abstract String getClassName(); protected abstract MPSPsiNode[] getChildTypeNodes(); }