package net.sourceforge.phpdt.internal.corext.phpdoc; import java.io.FileReader; import java.io.IOException; import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation; /** * Utility class for static PHPdoc helper mehods */ public class PHPDocUtil { /** * Generate a PHPDoc hover text if possible * * @param hoverInfoBuffer * @param filename * @param location */ public static void appendPHPDoc(StringBuffer hoverInfoBuffer, String filename, PHPIdentifierLocation location) { FileReader phpFileReader; hoverInfoBuffer.append(location.toString()); hoverInfoBuffer.append(" - "); try { hoverInfoBuffer.append(getUsage(filename, location)); hoverInfoBuffer.append("
"); // read the phpdoc for the function if (location.getPHPDocOffset() >= 0) { phpFileReader = new FileReader(filename); char[] phpDocDeclarationCharArray = new char[location .getPHPDocLength()]; phpFileReader.skip(location.getPHPDocOffset()); phpFileReader.read(phpDocDeclarationCharArray, 0, location .getPHPDocLength()); PHPDocCharArrayCommentReader phpdocConverter = new PHPDocCharArrayCommentReader( phpDocDeclarationCharArray); hoverInfoBuffer.append(phpdocConverter.getString()); // hoverInfoBuffer.append("

"); phpFileReader.close(); } } catch (IOException e) { return; } } public static String getUsage(String filename, PHPIdentifierLocation location) { FileReader phpFileReader; String usage = location.getUsage(); if (usage != null) { return usage; } usage = ""; try { phpFileReader = new FileReader(filename); // read the function declaration if (location.getOffset() >= 0 && (location.isMethod() || location.isConstructor() || location.isFunction() || location.isDefine())) { char[] functionDeclarationCharArray = new char[256]; int offset = location.getOffset(); phpFileReader.skip(offset); int length = phpFileReader.read(functionDeclarationCharArray, 0, 256); if (length == -1) { length = 256; } for (int i = 0; i < length; i++) { if (functionDeclarationCharArray[i] == ')') { length = i + 1; break; } if (functionDeclarationCharArray[i] == '{' || functionDeclarationCharArray[i] == '}') { length = i; break; } } usage = new String(functionDeclarationCharArray, 0, length); } phpFileReader.close(); } catch (IOException e) { // do nothing } // cache the usage string: location.setUsage(usage); return usage; } }