package org.dlangplugin.psi; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileFactory; import com.intellij.psi.impl.PsiFileFactoryImpl; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.LightVirtualFile; import org.dlangplugin.DFileType; import org.dlangplugin.DLanguage; import org.jetbrains.annotations.Nullable; public class DLangElementGenerator { @Nullable public static DLangIdentifier createIdentifierFromText(Project myProject, String name) { return createClassAndFindChild(myProject, name, DLangIdentifier.class); } @Nullable private static <T extends PsiElement> T createClassAndFindChild(Project myProject, String name, Class<T> aClass) { final DLangClassDeclaration classDeclarationStatement = createClassStatementFromPath(myProject, name); if (classDeclarationStatement == null) { return null; } return PsiTreeUtil.findChildOfType(classDeclarationStatement, aClass); } @Nullable public static DLangClassDeclaration createClassStatementFromPath(Project myProject, String name) { final PsiFile dummyFile = createDummyFile(myProject, "class " + name + " {}"); return PsiTreeUtil.getChildOfType(dummyFile, DLangClassDeclaration.class); } public static PsiFile createDummyFile(Project myProject, String text) { final PsiFileFactory factory = PsiFileFactory.getInstance(myProject); final String name = "dummy." + DFileType.INSTANCE.getDefaultExtension(); final LightVirtualFile virtualFile = new LightVirtualFile(name, DFileType.INSTANCE, text); final PsiFile psiFile = ((PsiFileFactoryImpl)factory).trySetupPsiForFile(virtualFile, DLanguage.INSTANCE, false, true); assert psiFile != null; return psiFile; } }