You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2005/11/21 20:01:50 UTC

svn commit: r347954 - /incubator/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/TaglibAnnotationVisitor.java

Author: bommel
Date: Mon Nov 21 11:01:19 2005
New Revision: 347954

URL: http://svn.apache.org/viewcvs?rev=347954&view=rev
Log:
added check for duplicated tags

Modified:
    incubator/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/TaglibAnnotationVisitor.java

Modified: incubator/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/TaglibAnnotationVisitor.java
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/TaglibAnnotationVisitor.java?rev=347954&r1=347953&r2=347954&view=diff
==============================================================================
--- incubator/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/TaglibAnnotationVisitor.java (original)
+++ incubator/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/TaglibAnnotationVisitor.java Mon Nov 21 11:01:19 2005
@@ -15,26 +15,28 @@
  */
 package org.apache.myfaces.tobago.apt;
 
-import org.apache.myfaces.tobago.apt.annotation.BodyContent;
-import org.apache.myfaces.tobago.apt.annotation.BodyContentDescription;
-import org.apache.myfaces.tobago.apt.annotation.Tag;
-import org.apache.myfaces.tobago.apt.annotation.TagAttribute;
-import org.apache.myfaces.tobago.apt.annotation.Taglib;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
 import com.sun.mirror.declaration.ClassDeclaration;
 import com.sun.mirror.declaration.Declaration;
 import com.sun.mirror.declaration.InterfaceDeclaration;
 import com.sun.mirror.declaration.MethodDeclaration;
 import com.sun.mirror.declaration.PackageDeclaration;
 import com.sun.mirror.type.InterfaceType;
-import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import org.apache.myfaces.tobago.apt.annotation.BodyContent;
+import org.apache.myfaces.tobago.apt.annotation.BodyContentDescription;
+import org.apache.myfaces.tobago.apt.annotation.Tag;
+import org.apache.myfaces.tobago.apt.annotation.TagAttribute;
+import org.apache.myfaces.tobago.apt.annotation.Taglib;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
-import java.util.ArrayList;
+import java.util.Set;
 
 /**
  * Created: Mar 22, 2005 8:18:35 PM
@@ -76,23 +78,21 @@
       if (description != null) {
         addLeafCDATAElement(description, "description", taglib, document);
       }
-      // TODO iterator
-      if (taglibAnnotation.listener().length > 0) {
+      for (String listenerClass : taglibAnnotation.listener()) {
         Element listener = document.createElement("listener");
-        String listenerClass = taglibAnnotation.listener()[0];
         // TODO check listenerClass implements ServletContextListener !!
         addLeafTextElement(listenerClass, "listener-class", listener, document);
         taglib.appendChild(listener);
       }
-
+      Set<String> tagSet = new HashSet<String>();
       for (ClassDeclaration decl : collectedClassDeclations) {
         if (decl.getPackage().equals(packageDeclaration)) {
-          appendTag(decl, taglib, document);
+          appendTag(decl, taglib, tagSet, document);
         }
       }
       for (InterfaceDeclaration decl : collectedInterfaceDeclations) {
         if (decl.getPackage().equals(packageDeclaration)) {
-          appendTag(decl, taglib, document);
+          appendTag(decl, taglib, tagSet, document);
         }
       }
       document.appendChild(taglib);
@@ -113,17 +113,19 @@
     parent.appendChild(element);
   }
 
-  protected void appendTag(ClassDeclaration decl, Element parent, Document document) {
+  protected void appendTag(ClassDeclaration decl, Element parent, Set<String> tagSet, Document document) {
     Tag annotationTag = decl.getAnnotation(Tag.class);
+    checkDuplicates(annotationTag, tagSet);
     String className = decl.getQualifiedName();
     Element tag = createTag(decl, annotationTag, className, document);
     addAttributes(decl, tag, document);
     parent.appendChild(tag);
   }
 
-  protected void appendTag(InterfaceDeclaration decl, Element parent, Document document) {
+  protected void appendTag(InterfaceDeclaration decl, Element parent, Set<String> tagSet, Document document) {
     Tag annotationTag = decl.getAnnotation(Tag.class);
     if (annotationTag != null) {
+      checkDuplicates(annotationTag, tagSet);
       // TODO configure replacement
 
       String className =
@@ -158,6 +160,14 @@
     addLeafTextElement(bodyContent.toString(), "body-content", tagElement, document);
     addDescription(decl, tagElement, document);
     return tagElement;
+  }
+
+  private void checkDuplicates(Tag annotationTag, Set<String> tagSet) {
+    if (tagSet.contains(annotationTag.name())) {
+      throw new IllegalArgumentException("tag with name " + annotationTag.name() + " already defined!");
+    } else {
+      tagSet.add(annotationTag.name());
+    }
   }
 
   protected void addDescription(Declaration decl, Element element, Document document) {