https://bugs.eclipse.org/bugs/show_bug.cgi?id=361818: "Add NLS SDK support for Text Provider Services"
Fix for non float ranking annotations
diff --git a/org.eclipse.scout.nls.sdk.services/src/org/eclipse/scout/nls/sdk/services/model/ws/project/ServiceNlsProjectProvider.java b/org.eclipse.scout.nls.sdk.services/src/org/eclipse/scout/nls/sdk/services/model/ws/project/ServiceNlsProjectProvider.java
index 00248b0..5e43ccb 100644
--- a/org.eclipse.scout.nls.sdk.services/src/org/eclipse/scout/nls/sdk/services/model/ws/project/ServiceNlsProjectProvider.java
+++ b/org.eclipse.scout.nls.sdk.services/src/org/eclipse/scout/nls/sdk/services/model/ws/project/ServiceNlsProjectProvider.java
@@ -12,7 +12,6 @@
 import org.eclipse.core.runtime.IExtension;

 import org.eclipse.jdt.core.IAnnotation;

 import org.eclipse.jdt.core.IJavaProject;

-import org.eclipse.jdt.core.IMemberValuePair;

 import org.eclipse.jdt.core.IType;

 import org.eclipse.jdt.core.JavaModelException;

 import org.eclipse.pde.internal.core.PDECore;

@@ -24,6 +23,7 @@
 import org.eclipse.scout.sdk.RuntimeClasses;

 import org.eclipse.scout.sdk.ScoutSdkCore;

 import org.eclipse.scout.sdk.internal.workspace.IScoutBundleConstantes;

+import org.eclipse.scout.sdk.util.jdt.JdtUtility;

 import org.eclipse.scout.sdk.util.log.ScoutStatus;

 import org.eclipse.scout.sdk.util.type.TypeUtility;

 import org.eclipse.scout.sdk.util.typecache.TypeCacheAccessor;

@@ -46,7 +46,7 @@
 

   /**

    * Gets the registered (in plugin.xml) text provider service types ordered by priority.

-   * 

+   *

    * @param returnDocServices

    *          If true, only Docs text provider services (implementing marker interface

    *          <code>IDocumentationTextProviderService</code>) are returned. Otherwise only non-docs text provider

@@ -185,14 +185,11 @@
 

     // second check class annotation

     try {

-      IAnnotation a = registration.getAnnotation("org.eclipse.scout.commons.annotations.Priority");

-      if (a != null) {

-        for (IMemberValuePair mvp : a.getMemberValuePairs()) {

-          if ("value".equals(mvp.getMemberName()) && mvp.getValue() instanceof Float) {

-            return ((Float) mvp.getValue()).floatValue();

-          }

+    	IAnnotation a = JdtUtility.getAnnotation(registration, RuntimeClasses.Ranking);

+        Double val = JdtUtility.getNumericAnnotationValue(a, "value");

+        if (val != null) {

+          return val.floatValue();

         }

-      }

     }

     catch (Exception e) {

       //nop

diff --git a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/jdt/JdtUtility.java b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/jdt/JdtUtility.java
index ac8e5b7..0ca2821 100644
--- a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/jdt/JdtUtility.java
+++ b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/jdt/JdtUtility.java
@@ -15,6 +15,7 @@
 import org.eclipse.jdt.core.IAnnotation;

 import org.eclipse.jdt.core.ICompilationUnit;

 import org.eclipse.jdt.core.IJavaElement;

+import org.eclipse.jdt.core.IMemberValuePair;

 import org.eclipse.jdt.core.IMethod;

 import org.eclipse.jdt.core.IType;

 import org.eclipse.jdt.core.JavaCore;

@@ -38,6 +39,26 @@
     return TypeUtility.exists(getAnnotation(element, fullyQuallifiedAnnotation));

   }

 

+  public static Double getNumericAnnotationValue(IAnnotation annotation, String name) throws JavaModelException {

+    if (TypeUtility.exists(annotation)) {

+      IMemberValuePair[] memberValues = annotation.getMemberValuePairs();

+      for (IMemberValuePair p : memberValues) {

+        if (name.equals(p.getMemberName())) {

+          switch (p.getValueKind()) {

+            case IMemberValuePair.K_DOUBLE:

+              return ((Double) p.getValue()).doubleValue();

+            case IMemberValuePair.K_FLOAT:

+              return ((Float) p.getValue()).doubleValue();

+            case IMemberValuePair.K_INT:

+              return ((Integer) p.getValue()).doubleValue();

+          }

+          break;

+        }

+      }

+    }

+    return null;

+  }

+

   public static IAnnotation getAnnotation(IAnnotatable element, String fullyQuallifiedAnnotation) {

     try {

       IAnnotation annotation = element.getAnnotation(fullyQuallifiedAnnotation);

@@ -61,7 +82,7 @@
 

   /**

    * Escape the given string in java style.

-   * 

+   *

    * @param s

    *          The string to escape.

    * @return A new string with backslashes and double-quotes escaped in java style.

@@ -74,7 +95,7 @@
   /**

    * converts the given string into a string literal with leading and ending double-quotes including escaping of the

    * given value.

-   * 

+   *

    * @param s

    *          the string to convert.

    * @return the literal string.

diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/RuntimeClasses.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/RuntimeClasses.java
index 1dd785f..f79f3c5 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/RuntimeClasses.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/RuntimeClasses.java
@@ -12,7 +12,7 @@
 

 /**

  * <h3>{@link RuntimeClasses}</h3> ...

- * 

+ *

  * @author Andreas Hoegger

  * @since 1.0.8 24.01.2009

  */

@@ -221,6 +221,7 @@
   public static final String LookupCall = "org.eclipse.scout.rt.shared.services.lookup.LookupCall"; // NO_UCD

   public static final String LookupRow = "org.eclipse.scout.rt.shared.services.lookup.LookupRow"; // NO_UCD

   public static final String Order = "org.eclipse.scout.commons.annotations.Order"; // NO_UCD

+  public static final String Ranking = "org.eclipse.scout.commons.annotations.Priority"; // NO_UCD

   public static final String ScoutTexts = "org.eclipse.scout.rt.shared.ScoutTexts"; // NO_UCD

   public static final String SearchFilter = "org.eclipse.scout.rt.shared.services.common.jdbc.SearchFilter"; // NO_UCD

   public static final String ServerServiceFactory = "org.eclipse.scout.rt.server.services.ServerServiceFactory"; // NO_UCD

diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
index 3778066..d34c0dd 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
@@ -99,7 +99,7 @@
    * }

    * // execCreateChildPages.getAllNewTypeOccurrences() returns BCType[]{A,B}

    * </xmp>

-   * 

+   *

    * @return

    * @throws JavaModelException

    */

@@ -545,31 +545,8 @@
   }

 

   public static Double getOrderAnnotationValue(IAnnotatable a) throws JavaModelException {

-    Double sortNo = null;

-    IAnnotation annotation = JdtUtility.getAnnotation(a, RuntimeClasses.Order);

-    if (TypeUtility.exists(annotation)) {

-      IMemberValuePair[] memberValues = annotation.getMemberValuePairs();

-      for (IMemberValuePair p : memberValues) {

-        if ("value".equals(p.getMemberName())) {

-          switch (p.getValueKind()) {

-            case IMemberValuePair.K_DOUBLE:

-              sortNo = ((Double) p.getValue()).doubleValue();

-              break;

-            case IMemberValuePair.K_FLOAT:

-              sortNo = ((Float) p.getValue()).doubleValue();

-              break;

-            case IMemberValuePair.K_INT:

-              sortNo = ((Integer) p.getValue()).doubleValue();

-              break;

-            default:

-              sortNo = null;

-              break;

-          }

-          break;

-        }

-      }

-    }

-    return sortNo;

+	IAnnotation annotation = JdtUtility.getAnnotation(a, RuntimeClasses.Order);

+	return JdtUtility.getNumericAnnotationValue(annotation, "value");

   }

 

   public static IType[] getFormFieldsWithoutButtons(IType declaringType) {

@@ -1123,7 +1100,7 @@
 

   /**

    * don not hang on this object.

-   * 

+   *

    * @param type

    * @return

    */