Bugfix for Scout code completion: Possible IllegalArgumentException handled.
diff --git a/org.eclipse.scout.nls.sdk/src/org/eclipse/scout/nls/sdk/internal/ui/action/AbstractNlsTextCompletionComputer.java b/org.eclipse.scout.nls.sdk/src/org/eclipse/scout/nls/sdk/internal/ui/action/AbstractNlsTextCompletionComputer.java
index baa2ec9..c5ba8ac 100644
--- a/org.eclipse.scout.nls.sdk/src/org/eclipse/scout/nls/sdk/internal/ui/action/AbstractNlsTextCompletionComputer.java
+++ b/org.eclipse.scout.nls.sdk/src/org/eclipse/scout/nls/sdk/internal/ui/action/AbstractNlsTextCompletionComputer.java
@@ -11,6 +11,7 @@
 package org.eclipse.scout.nls.sdk.internal.ui.action;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -86,7 +87,7 @@
 
   @Override
   public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-    return new ArrayList<IContextInformation>();
+    return Collections.emptyList();
   }
 
   /*
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/ScoutSdkProposalComputer.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/ScoutSdkProposalComputer.java
index 01f3e10..a36090e 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/ScoutSdkProposalComputer.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/ScoutSdkProposalComputer.java
@@ -11,6 +11,7 @@
 package org.eclipse.scout.sdk.ui.internal.extensions.codecompletion;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -69,7 +70,7 @@
 
   @Override
   public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-    return null;
+    return Collections.emptyList();
   }
 
   @Override
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/sql/SqlBindCompletionProposalProcessor.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/sql/SqlBindCompletionProposalProcessor.java
index 25d8cf6..10bbe25 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/sql/SqlBindCompletionProposalProcessor.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/sql/SqlBindCompletionProposalProcessor.java
@@ -10,7 +10,9 @@
  ******************************************************************************/
 package org.eclipse.scout.sdk.ui.internal.extensions.codecompletion.sql;
 
+import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.TreeMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -27,8 +29,7 @@
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
-import org.eclipse.jface.text.contentassist.IContextInformation;
-import org.eclipse.jface.text.contentassist.IContextInformationValidator;
+import org.eclipse.scout.commons.CollectionUtility;
 import org.eclipse.scout.sdk.extensions.runtime.classes.RuntimeClasses;
 import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
 import org.eclipse.scout.sdk.util.jdt.JdtUtility;
@@ -39,7 +40,7 @@
 import org.eclipse.swt.graphics.Image;
 
 /**
- * <h3>SqlBindCompletionProposalProcessor</h3> ...
+ * <h3>SqlBindCompletionProposalProcessor</h3>
  * 
  * @author Andreas Hoegger
  * @since 1.0.8 09.02.2010
@@ -52,24 +53,19 @@
   private final Image m_image;
   private static final Pattern REGEX_QUOTES = Pattern.compile("\\\"");
   private static final Pattern REGEX_BIND = Pattern.compile(".*\\:[A-Za-z0-9\\._-]*$");
-  private static final ICompletionProposal[] NO_PROPOSALS = new ICompletionProposal[0];
-  private static final IContextInformation[] NO_CONTEXTS = new IContextInformation[0];
 
   public SqlBindCompletionProposalProcessor() {
     m_image = ScoutSdkUi.getImage(ScoutSdkUi.Default);
   }
 
-  /**
-   * {@inheritDoc}
-   */
-  public ICompletionProposal[] computeCompletionProposals(JavaContentAssistInvocationContext context) {
+  public List<ICompletionProposal> computeCompletionProposals(JavaContentAssistInvocationContext context) {
     try {
       if (!isSqlStatementLocation(context.getViewer(), context.getInvocationOffset())) {
-        return NO_PROPOSALS;
+        return Collections.emptyList();
       }
       IType formData = getFormDataParameterType(context);
       if (formData == null || !formData.exists()) {
-        return NO_PROPOSALS;
+        return Collections.emptyList();
       }
       String prefix = getPrefix(context.getViewer(), context.getInvocationOffset());
       HashSet<ICompletionProposal> collector = new HashSet<ICompletionProposal>();
@@ -94,12 +90,12 @@
         }
       }
 
-      return sorted.values().toArray(new ICompletionProposal[sorted.values().size()]);
+      return CollectionUtility.copyList(sorted.values());
     }
     catch (Exception e) {
       ScoutSdkUi.logWarning("error during creating sql copletion.", e);
     }
-    return NO_PROPOSALS;
+    return Collections.emptyList();
   }
 
   private String getBeanName(String elementName) {
@@ -124,7 +120,7 @@
     }
   }
 
-  private boolean isSqlStatementLocation(ITextViewer viewer, int offset) throws BadLocationException {
+  private static boolean isSqlStatementLocation(ITextViewer viewer, int offset) throws BadLocationException {
     IDocument doc = viewer.getDocument();
     if (doc == null || offset > doc.getLength()) {
       return false;
@@ -161,7 +157,7 @@
     return null;
   }
 
-  private String getPrefix(ITextViewer viewer, int offset) throws BadLocationException {
+  private static String getPrefix(ITextViewer viewer, int offset) throws BadLocationException {
     IDocument doc = viewer.getDocument();
     if (doc == null || offset > doc.getLength()) {
       return null;
@@ -174,40 +170,4 @@
     return doc.get(offset + 1, length);
 
   }
-
-  /*
-   * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int)
-   */
-  public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
-    // no context informations for hippie completions
-    return NO_CONTEXTS;
-  }
-
-  /*
-   * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
-   */
-  public char[] getCompletionProposalAutoActivationCharacters() {
-    return null;
-  }
-
-  /*
-   * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()
-   */
-  public char[] getContextInformationAutoActivationCharacters() {
-    return null;
-  }
-
-  /*
-   * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
-   */
-  public IContextInformationValidator getContextInformationValidator() {
-    return null;
-  }
-
-  /*
-   * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#getErrorMessage()
-   */
-  public String getErrorMessage() {
-    return null; // no custom error message
-  }
 }
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/sql/SqlBindFromFormDataCompletionComputer.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/sql/SqlBindFromFormDataCompletionComputer.java
index 04a194f..7003b74 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/sql/SqlBindFromFormDataCompletionComputer.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/codecompletion/sql/SqlBindFromFormDataCompletionComputer.java
@@ -10,8 +10,7 @@
  ******************************************************************************/
 package org.eclipse.scout.sdk.ui.internal.extensions.codecompletion.sql;
 
-import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -25,46 +24,33 @@
 import org.osgi.framework.Bundle;
 
 /**
- * <h3>SqlBindFromFormDataCompletionComputer</h3> ...
+ * <h3>SqlBindFromFormDataCompletionComputer</h3>
  * 
  * @author Andreas Hoegger
  * @since 1.0.8 09.02.2010
  */
 public class SqlBindFromFormDataCompletionComputer implements IJavaCompletionProposalComputer {
 
-  private SqlBindCompletionProposalProcessor m_processor = null;
+  private final SqlBindCompletionProposalProcessor m_processor = new SqlBindCompletionProposalProcessor();
 
   @Override
   public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-    if (!(context instanceof JavaContentAssistInvocationContext)
-        || Platform.getBundle(ScoutSdkUi.PLUGIN_ID).getState() != Bundle.ACTIVE) {
-      return new ArrayList<ICompletionProposal>(0);
-    }
-    if (m_processor == null) {
-      m_processor = new SqlBindCompletionProposalProcessor();
+    if (!(context instanceof JavaContentAssistInvocationContext) || Platform.getBundle(ScoutSdkUi.PLUGIN_ID).getState() != Bundle.ACTIVE) {
+      return Collections.emptyList();
     }
     JavaContentAssistInvocationContext javaContext = (JavaContentAssistInvocationContext) context;
 
-    return Arrays.asList(m_processor.computeCompletionProposals(javaContext));
+    return m_processor.computeCompletionProposals(javaContext);
   }
 
   @Override
   public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-    if (m_processor == null) {
-      m_processor = new SqlBindCompletionProposalProcessor();
-    }
-    return Arrays.asList(m_processor.computeContextInformation(context.getViewer(), context.getInvocationOffset()));
+    return Collections.emptyList();
   }
 
-  /*
-   * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#getErrorMessage()
-   */
   @Override
   public String getErrorMessage() {
-    if (m_processor == null) {
-      return "";
-    }
-    return m_processor.getErrorMessage();
+    return null;
   }
 
   @Override