/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.doc; import com.intellij.lang.ASTNode; import com.intellij.lang.documentation.AbstractDocumentationProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; public class EscapingQuickNavigateInfoProvider extends AbstractDocumentationProvider { public String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) { ASTNode valueNode = element.getNode(); if (valueNode != null) { String info = "\n\"" + escape(valueNode.getText()) + "\""; PsiFile file = element.getContainingFile(); if (file != null) { info += " [" + file.getName() + "]"; } return info; } return null; } private String escape(String string) { if (string == null || string.length() == 0) { return string; } StringBuilder resultBuffer = null; for (int i = 0, length = string.length(); i < length; i++) { String entity = null; char ch = string.charAt(i); switch (ch) { case '<': { entity = "<"; break; } case '>': entity = ">"; break; case '&': entity = "&"; break; case '"': entity = """; break; default: break; } if (entity != null) { if (resultBuffer == null) { resultBuffer = new StringBuilder(string); resultBuffer.setLength(i); } resultBuffer.append(entity); } else if (resultBuffer != null) { resultBuffer.append(ch); } } return (resultBuffer != null) ? resultBuffer.toString() : string; } }