]> source.dussan.org Git - vaadin-framework.git/commitdiff
Eliminate scanning for accept criteria by reversed annotation (#8641)
authorHenri Sara <hesara@vaadin.com>
Wed, 20 Jun 2012 13:27:32 +0000 (16:27 +0300)
committerHenri Sara <hesara@vaadin.com>
Wed, 20 Jun 2012 14:11:22 +0000 (17:11 +0300)
The new annotation is called AcceptCriterion and is on the client side
class, pointing to the server side implementation.

This change also addresses #5956 (avoid loading classes when scanning -
no more scanning for criteria) and #6750 (logging).

29 files changed:
src/com/vaadin/event/dd/acceptcriteria/AcceptAll.java
src/com/vaadin/event/dd/acceptcriteria/And.java
src/com/vaadin/event/dd/acceptcriteria/ClientCriterion.java [deleted file]
src/com/vaadin/event/dd/acceptcriteria/ContainsDataFlavor.java
src/com/vaadin/event/dd/acceptcriteria/Not.java
src/com/vaadin/event/dd/acceptcriteria/Or.java
src/com/vaadin/event/dd/acceptcriteria/ServerSideCriterion.java
src/com/vaadin/event/dd/acceptcriteria/SourceIs.java
src/com/vaadin/event/dd/acceptcriteria/SourceIsTarget.java
src/com/vaadin/event/dd/acceptcriteria/TargetDetailIs.java
src/com/vaadin/terminal/gwt/client/ui/dd/AcceptCriterion.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java
src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java
src/com/vaadin/terminal/gwt/client/ui/dd/VContainsDataFlavor.java
src/com/vaadin/terminal/gwt/client/ui/dd/VDragSourceIs.java
src/com/vaadin/terminal/gwt/client/ui/dd/VIsOverId.java
src/com/vaadin/terminal/gwt/client/ui/dd/VItemIdIs.java
src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java
src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java
src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java
src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java
src/com/vaadin/terminal/gwt/client/ui/dd/VSourceIsTarget.java
src/com/vaadin/terminal/gwt/client/ui/dd/VTargetDetailIs.java
src/com/vaadin/terminal/gwt/client/ui/dd/VTargetInSubtree.java
src/com/vaadin/terminal/gwt/widgetsetutils/AcceptCriteriaFactoryGenerator.java
src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java
src/com/vaadin/ui/AbstractSelect.java
src/com/vaadin/ui/Table.java
src/com/vaadin/ui/Tree.java

index 87193e8b3e5c4da6f6925daafd41314dd5b9560f..52ffab9263748890a65ce42dcc999f330e4341aa 100644 (file)
@@ -7,7 +7,6 @@
 package com.vaadin.event.dd.acceptcriteria;
 
 import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.terminal.gwt.client.ui.dd.VAcceptAll;
 
 /**
  * Criterion that accepts all drops anywhere on the component.
@@ -18,7 +17,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VAcceptAll;
  * @since 6.3
  * 
  */
-@ClientCriterion(VAcceptAll.class)
 public final class AcceptAll extends ClientSideCriterion {
 
     private static final long serialVersionUID = 7406683402153141461L;
index 89c8cb377bfa02aa8f34b5d9e253107397a61cd2..a0340a9cdb923a730a11a4ee2af444e032e5886a 100644 (file)
@@ -19,7 +19,6 @@ import com.vaadin.terminal.PaintTarget;
  * @since 6.3
  * 
  */
-@ClientCriterion(com.vaadin.terminal.gwt.client.ui.dd.VAnd.class)
 public class And extends ClientSideCriterion {
 
     private static final long serialVersionUID = -5242574480825471748L;
diff --git a/src/com/vaadin/event/dd/acceptcriteria/ClientCriterion.java b/src/com/vaadin/event/dd/acceptcriteria/ClientCriterion.java
deleted file mode 100644 (file)
index 8b64106..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.event.dd.acceptcriteria;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterion;
-
-/**
- * An annotation type used to point the client side counterpart for server side
- * a {@link AcceptCriterion} class.
- * <p>
- * Annotations are used at GWT compilation phase, so remember to rebuild your
- * widgetset if you do changes for {@link ClientCriterion} mappings.
- * 
- * @since 6.3
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface ClientCriterion {
-    /**
-     * @return the client side counterpart for the annotated criterion
-     */
-    Class<? extends VAcceptCriterion> value();
-}
index 298a50a1d56fa3e6a0dab893e33f6f8ae183a1c3..7eb04d964736b5454ab1a5d3947dd586f46ad054 100644 (file)
@@ -10,7 +10,6 @@ import com.vaadin.event.Transferable;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.dd.VContainsDataFlavor;
 
 /**
  * A Criterion that checks whether {@link Transferable} contains given data
@@ -19,7 +18,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VContainsDataFlavor;
  * 
  * @since 6.3
  */
-@ClientCriterion(VContainsDataFlavor.class)
 public class ContainsDataFlavor extends ClientSideCriterion {
 
     private String dataFlavorId;
index 774dcc642e6efa32c7175075554ef4846c2e2f67..85ff7e9bc9d37b931128fbbbd84a34c6dc11bb18 100644 (file)
@@ -9,7 +9,6 @@ package com.vaadin.event.dd.acceptcriteria;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.dd.VNot;
 
 /**
  * Criterion that wraps another criterion and inverts its return value.
@@ -17,7 +16,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VNot;
  * @since 6.3
  * 
  */
-@ClientCriterion(VNot.class)
 public class Not extends ClientSideCriterion {
 
     private static final long serialVersionUID = 1131422338558613244L;
index 2e7cdf45a3852b8617efdbe76309fa3ced11c841..077e9114d8d9e013423214f616705f97657065a0 100644 (file)
@@ -9,7 +9,6 @@ package com.vaadin.event.dd.acceptcriteria;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.dd.VOr;
 
 /**
  * A compound criterion that accepts the drag if any of its criterion accepts
@@ -20,7 +19,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VOr;
  * @since 6.3
  * 
  */
-@ClientCriterion(VOr.class)
 public class Or extends ClientSideCriterion {
     private static final long serialVersionUID = 1L;
     private AcceptCriterion criteria[];
index b3f4702c512eed3ee7e885abcc63b7fcafded057..77840bc94f1aef0484b0f45c48abb0fd92b3400f 100644 (file)
@@ -8,7 +8,6 @@ import java.io.Serializable;
 import com.vaadin.event.Transferable;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.dd.VServerAccept;
 
 /**
  * Parent class for criteria which are verified on the server side during a drag
@@ -27,7 +26,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VServerAccept;
  * 
  * @since 6.3
  */
-@ClientCriterion(VServerAccept.class)
 public abstract class ServerSideCriterion implements Serializable,
         AcceptCriterion {
 
index 62bf64f76cbbced94d034c549898a7513823ba97..d7c47dc915eeedecdab14ba4288ba7c621e003fe 100644 (file)
@@ -13,7 +13,6 @@ import com.vaadin.event.TransferableImpl;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.dd.VDragSourceIs;
 import com.vaadin.ui.Component;
 
 /**
@@ -23,7 +22,6 @@ import com.vaadin.ui.Component;
  * @since 6.3
  */
 @SuppressWarnings("serial")
-@ClientCriterion(VDragSourceIs.class)
 public class SourceIs extends ClientSideCriterion {
 
     private Component[] components;
index 83038091407633abb621c37ce7a0d7c5e3f33757..454159b3da26aeeef63daec59ca9fba56c5a3781 100644 (file)
@@ -10,7 +10,6 @@ import com.vaadin.event.Transferable;
 import com.vaadin.event.TransferableImpl;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.event.dd.DropTarget;
-import com.vaadin.terminal.gwt.client.ui.dd.VSourceIsTarget;
 import com.vaadin.ui.Component;
 import com.vaadin.ui.Table;
 import com.vaadin.ui.Tree;
@@ -26,7 +25,6 @@ import com.vaadin.ui.Tree;
  * @since 6.3
  * 
  */
-@ClientCriterion(VSourceIsTarget.class)
 public class SourceIsTarget extends ClientSideCriterion {
 
     private static final long serialVersionUID = -451399314705532584L;
index 25371938d2a32851a2f1011c36639e99b2c01cd2..641fddc3eaa90a85f9e4e5e3bb833ddb15fa9064 100644 (file)
@@ -10,7 +10,6 @@ import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.event.dd.TargetDetails;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.dd.VTargetDetailIs;
 
 /**
  * Criterion for checking if drop target details contains the specific property
@@ -21,7 +20,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VTargetDetailIs;
  *        TODO add support for other basic data types that we support in UIDL.
  * 
  */
-@ClientCriterion(VTargetDetailIs.class)
 public class TargetDetailIs extends ClientSideCriterion {
 
     private static final long serialVersionUID = 763165450054331246L;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/AcceptCriterion.java b/src/com/vaadin/terminal/gwt/client/ui/dd/AcceptCriterion.java
new file mode 100644 (file)
index 0000000..32dac10
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * An annotation type used to point the server side counterpart for client side
+ * a {@link VAcceptCriterion} class.
+ * <p>
+ * Annotations are used at GWT compilation phase, so remember to rebuild your
+ * widgetset if you do changes for {@link AcceptCriterion} mappings.
+ * 
+ * Prior to Vaadin 7, the mapping was done with an annotation on server side
+ * classes.
+ * 
+ * @since 7.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface AcceptCriterion {
+    /**
+     * @return the fully qualified class name of the server side counterpart for
+     *         the annotated criterion
+     */
+    String value();
+
+}
index 51782c002de8943d98f37c0e3d7054e43cf5935c..07e931fb02e716a22a4f78d22a2dabfe2bb05b99 100644 (file)
@@ -8,6 +8,7 @@ package com.vaadin.terminal.gwt.client.ui.dd;
 
 import com.vaadin.terminal.gwt.client.UIDL;
 
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.AcceptAll")
 final public class VAcceptAll extends VAcceptCriterion {
 
     @Override
index 65c67e6b8a5f1d33b5a5d24525c8f198c16c4161..727c30075cc5934d78c6c4d58dc41ccca063d392 100644 (file)
@@ -8,6 +8,7 @@ package com.vaadin.terminal.gwt.client.ui.dd;
 
 import com.vaadin.terminal.gwt.client.UIDL;
 
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.And")
 final public class VAnd extends VAcceptCriterion implements VAcceptCallback {
     private boolean b1;
 
index 4a95034d4ae5d0340e0ebe0ee9f9cbf0b13023b0..57860681744b12320b90693736533bcd4268dab0 100644 (file)
@@ -8,6 +8,7 @@ package com.vaadin.terminal.gwt.client.ui.dd;
 
 import com.vaadin.terminal.gwt.client.UIDL;
 
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.ContainsDataFlavor")
 final public class VContainsDataFlavor extends VAcceptCriterion {
 
     @Override
index aabbf58b24b941b78fdf2fbdf73b4941d7158ccc..58550af918a0d298307fbb060ad9bb33b3044a59 100644 (file)
@@ -12,6 +12,7 @@ import com.vaadin.terminal.gwt.client.UIDL;
  * 
  * @since 6.3
  */
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.SourceIs")
 final public class VDragSourceIs extends VAcceptCriterion {
 
     @Override
index 90e2b033c97e6ea908f601c0af90c98f879cfc08..3fc54e6fd33592cf1e75255cb9ed61d74b0e302d 100644 (file)
@@ -10,6 +10,7 @@ import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.ConnectorMap;
 import com.vaadin.terminal.gwt.client.UIDL;
 
+@AcceptCriterion("com.vaadin.ui.AbstractSelect.TargetItemIs")
 final public class VIsOverId extends VAcceptCriterion {
 
     @Override
index eb55c1a91cafbdfacdf1754d74febca019d386ac..5f1fe978b5d51fb3d5162a810b96831ee3a7f09a 100644 (file)
@@ -9,6 +9,7 @@ package com.vaadin.terminal.gwt.client.ui.dd;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.UIDL;
 
+@AcceptCriterion("com.vaadin.ui.AbstractSelect.AcceptItem")
 final public class VItemIdIs extends VAcceptCriterion {
 
     @Override
index b824c1cb65bbd2441567cb17bb3e1852e591774a..e972371b9feb801d96300373e4e27a4ebfa86da2 100644 (file)
@@ -13,11 +13,23 @@ import com.vaadin.terminal.gwt.client.UIDL;
 /**
  * 
  */
-final public class VLazyInitItemIdentifiers extends VAcceptCriterion {
+public class VLazyInitItemIdentifiers extends VAcceptCriterion {
     private boolean loaded = false;
     private HashSet<String> hashSet;
     private VDragEvent lastDragEvent;
 
+    @AcceptCriterion("com.vaadin.ui.Table.TableDropCriterion")
+    final public static class VTableLazyInitItemIdentifiers extends
+            VLazyInitItemIdentifiers {
+        // all logic in superclass
+    }
+
+    @AcceptCriterion("com.vaadin.ui.Tree.TreeDropCriterion")
+    final public static class VTreeLazyInitItemIdentifiers extends
+            VLazyInitItemIdentifiers {
+        // all logic in superclass
+    }
+
     @Override
     public void accept(final VDragEvent drag, UIDL configuration,
             final VAcceptCallback callback) {
index f4ba8684972d56de2c959647fb9a3b42d95eeb15..e91ad6149af9f7fb7ddfc34beae867f8089b1629 100644 (file)
@@ -13,6 +13,7 @@ import com.vaadin.terminal.gwt.client.VConsole;
  * TODO implementation could now be simplified/optimized
  * 
  */
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.Not")
 final public class VNot extends VAcceptCriterion {
     private boolean b1;
     private VAcceptCriterion crit1;
index e47447b7fca25123b89a68143b550b0f6f6127a5..36643265686c8324915a6cd38c748419d8b599bf 100644 (file)
@@ -11,6 +11,7 @@ import com.vaadin.terminal.gwt.client.UIDL;
 /**
  * 
  */
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.Or")
 final public class VOr extends VAcceptCriterion implements VAcceptCallback {
     private boolean accepted;
 
index bccb6656aab4daf0e8b0b2a104dee6ed45d6540e..e679b643694adbb09df4f8ae66703ec3ce508fd5 100644 (file)
@@ -8,6 +8,7 @@ package com.vaadin.terminal.gwt.client.ui.dd;
 
 import com.vaadin.terminal.gwt.client.UIDL;
 
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.ServerSideCriterion")
 final public class VServerAccept extends VAcceptCriterion {
     @Override
     public void accept(final VDragEvent drag, UIDL configuration,
index 430b422b344494f286d9557cbe8d04d255f45097..9bbabe9d29a633a927895983454067a9dc38b19d 100644 (file)
@@ -9,6 +9,7 @@ package com.vaadin.terminal.gwt.client.ui.dd;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.UIDL;
 
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.SourceIsTarget")
 final public class VSourceIsTarget extends VAcceptCriterion {
 
     @Override
index 713a0d66468e615873f4373587bf137c69a93264..7d92359f7dbc543c21b7dd2c8d9710134db56be0 100644 (file)
@@ -8,6 +8,7 @@ package com.vaadin.terminal.gwt.client.ui.dd;
 
 import com.vaadin.terminal.gwt.client.UIDL;
 
+@AcceptCriterion("com.vaadin.event.dd.acceptcriteria.TargetDetailIs")
 final public class VTargetDetailIs extends VAcceptCriterion {
 
     @Override
index f69fa8529054200b6e0cd3743abded29b994c8be..3db44f3162b181642c1bc6c95dcd1decbeafda32 100644 (file)
@@ -11,6 +11,7 @@ import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.tree.VTree;
 import com.vaadin.terminal.gwt.client.ui.tree.VTree.TreeNode;
 
+@AcceptCriterion("com.vaadin.ui.Tree.TargetInSubtree")
 final public class VTargetInSubtree extends VAcceptCriterion {
 
     @Override
index d8d3c23e0c3c713cba9358eb2b3c4e14a348926b..459b6ddd3034d6ea0f66a8aac7053ded4b16c390 100644 (file)
@@ -4,7 +4,6 @@
 package com.vaadin.terminal.gwt.widgetsetutils;
 
 import java.io.PrintWriter;
-import java.util.Collection;
 import java.util.Date;
 
 import com.google.gwt.core.ext.Generator;
@@ -16,14 +15,13 @@ import com.google.gwt.core.ext.typeinfo.JClassType;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
 import com.google.gwt.user.rebind.SourceWriter;
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.ClientCriterion;
+import com.vaadin.terminal.gwt.client.ui.dd.AcceptCriterion;
 import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterion;
 import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterionFactory;
 
 /**
  * GWT generator to build {@link VAcceptCriterionFactory} implementation
- * dynamically based on {@link ClientCriterion} annotations available in
+ * dynamically based on {@link AcceptCriterion} annotations available in
  * classpath.
  * 
  */
@@ -102,21 +100,23 @@ public class AcceptCriteriaFactoryGenerator extends Generator {
 
         sourceWriter.println("name = name.intern();");
 
-        Collection<Class<? extends AcceptCriterion>> clientSideVerifiableCriterion = ClassPathExplorer
-                .getCriterion();
-
-        for (Class<? extends AcceptCriterion> class1 : clientSideVerifiableCriterion) {
-            logger.log(Type.INFO,
-                    "creating mapping for " + class1.getCanonicalName());
-            String canonicalName = class1.getCanonicalName();
-            Class<? extends VAcceptCriterion> clientClass = class1
-                    .getAnnotation(ClientCriterion.class).value();
-            sourceWriter.print("if (\"");
-            sourceWriter.print(canonicalName);
-            sourceWriter.print("\" == name) return GWT.create(");
-            sourceWriter.print(clientClass.getCanonicalName());
-            sourceWriter.println(".class );");
-            sourceWriter.print("else ");
+        JClassType criteriaType = context.getTypeOracle().findType(
+                VAcceptCriterion.class.getName());
+        for (JClassType clientClass : criteriaType.getSubtypes()) {
+            AcceptCriterion annotation = clientClass
+                    .getAnnotation(AcceptCriterion.class);
+            if (annotation != null) {
+                String clientClassName = clientClass.getQualifiedSourceName();
+                String serverClassName = clientClass.getAnnotation(
+                        AcceptCriterion.class).value();
+                logger.log(Type.INFO, "creating mapping for " + serverClassName);
+                sourceWriter.print("if (\"");
+                sourceWriter.print(serverClassName);
+                sourceWriter.print("\" == name) return GWT.create(");
+                sourceWriter.print(clientClassName);
+                sourceWriter.println(".class );");
+                sourceWriter.print("else ");
+            }
         }
 
         sourceWriter.println("return null;");
index 5107d9171a86afc3f097f73cfccb27141011d1bf..1c5b7364922327a380e40ea4686e90cf7c4f2b9b 100644 (file)
@@ -6,32 +6,23 @@ package com.vaadin.terminal.gwt.widgetsetutils;
 import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintStream;
 import java.net.JarURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.jar.Attributes;
-import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
-import com.vaadin.event.dd.acceptcriteria.ClientCriterion;
-
 /**
  * Utility class to collect widgetset related information from classpath.
  * Utility will seek all directories from classpaths, and jar files having
@@ -87,45 +78,6 @@ public class ClassPathExplorer {
     private ClassPathExplorer() {
     }
 
-    /**
-     * Finds server side widgets with ClientWidget annotation on the class path
-     * (entries that can contain widgets/widgetsets - see
-     * getRawClasspathEntries()).
-     * 
-     * As a side effect, also accept criteria are searched under the same class
-     * path entries and added into the acceptCriterion collection.
-     */
-    public static void findAcceptCriteria() {
-        final Logger logger = getLogger();
-        logger.info("Searching for accept criteria..");
-        long start = System.currentTimeMillis();
-        Set<String> keySet = classpathLocations.keySet();
-        for (String url : keySet) {
-            logger.fine("Searching for accept criteria in "
-                    + classpathLocations.get(url));
-            searchForPaintables(classpathLocations.get(url), url);
-        }
-        long end = System.currentTimeMillis();
-
-        logger.info("Search took " + (end - start) + "ms");
-
-    }
-
-    /**
-     * Finds all accept criteria having client side counterparts (classes with
-     * the {@link ClientCriterion} annotation).
-     * 
-     * @return Collection of AcceptCriterion classes
-     */
-    public static Collection<Class<? extends AcceptCriterion>> getCriterion() {
-        if (acceptCriterion.isEmpty()) {
-            // accept criterion are searched as a side effect, normally after
-            // paintable detection
-            findAcceptCriteria();
-        }
-        return acceptCriterion;
-    }
-
     /**
      * Finds the names and locations of widgetsets available on the class path.
      * 
@@ -443,152 +395,6 @@ public class ClassPathExplorer {
 
     }
 
-    /**
-     * Searches for all paintable classes and accept criteria under a location
-     * based on {@link ClientCriterion} annotations.
-     * 
-     * Note that client criteria are updated directly to the
-     * {@link #acceptCriterion} field, whereas paintables are added to the
-     * paintables map given as a parameter.
-     * 
-     * @param location
-     * @param locationString
-     */
-    private final static void searchForPaintables(URL location,
-            String locationString) {
-
-        // Get a File object for the package
-        File directory = new File(location.getFile());
-
-        if (directory.exists() && !directory.isHidden()) {
-            // Get the list of the files contained in the directory
-            String[] files = directory.list();
-            for (int i = 0; i < files.length; i++) {
-                // we are only interested in .class files
-                if (files[i].endsWith(".class")) {
-                    // remove the .class extension
-                    String classname = files[i].substring(0,
-                            files[i].length() - 6);
-                    String packageName = locationString
-                            .substring(locationString.lastIndexOf("/") + 1);
-                    classname = packageName + "." + classname;
-                    tryToAdd(classname);
-                }
-            }
-        } else {
-            try {
-                // check files in jar file, entries will list all directories
-                // and files in jar
-
-                URLConnection openConnection = location.openConnection();
-
-                if (openConnection instanceof JarURLConnection) {
-                    JarURLConnection conn = (JarURLConnection) openConnection;
-
-                    JarFile jarFile = conn.getJarFile();
-
-                    // Only scan for paintables in Vaadin add-ons
-                    if (!isVaadinAddon(jarFile)) {
-                        return;
-                    }
-
-                    Enumeration<JarEntry> e = jarFile.entries();
-                    while (e.hasMoreElements()) {
-                        JarEntry entry = e.nextElement();
-                        String entryname = entry.getName();
-                        if (!entry.isDirectory()
-                                && entryname.endsWith(".class")) {
-                            String classname = entryname.substring(0,
-                                    entryname.length() - 6);
-                            if (classname.startsWith("/")) {
-                                classname = classname.substring(1);
-                            }
-                            classname = classname.replace('/', '.');
-                            tryToAdd(classname);
-                        }
-                    }
-                }
-            } catch (IOException e) {
-                getLogger().warning(e.toString());
-            }
-        }
-
-    }
-
-    /**
-     * A print stream that ignores all output.
-     * 
-     * This is used to hide error messages from static initializers of classes
-     * being inspected.
-     */
-    private static PrintStream devnull = new PrintStream(new OutputStream() {
-        @Override
-        public void write(int b) throws IOException {
-            // NOP
-        }
-    });
-
-    /**
-     * Collection of all {@link AcceptCriterion} classes, updated as a side
-     * effect of {@link #searchForPaintables(URL, String, Collection)} based on
-     * {@link ClientCriterion} annotations.
-     */
-    private static Set<Class<? extends AcceptCriterion>> acceptCriterion = new HashSet<Class<? extends AcceptCriterion>>();
-
-    /**
-     * Checks a class for the {@link ClientCriterion} annotations, and adds it
-     * to the appropriate collection.
-     * 
-     * @param fullclassName
-     */
-    @SuppressWarnings("unchecked")
-    private static void tryToAdd(final String fullclassName) {
-        PrintStream out = System.out;
-        PrintStream err = System.err;
-        Throwable errorToShow = null;
-        Level logLevel = null;
-        try {
-            System.setErr(devnull);
-            System.setOut(devnull);
-
-            Class<?> c = Class.forName(fullclassName);
-
-            if (c.getAnnotation(ClientCriterion.class) != null) {
-                acceptCriterion.add((Class<? extends AcceptCriterion>) c);
-            }
-        } catch (UnsupportedClassVersionError e) {
-            // Inform the user about this as the class might contain a Paintable
-            // Typically happens when using an add-on that is compiled using a
-            // newer Java version.
-            logLevel = Level.INFO;
-            errorToShow = e;
-        } catch (ClassNotFoundException e) {
-            // Don't show to avoid flooding the user with irrelevant messages
-            logLevel = Level.FINE;
-            errorToShow = e;
-        } catch (LinkageError e) {
-            // Don't show to avoid flooding the user with irrelevant messages
-            logLevel = Level.FINE;
-            errorToShow = e;
-        } catch (Exception e) {
-            // Don't show to avoid flooding the user with irrelevant messages
-            logLevel = Level.FINE;
-            errorToShow = e;
-        } finally {
-            System.setErr(err);
-            System.setOut(out);
-        }
-
-        // Must be done here after stderr and stdout have been reset.
-        if (errorToShow != null && logLevel != null) {
-            getLogger().log(
-                    logLevel,
-                    "Failed to load class " + fullclassName + ". "
-                            + errorToShow.getClass().getName() + ": "
-                            + errorToShow.getMessage());
-        }
-    }
-
     /**
      * Find and return the default source directory where to create new
      * widgetsets.
@@ -634,37 +440,10 @@ public class ClassPathExplorer {
         return null;
     }
 
-    /**
-     * Checks if the given jarFile is a Vaadin add-on.
-     * 
-     * @param jarFile
-     * @return true if the file is an add-on, false otherwise
-     * @throws IOException
-     */
-    private static boolean isVaadinAddon(JarFile jarFile) throws IOException {
-        Manifest manifest = jarFile.getManifest();
-        if (manifest == null) {
-            return false;
-        }
-        Attributes mainAttributes = manifest.getMainAttributes();
-        if (mainAttributes == null) {
-            return false;
-        }
-
-        return (mainAttributes.getValue(VAADIN_ADDON_VERSION_ATTRIBUTE) != null);
-    }
-
     /**
      * Test method for helper tool
      */
     public static void main(String[] args) {
-        ClassPathExplorer.findAcceptCriteria();
-        getLogger().info("Found client criteria:");
-        for (Class<? extends AcceptCriterion> cls : acceptCriterion) {
-            getLogger().info(cls.getCanonicalName());
-        }
-
-        getLogger().info("");
         getLogger().info("Searching available widgetsets...");
 
         Map<String, URL> availableWidgetSets = ClassPathExplorer
index e586810b2d245b51de08c5199730fe20f5f7cb15..6a927251afd46358be58a03ab0014fd07707e584 100644 (file)
@@ -24,7 +24,6 @@ import com.vaadin.event.Transferable;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.event.dd.DropTarget;
 import com.vaadin.event.dd.TargetDetailsImpl;
-import com.vaadin.event.dd.acceptcriteria.ClientCriterion;
 import com.vaadin.event.dd.acceptcriteria.ClientSideCriterion;
 import com.vaadin.event.dd.acceptcriteria.ContainsDataFlavor;
 import com.vaadin.event.dd.acceptcriteria.TargetDetailIs;
@@ -33,8 +32,6 @@ import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
 import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.ui.dd.VIsOverId;
-import com.vaadin.terminal.gwt.client.ui.dd.VItemIdIs;
 import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
 import com.vaadin.ui.AbstractSelect.ItemCaptionMode;
 
@@ -1800,7 +1797,6 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
      * 
      * @since 6.3
      */
-    @ClientCriterion(VIsOverId.class)
     public static class TargetItemIs extends AbstractItemSetCriterion {
 
         /**
@@ -1867,7 +1863,6 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
      * 
      * @since 6.3
      */
-    @ClientCriterion(VItemIdIs.class)
     public static class AcceptItem extends AbstractItemSetCriterion {
 
         /**
index 45eed33c526d2ddc7c31d2f1106502533a15873d..5d4f91970483dbe28802a943ee2f88fa3559568f 100644 (file)
@@ -39,7 +39,6 @@ import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.event.dd.DragSource;
 import com.vaadin.event.dd.DropHandler;
 import com.vaadin.event.dd.DropTarget;
-import com.vaadin.event.dd.acceptcriteria.ClientCriterion;
 import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
 import com.vaadin.terminal.KeyMapper;
 import com.vaadin.terminal.LegacyPaint;
@@ -47,7 +46,6 @@ import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.dd.VLazyInitItemIdentifiers;
 import com.vaadin.terminal.gwt.client.ui.table.VScrollTable;
 
 /**
@@ -4658,7 +4656,6 @@ public class Table extends AbstractSelect implements Action.Container,
      * initialized from server and no subsequent requests requests are needed
      * during that drag and drop operation.
      */
-    @ClientCriterion(VLazyInitItemIdentifiers.class)
     public static abstract class TableDropCriterion extends ServerSideCriterion {
 
         private Table table;
index db738fee58756b04c801b57ffca786c3f3ad6260..dacb3a20271bfcdfd0cf9bbe30b203c75fa9718e 100644 (file)
@@ -34,7 +34,6 @@ import com.vaadin.event.dd.DragSource;
 import com.vaadin.event.dd.DropHandler;
 import com.vaadin.event.dd.DropTarget;
 import com.vaadin.event.dd.TargetDetails;
-import com.vaadin.event.dd.acceptcriteria.ClientCriterion;
 import com.vaadin.event.dd.acceptcriteria.ClientSideCriterion;
 import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
 import com.vaadin.event.dd.acceptcriteria.TargetDetailIs;
@@ -43,8 +42,6 @@ import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.dd.VLazyInitItemIdentifiers;
-import com.vaadin.terminal.gwt.client.ui.dd.VTargetInSubtree;
 import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
 import com.vaadin.terminal.gwt.client.ui.tree.TreeConnector;
 import com.vaadin.terminal.gwt.client.ui.tree.VTree;
@@ -1396,7 +1393,6 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
      * initialized from server and no subsequent requests requests are needed
      * during that drag and drop operation.
      */
-    @ClientCriterion(VLazyInitItemIdentifiers.class)
     public static abstract class TreeDropCriterion extends ServerSideCriterion {
 
         private Tree tree;
@@ -1513,7 +1509,6 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
      * <p>
      * The root items is also consider to be valid target.
      */
-    @ClientCriterion(VTargetInSubtree.class)
     public class TargetInSubtree extends ClientSideCriterion {
 
         private Object rootId;