]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add test for $entry and make it ignore some false positives (#8699)
authorLeif Åstrand <leif@vaadin.com>
Wed, 25 Apr 2012 07:14:56 +0000 (07:14 +0000)
committerLeif Åstrand <leif@vaadin.com>
Wed, 25 Apr 2012 07:14:56 +0000 (07:14 +0000)
svn changeset:23626/svn branch:6.8

src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java
src/com/vaadin/terminal/gwt/client/CSSRule.java
src/com/vaadin/terminal/gwt/client/ComponentDetailMap.java
src/com/vaadin/terminal/gwt/client/ComputedStyle.java
src/com/vaadin/terminal/gwt/client/HistoryImplIEVaadin.java
src/com/vaadin/terminal/gwt/client/ui/VView.java
tests/server-side/com/vaadin/tests/server/SourceFileChecker.java

index a60fb808a1cc7785320748ddf94d553e062ba138..21ecfe277690da591c0370fd5c990c7d633e9de1 100644 (file)
@@ -270,6 +270,7 @@ public class ApplicationConfiguration implements EntryPoint {
          var j;
          for(j in $wnd.vaadin.vaadinConfigurations) {
              if(!$wnd.vaadin.vaadinConfigurations[j].initialized) {
+                 // $entry not needed as function is not exported
                  list.@java.util.Collection::add(Ljava/lang/Object;)(j);
              }
          }
index 4d9196c8d6e25b9def4b622084eb5e3036aec36e..c36b0611e87d7979e8cea1c9f5250578fc185d57 100644 (file)
@@ -33,6 +33,7 @@ public class CSSRule {
     for(var i = 0; i < sheets.length; i++) {
     var sheet = sheets[i];
     if(sheet.href && sheet.href.indexOf("VAADIN/themes")>-1) {
+    // $entry not needed as function is not exported
     this.@com.vaadin.terminal.gwt.client.CSSRule::rules = @com.vaadin.terminal.gwt.client.CSSRule::searchForRule(Lcom/google/gwt/core/client/JavaScriptObject;Ljava/lang/String;Z)(sheet, selector, deep);
     return;
     }
@@ -58,6 +59,7 @@ public class CSSRule {
     // IE handles imported sheet differently
     if(deep && sheet.imports && sheet.imports.length > 0) {
     for(var i=0; i < sheet.imports.length; i++) {
+    // $entry not needed as function is not exported
     var imports = @com.vaadin.terminal.gwt.client.CSSRule::searchForRule(Lcom/google/gwt/core/client/JavaScriptObject;Ljava/lang/String;Z)(sheet.imports[i], selector, deep);
     allMatches.concat(imports);
     }
@@ -83,6 +85,7 @@ public class CSSRule {
     }
     } else if(deep && r.type == 3) {
     // Search @import stylesheet
+    // $entry not needed as function is not exported
     var imports = @com.vaadin.terminal.gwt.client.CSSRule::searchForRule(Lcom/google/gwt/core/client/JavaScriptObject;Ljava/lang/String;Z)(r.styleSheet, selector, deep);
     allMatches = allMatches.concat(imports);
     }
@@ -102,6 +105,7 @@ public class CSSRule {
     /*-{
     var j = this.@com.vaadin.terminal.gwt.client.CSSRule::rules.length;
     for(var i=0; i<j; i++) {
+    // $entry not needed as function is not exported
     var value = this.@com.vaadin.terminal.gwt.client.CSSRule::rules[i].style[propertyName];
     if(value)
     return value;
index 3405d838a727705304fbedef1217a71728b59355..dfbcf9d38b72710a936126badb903d70792499fd 100644 (file)
@@ -62,6 +62,7 @@ final class ComponentDetailMap extends JavaScriptObject {
     private final native void fillWithValues(Collection<ComponentDetail> list)
     /*-{
         for(var key in this) {
+            // $entry not needed as function is not exported
             list.@java.util.Collection::add(Ljava/lang/Object;)(this[key]);
         }
     }-*/;
index e994e47d63b120e06e40529fc4d1d9ef95c9f673..4db3db2adf718e45aa4296e931ba9f93e6098a3a 100644 (file)
@@ -179,6 +179,7 @@ public class ComputedStyle {
         if (isNaN(number))
             return null;
         else
+            // $entry not needed as function is not exported
             return @java.lang.Integer::valueOf(I)(number);
     }-*/;
 
index 05719593398c9c27442cbd139c3189bfddb71b90..2e55b4d115a6710ea937fd74c6317d2285f7f32a 100644 (file)
@@ -123,6 +123,7 @@ public class HistoryImplIEVaadin extends HistoryImpl {
        // Assume an empty token.
        var token = '';
        // Get the initial token from the url's hash component.
+       // $entry not needed as function is not exported
        var hash = @com.vaadin.terminal.gwt.client.HistoryImplIEVaadin::getLocationHash()();
        if (hash.length > 0) {
          try {
@@ -146,6 +147,7 @@ public class HistoryImplIEVaadin extends HistoryImpl {
 
     protected native void navigateFrame(String token)
     /*-{
+       // $entry not needed as function is not exported
        var escaped = @com.vaadin.terminal.gwt.client.HistoryImplIEVaadin::escapeHtml(Ljava/lang/String;)(token);
        var doc = this.@com.vaadin.terminal.gwt.client.HistoryImplIEVaadin::historyFrame.contentWindow.document;
        doc.open();
@@ -155,6 +157,7 @@ public class HistoryImplIEVaadin extends HistoryImpl {
 
     protected native void updateHash(String token)
     /*-{
+       // $entry not needed as function is not exported
        $wnd.location.hash = this.@com.google.gwt.user.client.impl.HistoryImpl::encodeFragment(Ljava/lang/String;)(token);
      }-*/;
 
@@ -169,6 +172,7 @@ public class HistoryImplIEVaadin extends HistoryImpl {
        var historyImplRef = this;
        var urlChecker = function() {
          $wnd.setTimeout(urlChecker, 250);
+         // $entry not needed as function is not exported
          var hash = @com.vaadin.terminal.gwt.client.HistoryImplIEVaadin::getLocationHash()();
          if (hash.length > 0) {
            var token = '';
index 07ade6a8b1479826a0d6599a732723266ab88a15..c03652f259a85a954c2027a4f0f70cc178518c8c 100644 (file)
@@ -657,6 +657,7 @@ public class VView extends SimplePanel implements Container, ResizeHandler,
     /*-{
          var j;
          for(j in $wnd.vaadin.vaadinConfigurations) {
+            // $entry not needed as function is not exported
             list.@java.util.Collection::add(Ljava/lang/Object;)(j);
          }
      }-*/;
index 453aab5af8e9ad5ee0eb3ecdf0c57447a149d5ed..9906990165d58bce1dc7733b431150e0513ec8be 100644 (file)
@@ -5,6 +5,8 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
@@ -81,6 +83,17 @@ public class SourceFileChecker extends TestCase {
         }
     }
 
+    public void testGwtFilesUsingEntry() {
+        Set<String> ignore = new HashSet<String>(alwaysIgnore);
+        ignore.add(externalJavaFiles);
+        validateFiles(
+                SRC_DIR,
+                new GwtEntryChecker(),
+                ignore,
+                "The following files might export javscript callbacks without $entry:\n{0}",
+                ".java");
+    }
+
     public interface FileValidator {
         void validateFile(File f) throws Exception;
     }
@@ -171,4 +184,33 @@ public class SourceFileChecker extends TestCase {
             }
         }
     }
+
+    class GwtEntryChecker extends FileContentsValidator {
+        // Matches e.g.
+        // @com.vaadin.terminal.gwt.client.HistoryImplIEVaadin::escapeHtml(
+        private final Matcher matcher = Pattern.compile("@[\\w.]+::\\w+\\(")
+                .matcher("");
+
+        @Override
+        protected void validateContents(File f, String contents)
+                throws Exception {
+            matcher.reset(contents);
+            while (matcher.find()) {
+                int start = matcher.start();
+
+                // Search backwards to find index of native block start
+                int nativeBlockStart = contents.lastIndexOf("/*-{", start);
+
+                // Get contents between block start and our match
+                String beforeMatchInBlock = contents.substring(
+                        nativeBlockStart, start);
+
+                // Fail if there's no $entry
+                if (!beforeMatchInBlock.contains("$entry")) {
+                    throw new IllegalArgumentException();
+                }
+            }
+        }
+
+    }
 }