diff options
Diffstat (limited to 'client-compiler/src')
-rw-r--r-- | client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java index 3e863516a5..7500d65443 100644 --- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java +++ b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorInitVisitor.java @@ -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); } } |