r1338 - in guix/trunk/guix-compiler: . src/main/java/org/nuiton/guix src/main/java/org/nuiton/guix/compiler src/main/java/org/nuiton/guix/model src/main/java/org/nuiton/guix/tags
Author: kmorin Date: 2009-04-20 12:33:09 +0000 (Mon, 20 Apr 2009) New Revision: 1338 Added: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/model/GuixModelObject.java Modified: guix/trunk/guix-compiler/pom.xml guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/tags/TagManager.java Log: Mise a jour de la version de XPP Corrections du parcours des fichiers guix Modified: guix/trunk/guix-compiler/pom.xml =================================================================== --- guix/trunk/guix-compiler/pom.xml 2009-04-18 08:45:28 UTC (rev 1337) +++ guix/trunk/guix-compiler/pom.xml 2009-04-20 12:33:09 UTC (rev 1338) @@ -18,7 +18,7 @@ <dependency> <groupId>xpp3</groupId> <artifactId>xpp3</artifactId> - <version>1.1.3.3</version> + <version>1.1.4c</version> </dependency> </dependencies> Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java =================================================================== --- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java 2009-04-18 08:45:28 UTC (rev 1337) +++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java 2009-04-20 12:33:09 UTC (rev 1338) @@ -4,9 +4,10 @@ */ package org.nuiton.guix; +import java.io.IOException; import org.nuiton.guix.compiler.GuixCompiler; -import org.codelutin.guix.compiler.*; import java.io.File; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -16,7 +17,9 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.guix.model.ClassDescriptor; -import org.codelutin.guix.model.GuixModelObject; +import org.nuiton.guix.model.GuixModelObject; +import org.xmlpull.v1.XmlPullParserFactory; +import org.xmlpull.v1.XmlSerializer; /** * Launch Guix files compilation @@ -26,8 +29,8 @@ public class GuixLauncher { /** log */ - /* protected static final Log log = - LogFactory.getLog(GuixLauncher.class);*/ + /* protected static final Log log = + LogFactory.getLog(GuixLauncher.class);*/ /** original list of files to compile */ protected final File[] files; /** original list of classes to compile */ @@ -88,56 +91,65 @@ File file = filesIterator.next(); String className = classNamesIterator.next(); /*if (log.isDebugEnabled()) { - log.debug("compile first pass for " + className); + log.debug("compile first pass for " + className); }*/ if (!compiledFiles.contains(file)) { compiled = true; compiledFiles.add(file); - } - if (compilers.containsKey(className)) { - //throw new CompilerException("Internal error: " + className + " is already being compiled, attempting to compile it again"); - } - File destDir = targetDirectory; - if (destDir != null) { - int dotPos = className.lastIndexOf("."); - if (dotPos != -1) { - destDir = new File(destDir, className.substring(0, dotPos).replace('.', File.separatorChar)); + File destDir = targetDirectory; + if (destDir != null) { + int dotPos = className.lastIndexOf("."); + if (dotPos != -1) { + destDir = new File(destDir, className.substring(0, dotPos).replace('.', File.separatorChar)); + } + if (!destDir.exists() && !destDir.mkdirs()) { + //log.warn("couldn't create directory " + destDir); + System.out.println("couldn't create directory " + destDir); + continue; + } + } else { + //destDir = file.getParentFile(); } - if (!destDir.exists() && !destDir.mkdirs()) { - //log.warn("couldn't create directory " + destDir); - System.out.println("couldn't create directory " + destDir); - continue; + GuixCompiler compiler = new GuixCompiler( + file.getParentFile(), file, className, this); + //addProfileTime(compiler, currentPass.name() + "_start"); + compilers.put(className, compiler); + GuixModelObject rootModelObject = compiler.compile(); + rootModelObjects.add(rootModelObject); + //addProfileTime(compiler, currentPass.name() + "_end"); + //assert !symbolTables.values().contains(compiler.getSymbolTable()) : "symbolTable is already registered"; + //symbolTables.put(file, compiler.getSymbolTable()); + if (compiler.isFailed()) { + success = false; } - } else { - //destDir = file.getParentFile(); - } - GuixCompiler compiler = new GuixCompiler( - file.getParentFile(), file, className,this); - //addProfileTime(compiler, currentPass.name() + "_start"); - compilers.put(className, compiler); - GuixModelObject rootModelObject = compiler.compile(); - rootModelObjects.add(rootModelObject); - //addProfileTime(compiler, currentPass.name() + "_end"); - //assert !symbolTables.values().contains(compiler.getSymbolTable()) : "symbolTable is already registered"; - //symbolTables.put(file, compiler.getSymbolTable()); - if (compiler.isFailed()) { - success = false; } - //} } } while (compiled); - for(GuixModelObject mo : rootModelObjects) { - //log.trace("class : " - System.out.println("class : " - + mo.getClassDescriptor().getPackageName()+ "." - + mo.getClassDescriptor().getName() - + " extends " - + mo.getClassDescriptor().getSuperClass().getPackageName() - + "." + mo.getClassDescriptor().getSuperClass().getName()); - + XmlPullParserFactory factory = + XmlPullParserFactory.newInstance( + System.getProperty(XmlPullParserFactory.PROPERTY_NAME), + null); + + for (GuixModelObject mo : rootModelObjects) { + + File f = new File(mo.getClassDescriptor().getName() + "ModelTree.xml"); + if (!f.exists()) { + f.createNewFile(); + } + System.out.println(f.getAbsolutePath()); + + XmlSerializer serializer = factory.newSerializer(); + + serializer.setOutput(new PrintWriter(f)); + serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n"); + serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation", "\t"); + + writeModelTree(serializer, mo); + + serializer.endDocument(); } /*// pass 2 @@ -237,11 +249,45 @@ } } + private void writeModelTree(XmlSerializer serializer, GuixModelObject mo) throws IOException { + serializer.startTag("", "Object"); + if (mo.getId() != null && !mo.getId().equals("")) { + serializer.attribute("", "id", mo.getId()); + } + serializer.text(mo.getJavadoc()); + serializer.startTag("", "class"); + serializer.startTag("", "name"); + serializer.text(mo.getClassDescriptor().getName()); + serializer.endTag("", "name"); + serializer.startTag("", "package"); + if (mo.getClassDescriptor().getPackageName() != null && !mo.getClassDescriptor().getPackageName().equals("")) { + serializer.text(mo.getClassDescriptor().getPackageName()); + } + serializer.endTag("", "package"); + serializer.startTag("", "script"); + if (mo.getClassDescriptor().getScript() != null && !mo.getClassDescriptor().getScript().equals("")) { + serializer.text(mo.getClassDescriptor().getScript()); + } + serializer.endTag("", "script"); + serializer.startTag("", "superclass"); + if (mo.getClassDescriptor().getSuperClass() != null) { + serializer.text(mo.getClassDescriptor().getSuperClass().getPackageName() + "." + mo.getClassDescriptor().getSuperClass().getName()); + } + serializer.endTag("", "superclass"); + serializer.endTag("", "class"); + + for (GuixModelObject child : mo.getChildren()) { + writeModelTree(serializer, child); + } + + + serializer.endTag("", "Object"); + + } + public boolean registerClassDescriptor(ClassDescriptor classDescriptor) { int i = 0; - while ((i < classDescriptors.size()) - && (!classDescriptors.get(i).getName().equals(classDescriptor.getName())) - && (!classDescriptors.get(i).getPackageName().equals(classDescriptor.getPackageName()))) { + while ((i < classDescriptors.size()) && (!classDescriptors.get(i).getName().equals(classDescriptor.getName())) && ((classDescriptors.get(i).getPackageName() == null) || (classDescriptor.getPackageName() == null) || (!classDescriptors.get(i).getPackageName().equals(classDescriptor.getPackageName())))) { i++; } //if the ClassDescriptor does not exist @@ -250,16 +296,18 @@ return true; } if (classDescriptor.getScript() != null) { - if(classDescriptors.get(i).getScript() == null) + if (classDescriptors.get(i).getScript() == null) { classDescriptors.get(i).setScript(classDescriptor.getScript()); - else if (!classDescriptors.get(i).getScript().equals(classDescriptor.getScript())) + } else if (!classDescriptors.get(i).getScript().equals(classDescriptor.getScript())) { return false; + } } - if(classDescriptor.getSuperClass() != null) { - if (classDescriptors.get(i).getSuperClass() == null) + if (classDescriptor.getSuperClass() != null) { + if (classDescriptors.get(i).getSuperClass() == null) { classDescriptors.get(i).setSuperClass(classDescriptor.getSuperClass()); - else if (!classDescriptors.get(i).getSuperClass().equals(classDescriptor.getSuperClass())) + } else if (!classDescriptors.get(i).getSuperClass().equals(classDescriptor.getSuperClass())) { return false; + } } return true; } Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java =================================================================== --- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java 2009-04-18 08:45:28 UTC (rev 1337) +++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java 2009-04-20 12:33:09 UTC (rev 1338) @@ -19,7 +19,6 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; -import org.xmlpull.v1.builder.XmlPullElement; /** * Compiles Guix files into Java classes @@ -31,10 +30,6 @@ /** flag to detec if an error occurs while compiling jaxx file */ protected boolean failed; /** Used for error reporting purposes, - * so we can report the right line number. */ - protected Stack<XmlPullElement> tagsBeingCompiled = - new Stack<XmlPullElement>(); - /** Used for error reporting purposes, * so we can report the right source file. */ protected Stack<File> sourceFiles = new Stack<File>(); /** XML parser of src file. */ @@ -42,7 +37,7 @@ private File src; private String outputClassName; private GuixLauncher launchor; - + /*------------------------------------------------------------------------*/ /*-- Constructor methods -------------------------------------------------*/ /*------------------------------------------------------------------------*/ @@ -82,7 +77,7 @@ String nameSpace = xpp.getNamespace(); String localName = xpp.getName(); String packageName = - getPackageName(nameSpace, localName); + resolvePackageName(nameSpace, localName); GuixModelObject root = new GuixModelObject( xpp.getAttributeValue("", "id"), doc.toString()); @@ -94,21 +89,29 @@ root.getClassDescriptor().setSuperClass(new ClassDescriptor( localName, packageName)); root.setAttributeDescriptors(getAttributes(xpp)); + root.setChildren(new ArrayList<GuixModelObject>()); - while(xpp.getEventType() != XmlPullParser.START_TAG) + do { xpp.nextToken(); + } while(xpp.getEventType() != XmlPullParser.START_TAG); + if(xpp.getName().equals("script")) { xpp.nextToken(); - if(xpp.getEventType() == XmlPullParser.CDSECT) + if(xpp.getEventType() == XmlPullParser.CDSECT) { root.getClassDescriptor().setScript(xpp.getText()); + } while((xpp.getEventType() != XmlPullParser.END_TAG) - || (!xpp.getName().equals("script"))) + || (!xpp.getName().equals("script"))) { xpp.nextToken(); + } + do { + xpp.nextToken(); + } while(xpp.getEventType() != XmlPullParser.START_TAG + && xpp.getEventType() != XmlPullParser.END_DOCUMENT); } failed = launchor.registerClassDescriptor(root.getClassDescriptor()); - xpp.nextToken(); if (xpp.getEventType() == XmlPullParser.START_TAG) { compile(xpp,root,doc.toString()); } @@ -123,25 +126,28 @@ /*------------------------------------------------------------------------*/ /*-- Compile methods -----------------------------------------------------*/ /*------------------------------------------------------------------------*/ - public void compile(final XmlPullParser xpp, GuixModelObject previousMO, + private void compile(final XmlPullParser xpp, GuixModelObject previousMO, String javaDoc) throws IOException, XmlPullParserException { String nameSpace = xpp.getNamespace(); String localName = xpp.getName(); - String packageName = getPackageName(nameSpace, localName); + String packageName = resolvePackageName(nameSpace, localName); nameSpace = packageName + ".*"; GuixModelObject mo = new GuixModelObject(xpp.getAttributeValue("","id"),javaDoc); mo.setParent(previousMO); mo.setClassDescriptor(new ClassDescriptor(localName, packageName)); previousMO.getChildren().add(mo); + mo.setChildren(new ArrayList<GuixModelObject>()); - failed = launchor.registerClassDescriptor(mo.getClassDescriptor()); + failed = !launchor.registerClassDescriptor(mo.getClassDescriptor()); + if(!failed) { GuixModelObject prev = mo; StringBuffer doc = new StringBuffer(); do { - xpp.next(); + xpp.nextToken(); + if (xpp.getEventType() == XmlPullParser.END_TAG) { prev = prev.getParent(); } @@ -156,7 +162,7 @@ } } - private String getPackageName(String nameSpace, String localName) { + private String resolvePackageName(String nameSpace, String localName) { // resolve class tags into fully-qualified class name String packageName; if (nameSpace != null && nameSpace.endsWith("*")) { Added: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/model/GuixModelObject.java =================================================================== --- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/model/GuixModelObject.java (rev 0) +++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/model/GuixModelObject.java 2009-04-20 12:33:09 UTC (rev 1338) @@ -0,0 +1,75 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.guix.model; + +import java.util.List; + +/** + * + * @author morin + */ +public class GuixModelObject { + + private String id; + private GuixModelObject parent; + private List<GuixModelObject> children; + private ClassDescriptor classDescriptor; + private List<AttributeDescriptor> attributeDescriptors; + private String javadoc; + + public GuixModelObject(String id, String javadoc) { + this.id = id; + this.javadoc = javadoc; + } + + public List<AttributeDescriptor> getAttributeDescriptors() { + return attributeDescriptors; + } + + public void setAttributeDescriptors(List<AttributeDescriptor> attributeDescriptors) { + this.attributeDescriptors = attributeDescriptors; + } + + public List<GuixModelObject> getChildren() { + return children; + } + + public void setChildren(List<GuixModelObject> children) { + this.children = children; + } + + public ClassDescriptor getClassDescriptor() { + return classDescriptor; + } + + public void setClassDescriptor(ClassDescriptor classDescriptor) { + this.classDescriptor = classDescriptor; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public GuixModelObject getParent() { + return parent; + } + + public void setParent(GuixModelObject parent) { + this.parent = parent; + } + + public String getJavadoc() { + return javadoc; + } + + public void setJavadoc(String javadoc) { + this.javadoc = javadoc; + } +} Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/tags/TagManager.java =================================================================== --- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/tags/TagManager.java 2009-04-18 08:45:28 UTC (rev 1337) +++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/tags/TagManager.java 2009-04-20 12:33:09 UTC (rev 1338) @@ -4,6 +4,8 @@ */ package org.nuiton.guix.tags; +import java.util.logging.Level; +import java.util.logging.Logger; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -381,9 +383,17 @@ } }*/ - if (result != null && !result.equals(originalName)) - result = resolveClassName(result); // check for aliases against the new name as well + //if (result != null && !result.equals(originalName)) + //result = resolveClassName(result); // check for aliases against the new name as well + Class clazz; + try { + clazz = Class.forName(name); + result = clazz.getCanonicalName(); + } catch (ClassNotFoundException ex) { + result = null; + } + return result; }
participants (1)
-
kmorin@users.labs.libre-entreprise.org