Search in sources :

Example 6 with KtElement

use of org.jetbrains.kotlin.psi.KtElement in project kotlin by JetBrains.

the class CFGraphToDotFilePrinter method dumpDot.

public static void dumpDot(File file, Collection<Pseudocode> pseudocodes) throws FileNotFoundException {
    File target = KotlinTestUtils.replaceExtension(file, "dot");
    PrintStream out = new PrintStream(target);
    out.println("digraph " + FileUtil.getNameWithoutExtension(file) + " {");
    int[] count = new int[1];
    Map<Instruction, String> nodeToName = new HashMap<Instruction, String>();
    for (Pseudocode pseudocode : pseudocodes) {
        dumpNodes(pseudocode.getInstructionsIncludingDeadCode(), out, count, nodeToName, Sets.newHashSet(pseudocode.getInstructions()));
    }
    int i = 0;
    for (Pseudocode pseudocode : pseudocodes) {
        String label;
        KtElement correspondingElement = pseudocode.getCorrespondingElement();
        if (correspondingElement instanceof KtNamedDeclaration) {
            KtNamedDeclaration namedDeclaration = (KtNamedDeclaration) correspondingElement;
            label = namedDeclaration.getName();
        } else {
            label = "anonymous_" + i;
        }
        out.println("subgraph cluster_" + i + " {\n" + "label=\"" + label + "\";\n" + "color=blue;\n");
        dumpEdges(pseudocode.getInstructionsIncludingDeadCode(), out, count, nodeToName);
        out.println("}");
        i++;
    }
    out.println("}");
    out.close();
}
Also used : PrintStream(java.io.PrintStream) KtElement(org.jetbrains.kotlin.psi.KtElement) KtNamedDeclaration(org.jetbrains.kotlin.psi.KtNamedDeclaration) Pseudocode(org.jetbrains.kotlin.cfg.pseudocode.Pseudocode) Instruction(org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction) SubroutineSinkInstruction(org.jetbrains.kotlin.cfg.pseudocode.instructions.special.SubroutineSinkInstruction) SubroutineExitInstruction(org.jetbrains.kotlin.cfg.pseudocode.instructions.special.SubroutineExitInstruction) SubroutineEnterInstruction(org.jetbrains.kotlin.cfg.pseudocode.instructions.special.SubroutineEnterInstruction) MagicInstruction(org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.MagicInstruction) LocalFunctionDeclarationInstruction(org.jetbrains.kotlin.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction) File(java.io.File)

Aggregations

KtElement (org.jetbrains.kotlin.psi.KtElement)6 NotNull (org.jetbrains.annotations.NotNull)2 KtExpression (org.jetbrains.kotlin.psi.KtExpression)2 PsiFile (com.intellij.psi.PsiFile)1 GlobalSearchScope (com.intellij.psi.search.GlobalSearchScope)1 RowIcon (com.intellij.ui.RowIcon)1 File (java.io.File)1 PrintStream (java.io.PrintStream)1 Pseudocode (org.jetbrains.kotlin.cfg.pseudocode.Pseudocode)1 Instruction (org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction)1 MagicInstruction (org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.MagicInstruction)1 LocalFunctionDeclarationInstruction (org.jetbrains.kotlin.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction)1 SubroutineEnterInstruction (org.jetbrains.kotlin.cfg.pseudocode.instructions.special.SubroutineEnterInstruction)1 SubroutineExitInstruction (org.jetbrains.kotlin.cfg.pseudocode.instructions.special.SubroutineExitInstruction)1 SubroutineSinkInstruction (org.jetbrains.kotlin.cfg.pseudocode.instructions.special.SubroutineSinkInstruction)1 DeclarationDescriptor (org.jetbrains.kotlin.descriptors.DeclarationDescriptor)1 KtDeclaration (org.jetbrains.kotlin.psi.KtDeclaration)1 KtFile (org.jetbrains.kotlin.psi.KtFile)1 KtNamedDeclaration (org.jetbrains.kotlin.psi.KtNamedDeclaration)1 KtReferenceExpression (org.jetbrains.kotlin.psi.KtReferenceExpression)1