Merge remote-tracking branch 'origin/releases/5.2.x' into releases/6.0.x
diff --git a/org.eclipse.scout.sdk.core.s.test/src/main/client/formdata/client/ui/forms/SimpleForm.java b/org.eclipse.scout.sdk.core.s.test/src/main/client/formdata/client/ui/forms/SimpleForm.java
index aea3285..ff51f9e 100644
--- a/org.eclipse.scout.sdk.core.s.test/src/main/client/formdata/client/ui/forms/SimpleForm.java
+++ b/org.eclipse.scout.sdk.core.s.test/src/main/client/formdata/client/ui/forms/SimpleForm.java
@@ -44,6 +44,9 @@
 @FormData(value = SimpleFormData.class, sdkCommand = SdkCommand.CREATE, interfaces = {IFormDataInterface01.class, IFormDataInterface02.class, IFormDataInterface03.class})
 public class SimpleForm extends AbstractForm {
 
+  /**
+   *
+   */
   private Long simpleNr;
 
   public SimpleForm() throws ProcessingException {
diff --git a/org.eclipse.scout.sdk.core.s.test/src/test/java/org/eclipse/scout/sdk/core/s/structured/WellformTest.java b/org.eclipse.scout.sdk.core.s.test/src/test/java/org/eclipse/scout/sdk/core/s/structured/WellformTest.java
index 902f560..2dd980e 100644
--- a/org.eclipse.scout.sdk.core.s.test/src/test/java/org/eclipse/scout/sdk/core/s/structured/WellformTest.java
+++ b/org.eclipse.scout.sdk.core.s.test/src/test/java/org/eclipse/scout/sdk/core/s/structured/WellformTest.java
@@ -14,6 +14,7 @@
 import org.eclipse.scout.sdk.core.model.api.IType;
 import org.eclipse.scout.sdk.core.s.testing.CoreScoutTestingUtils;
 import org.eclipse.scout.sdk.core.testing.CoreTestingUtils;
+import org.junit.Assert;
 import org.junit.Test;
 
 import formdata.client.ui.desktop.outline.pages.ExtendedTablePage;
@@ -33,6 +34,20 @@
 public class WellformTest {
 
   @Test
+  public void testEmptyCommentRegex() {
+    Assert.assertTrue(Wellformer.EMPTY_COMMENT_REGEX.matcher("/**\n   *\n   */").matches());
+    Assert.assertTrue(Wellformer.EMPTY_COMMENT_REGEX.matcher("/**\n\t*\n\t*/").matches());
+
+    Assert.assertTrue(Wellformer.EMPTY_COMMENT_REGEX.matcher("/**\n   * \n   */").matches());
+    Assert.assertTrue(Wellformer.EMPTY_COMMENT_REGEX.matcher("/**\n\t* \n\t*/").matches());
+
+    Assert.assertTrue(Wellformer.EMPTY_COMMENT_REGEX.matcher("/**\n   *\n   *\n   *\n   */").matches());
+    Assert.assertTrue(Wellformer.EMPTY_COMMENT_REGEX.matcher("/**\n\t*\n\t*\n\t*/").matches());
+
+    Assert.assertFalse(Wellformer.EMPTY_COMMENT_REGEX.matcher("/**\n   * whatever \n   */").matches());
+  }
+
+  @Test
   public void testWellform() {
     Wellformer wf = new Wellformer("\n", true);
 
diff --git a/org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/structured/Wellformer.java b/org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/structured/Wellformer.java
index 529ce8b..f71fddf 100644
--- a/org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/structured/Wellformer.java
+++ b/org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/structured/Wellformer.java
@@ -16,6 +16,7 @@
 
 import org.eclipse.scout.sdk.core.model.api.IField;
 import org.eclipse.scout.sdk.core.model.api.IJavaElement;
+import org.eclipse.scout.sdk.core.model.api.IMember;
 import org.eclipse.scout.sdk.core.model.api.IMethod;
 import org.eclipse.scout.sdk.core.model.api.ISourceRange;
 import org.eclipse.scout.sdk.core.model.api.IType;
@@ -28,6 +29,7 @@
  */
 public class Wellformer {
 
+  protected static final Pattern EMPTY_COMMENT_REGEX = Pattern.compile("/\\*\\*[/\\*\\s]+", Pattern.DOTALL | Pattern.MULTILINE);
   private static final Pattern LEADING_SPACES_REGEX = Pattern.compile("\\s*$");
   private static final Pattern TRAILING_SPACES_REGEX = Pattern.compile("^\\s*");
 
@@ -41,13 +43,29 @@
 
   protected void appendFields(List<IField> fields, StringBuilder builder) {
     for (IField f : fields) {
-      builder.append(m_lineDelimiter).append(f.source());
+      builder.append(m_lineDelimiter);
+      appendMemberSource(f, builder);
     }
   }
 
+  protected void appendMemberSource(IMember m, StringBuilder builder) {
+    ISourceRange javaDoc = m.javaDoc();
+    ISourceRange source = m.source();
+
+    if (javaDoc.isAvailable() && EMPTY_COMMENT_REGEX.matcher(javaDoc.toString()).matches()) {
+      // workaround for a bug in the javadoc formatter. See bug 491387 for details.
+      int javaDocEndRel = javaDoc.end() - source.start() + 1 + m_lineDelimiter.length();
+      builder.append("/**").append(m_lineDelimiter).append(" *").append(m_lineDelimiter).append(" */"); // default empty comment
+      builder.append(source.toString().substring(javaDocEndRel));
+      return;
+    }
+    builder.append(source);
+  }
+
   protected void appendMethods(List<IMethod> methods, StringBuilder builder) {
     for (IMethod m : methods) {
-      builder.append(m_lineDelimiter).append(m.source());
+      builder.append(m_lineDelimiter);
+      appendMemberSource(m, builder);
     }
   }
 
@@ -58,7 +76,8 @@
         buildSource(t, builder);
       }
       else {
-        builder.append(m_lineDelimiter).append(t.source());
+        builder.append(m_lineDelimiter);
+        appendMemberSource(t, builder);
       }
     }
   }
diff --git a/org.eclipse.scout.sdk.s2e.nls/src/main/java/org/eclipse/scout/sdk/s2e/nls/internal/ui/fields/AbstractSmartFieldItem.java b/org.eclipse.scout.sdk.s2e.nls/src/main/java/org/eclipse/scout/sdk/s2e/nls/internal/ui/fields/AbstractSmartFieldItem.java
index 178e34e..85f6ab7 100644
--- a/org.eclipse.scout.sdk.s2e.nls/src/main/java/org/eclipse/scout/sdk/s2e/nls/internal/ui/fields/AbstractSmartFieldItem.java
+++ b/org.eclipse.scout.sdk.s2e.nls/src/main/java/org/eclipse/scout/sdk/s2e/nls/internal/ui/fields/AbstractSmartFieldItem.java
@@ -10,9 +10,9 @@
  ******************************************************************************/
 package org.eclipse.scout.sdk.s2e.nls.internal.ui.fields;
 
-import org.eclipse.swt.graphics.Image;
+import java.util.Objects;
 
-import com.google.common.base.Objects;
+import org.eclipse.swt.graphics.Image;
 
 public abstract class AbstractSmartFieldItem implements Comparable<AbstractSmartFieldItem> {
 
@@ -37,7 +37,7 @@
       return false;
     }
     AbstractSmartFieldItem other = (AbstractSmartFieldItem) obj;
-    return Objects.equal(getText(), other.getText());
+    return Objects.equals(getText(), other.getText());
   }
 
   @Override
diff --git a/org.eclipse.scout.sdk.s2e/src/main/java/org/eclipse/scout/sdk/s2e/operation/SourceFormatOperation.java b/org.eclipse.scout.sdk.s2e/src/main/java/org/eclipse/scout/sdk/s2e/operation/SourceFormatOperation.java
index 55c19b4..19a0d30 100644
--- a/org.eclipse.scout.sdk.s2e/src/main/java/org/eclipse/scout/sdk/s2e/operation/SourceFormatOperation.java
+++ b/org.eclipse.scout.sdk.s2e/src/main/java/org/eclipse/scout/sdk/s2e/operation/SourceFormatOperation.java
@@ -65,7 +65,7 @@
 
   @Override
   public void run(IProgressMonitor monitor, IWorkingCopyManager workingCopyManager) throws CoreException {
-    if (monitor.isCanceled()) {
+    if (monitor != null && monitor.isCanceled()) {
       return;
     }
     try {
diff --git a/org.eclipse.scout.sdk.s2e/src/main/java/org/eclipse/scout/sdk/s2e/operation/wellform/WellformScoutTypeOperation.java b/org.eclipse.scout.sdk.s2e/src/main/java/org/eclipse/scout/sdk/s2e/operation/wellform/WellformScoutTypeOperation.java
index 7d88712..a053eac 100644
--- a/org.eclipse.scout.sdk.s2e/src/main/java/org/eclipse/scout/sdk/s2e/operation/wellform/WellformScoutTypeOperation.java
+++ b/org.eclipse.scout.sdk.s2e/src/main/java/org/eclipse/scout/sdk/s2e/operation/wellform/WellformScoutTypeOperation.java
@@ -15,7 +15,6 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jdt.core.IBuffer;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.ISourceRange;
@@ -88,26 +87,32 @@
   }
 
   protected void wellformType(IType type, IWorkingCopyManager workingCopyManager) throws CoreException {
-    ICompilationUnit icu = type.getCompilationUnit();
-    workingCopyManager.register(icu, null);
-    IBuffer icuBuffer = icu.getBuffer();
-
-    Document sourceDoc = new Document(icuBuffer.getContents());
-    String lineSeparator = icu.findRecommendedLineSeparator();
-
     ISourceRange typeRange = type.getSourceRange();
-    StringBuilder sourceBuilder = new StringBuilder();
+    if (!SourceRange.isAvailable(typeRange)) {
+      return;
+    }
 
+    ICompilationUnit icu = type.getCompilationUnit();
+    String lineSeparator = icu.findRecommendedLineSeparator();
     Wellformer w = new Wellformer(lineSeparator, isRecursive());
+
+    StringBuilder sourceBuilder = new StringBuilder(typeRange.getLength() * 2);
     boolean success = w.buildSource(m_envProvider.jdtTypeToScoutType(type), sourceBuilder);
     if (success) {
-      ReplaceEdit edit = new ReplaceEdit(typeRange.getOffset(), typeRange.getLength(), sourceBuilder.toString());
-      // format
       try {
+        workingCopyManager.register(icu, null);
+
+        // apply changes
+        ReplaceEdit edit = new ReplaceEdit(typeRange.getOffset(), typeRange.getLength(), sourceBuilder.toString());
+        IBuffer icuBuffer = icu.getBuffer();
+        Document sourceDoc = new Document(icuBuffer.getContents());
         edit.apply(sourceDoc);
-        SourceRange range = new SourceRange(0, sourceDoc.getLength());
-        SourceFormatOperation op = new SourceFormatOperation(type.getJavaProject(), sourceDoc, range);
-        op.run(new NullProgressMonitor(), workingCopyManager);
+
+        // format
+        SourceFormatOperation op = new SourceFormatOperation(type.getJavaProject(), sourceDoc);
+        op.run(null, workingCopyManager);
+
+        // write new content to file
         icuBuffer.setContents(sourceDoc.get());
       }
       catch (Exception e) {
diff --git a/updatesite-maven-plugin/pom.xml b/updatesite-maven-plugin/pom.xml
index 594244b..8e16893 100644
--- a/updatesite-maven-plugin/pom.xml
+++ b/updatesite-maven-plugin/pom.xml
@@ -44,18 +44,11 @@
       <version>3.3.3</version>
     </dependency>
     <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-      <version>3.0.22</version>
-    </dependency>
-
-    <dependency>
       <groupId>org.apache.maven.plugin-tools</groupId>
       <artifactId>maven-plugin-annotations</artifactId>
       <version>3.4</version>
       <scope>provided</scope>
     </dependency>
-
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>