[pmd-devel] pmd-eclipse/src/net/sourceforge/pmd/eclipse ASTWriterImpl.java,1.1,1.1.2.1
A source code analyzer
Brought to you by:
adangel,
juansotuyo
From: Philippe H. <phh...@us...> - 2003-10-30 23:23:04
|
Update of /cvsroot/pmd/pmd-eclipse/src/net/sourceforge/pmd/eclipse In directory sc8-pr-cvs1:/tmp/cvs-serv17270/src/net/sourceforge/pmd/eclipse Modified Files: Tag: pmd-eclipse-v2 ASTWriterImpl.java Log Message: Fixing bugs #819518 : AST writes out method return types incorrectly #820241 : VariableDeclaration doesn't show variable modifiers Index: ASTWriterImpl.java =================================================================== RCS file: /cvsroot/pmd/pmd-eclipse/src/net/sourceforge/pmd/eclipse/ASTWriterImpl.java,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** ASTWriterImpl.java 27 Oct 2003 20:14:13 -0000 1.1 --- ASTWriterImpl.java 30 Oct 2003 23:23:01 -0000 1.1.2.1 *************** *** 20,28 **** * * </copyright> ! */ package net.sourceforge.pmd.eclipse; import java.io.IOException; import java.io.Writer; import javax.xml.parsers.DocumentBuilder; --- 20,32 ---- * * </copyright> ! */ package net.sourceforge.pmd.eclipse; + import java.beans.BeanInfo; + import java.beans.Introspector; + import java.beans.PropertyDescriptor; import java.io.IOException; import java.io.Writer; + import java.lang.reflect.Method; import javax.xml.parsers.DocumentBuilder; *************** *** 32,38 **** import net.sourceforge.pmd.ast.ASTCompilationUnit; ! import net.sourceforge.pmd.ast.ASTType; import net.sourceforge.pmd.ast.SimpleNode; import org.apache.xml.serialize.DOMSerializer; import org.apache.xml.serialize.OutputFormat; --- 36,44 ---- import net.sourceforge.pmd.ast.ASTCompilationUnit; ! import net.sourceforge.pmd.ast.Node; import net.sourceforge.pmd.ast.SimpleNode; + import org.apache.commons.logging.Log; + import org.apache.commons.logging.LogFactory; import org.apache.xml.serialize.DOMSerializer; import org.apache.xml.serialize.OutputFormat; *************** *** 49,52 **** --- 55,63 ---- * * $Log$ + * Revision 1.1.2.1 2003/10/30 23:23:01 phherlin + * Fixing bugs + * #819518 : AST writes out method return types incorrectly + * #820241 : VariableDeclaration doesn't show variable modifiers + * * Revision 1.1 2003/10/27 20:14:13 phherlin * Refactoring AST generation. Using a ASTWriter. *************** *** 54,57 **** --- 65,69 ---- */ public class ASTWriterImpl implements ASTWriter { + private static Log log = LogFactory.getLog("net.sourceforge.pmd.eclipse.ASTWriterImpl"); /** *************** *** 81,124 **** } } ! /** ! * Return a default node element * @param doc the generated document ! * @param simpleNode a simple node ! * @return a default node element */ private Element getElement(Document doc, SimpleNode simpleNode) { Element simpleNodeElement = doc.createElement(simpleNode.toString()); ! simpleNodeElement.setAttribute("beginColumn", String.valueOf(simpleNode.getBeginColumn())); ! simpleNodeElement.setAttribute("beginLine", String.valueOf(simpleNode.getBeginLine())); ! simpleNodeElement.setAttribute("endColumn", String.valueOf(simpleNode.getEndColumn())); ! simpleNodeElement.setAttribute("endLine", String.valueOf(simpleNode.getEndLine())); ! ! if (simpleNode.getImage() != null) { ! simpleNodeElement.setAttribute("image", simpleNode.getImage()); ! } for (int i = 0; i < simpleNode.jjtGetNumChildren(); i++) { ! Element element = getElement(doc, (SimpleNode) simpleNode.jjtGetChild(i)); simpleNodeElement.appendChild(element); } ! return simpleNodeElement; } /** ! * Return a type element ! * @param doc the generated document ! * @param type a type node ! * @return a type element ! */ ! private Element getElement(Document doc, ASTType type) { ! Element typeElement = getElement(doc, (SimpleNode) type); ! if (type.isArray()) { ! typeElement.setAttribute("isArray", "true"); ! typeElement.setAttribute("dimensions", String.valueOf(type.getDimensions())); } - - return typeElement; } --- 93,143 ---- } } ! /** ! * Transform a ast node to a xml element * @param doc the generated document ! * @param simpleNode a ast node ! * @return a xml element */ private Element getElement(Document doc, SimpleNode simpleNode) { + log.debug("creating element " + simpleNode); Element simpleNodeElement = doc.createElement(simpleNode.toString()); ! ! addAttributes(simpleNodeElement, simpleNode); for (int i = 0; i < simpleNode.jjtGetNumChildren(); i++) { ! Node child = simpleNode.jjtGetChild(i); ! Element element = getElement(doc, (SimpleNode) child); simpleNodeElement.appendChild(element); } ! return simpleNodeElement; } /** ! * Add attributes to element by introspecting the node. This way, the abstract ! * tree can evolve indepently from the way it is persisted ! * @param element a xml element ! * @param simpleNode a ast node ! */ ! private void addAttributes(Element element, SimpleNode simpleNode) { ! try { ! BeanInfo beanInfo = Introspector.getBeanInfo(simpleNode.getClass()); ! PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors(); ! for (int i = 0; i < descriptors.length; i++) { ! String attributeName = descriptors[i].getName(); ! if (!attributeName.equals("class") && !attributeName.equals("scope")) { ! log.debug(" processing attribute " + descriptors[i].getName()); ! Method getter = descriptors[i].getReadMethod(); ! Object result = getter.invoke(simpleNode, null); ! if (result != null) { ! log.debug(" added"); ! element.setAttribute(descriptors[i].getName(), result.toString()); ! } ! } ! } ! } catch (Exception e) { ! log.debug("Error introspecting properties. Ignored", e); } } |