]> source.dussan.org Git - vaadin-framework.git/commitdiff
Abort widgetset compile for conflicting @Connect mappings (#9343) 09/109/1
authorLeif Åstrand <leif@vaadin.com>
Wed, 10 Oct 2012 14:48:06 +0000 (17:48 +0300)
committerLeif Åstrand <leif@vaadin.com>
Wed, 10 Oct 2012 14:48:06 +0000 (17:48 +0300)
Change-Id: I07f760501f956a720bdb840d64c293984b9cf948

client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java

index 3e863516a5bef42e1273bd509ee5d23afebd77b4..7500d65443673e136949fe71c1d1d684a5474965 100644 (file)
@@ -4,22 +4,41 @@
 
 package com.vaadin.server.widgetsetutils.metadata;
 
+import java.util.Map;
+
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
+import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.google.gwt.dev.util.collect.HashMap;
 import com.vaadin.shared.ui.Connect;
 
 public class ConnectorInitVisitor extends TypeVisitor {
 
+    private Map<String, JClassType> processedConnections = new HashMap<String, JClassType>();
+
     @Override
     public void visitConnector(TreeLogger logger, JClassType type,
-            ConnectorBundle bundle) {
+            ConnectorBundle bundle) throws UnableToCompleteException {
         Connect connectAnnotation = type.getAnnotation(Connect.class);
         if (connectAnnotation != null) {
             logger.log(Type.INFO, type.getName() + " will be in the "
                     + bundle.getName().replaceAll("^_*", "") + " bundle");
-            bundle.setIdentifier(type, connectAnnotation.value()
-                    .getCanonicalName());
+            String identifier = connectAnnotation.value().getCanonicalName();
+
+            JClassType previousMapping = processedConnections.put(identifier,
+                    type);
+            if (previousMapping != null) {
+                logger.log(
+                        Type.ERROR,
+                        "Multiple @Connect mappings detected for " + identifier
+                                + ": " + type.getQualifiedSourceName()
+                                + " and "
+                                + previousMapping.getQualifiedSourceName());
+                throw new UnableToCompleteException();
+            }
+
+            bundle.setIdentifier(type, identifier);
             bundle.setNeedsGwtConstructor(type);
         }
     }