Merge pull request #4150 from apache/delivery

Sync delivery to release140 for 14-rc6
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/TemplateUtils.java b/java/maven/src/org/netbeans/modules/maven/newproject/TemplateUtils.java
index 77bf150..03a4afb 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/TemplateUtils.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/TemplateUtils.java
@@ -255,27 +255,29 @@
             POMModel model = POMModelFactory.getDefault().getModel(modelSource);
             org.netbeans.modules.maven.model.pom.Project root = model.getProject();
             if (root != null) {
-                if (model.startTransaction()) {
-                    try {
-                        org.netbeans.modules.maven.model.pom.Properties props = root.getProperties();
-                        if (props == null) {
-                            props = model.getFactory().createProperties();
-                            root.setProperties(props);
-                        }
-                        String packageName = (String) properties.get(TemplateUtils.PARAM_PACKAGE);
-                        String mainClass = (String) properties.get(TemplateUtils.PARAM_MAIN_CLASS_NAME);
-                        if (mainClass == null || mainClass.isEmpty()) {
-                            mainClass = "App";  // NOI18N
-                        }
-                        if (packageName != null && !packageName.isEmpty()) {
-                            mainClass = packageName + '.' + mainClass;
-                        }
-                        props.setProperty("exec.mainClass", mainClass); // NOI18N
-                    } finally {
-                        model.endTransaction();
+                if (model.getProject().getPackaging() == null || "jar".equals(model.getProject().getPackaging())) {
+                    if (model.startTransaction()) {
                         try {
-                            Utilities.saveChanges(model);
-                        } catch (IOException ex) {}
+                            org.netbeans.modules.maven.model.pom.Properties props = root.getProperties();
+                            if (props == null) {
+                                props = model.getFactory().createProperties();
+                                root.setProperties(props);
+                            }
+                            String packageName = (String) properties.get(TemplateUtils.PARAM_PACKAGE);
+                            String mainClass = (String) properties.get(TemplateUtils.PARAM_MAIN_CLASS_NAME);
+                            if (mainClass == null || mainClass.isEmpty()) {
+                                mainClass = "App";  // NOI18N
+                            }
+                            if (packageName != null && !packageName.isEmpty()) {
+                                mainClass = packageName + '.' + mainClass;
+                            }
+                            props.setProperty("exec.mainClass", mainClass); // NOI18N
+                        } finally {
+                            model.endTransaction();
+                            try {
+                                Utilities.saveChanges(model);
+                            } catch (IOException ex) {}
+                        }
                     }
                 }
             }
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
index ef2e035..7e380de 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
@@ -93,6 +93,7 @@
 
         return new FileBuilder(w.getTemplate().getPrimaryFile(), w.getTargetFolder().getPrimaryFile().getParent()).
             param(TemplateUtils.PARAM_PACKAGE, (String) wiz.getProperty("package")).
+            param(TemplateUtils.PARAM_PACKAGING, (String) this.packaging).
             defaultMode(FileBuilder.Mode.COPY).
             name(w.getTargetName()).
             useLookup(Lookups.fixed(h));
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeTemplateHandler.java b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeTemplateHandler.java
index 8d81e48..4a4261f 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeTemplateHandler.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeTemplateHandler.java
@@ -122,15 +122,18 @@
         params.put("projecName", cd.getName());
         params.put("packagePath", pi.packageName == null ? "" : pi.packageName.replace('.', '/')); // NOI18N
         
-        String mainName;
-        if (!params.containsKey("mainClassName")) { // NOI18N
-            String derived = deriveClassName(pi.artifactId);
-            if (BaseUtilities.isJavaIdentifier(derived)) {
-                mainName = derived;
-            } else {
-                mainName = "App"; // NOI18N
+        String packaging = cd.getValue(TemplateUtils.PARAM_PACKAGING);
+        if (packaging == null || "jar".equals(packaging)) { // NOI18N
+            String mainName;
+            if (!params.containsKey("mainClassName")) { // NOI18N
+                String derived = deriveClassName(pi.artifactId);
+                if (BaseUtilities.isJavaIdentifier(derived)) {
+                    mainName = derived;
+                } else {
+                    mainName = "App"; // NOI18N
+                }
+                params.put("mainClassName", mainName); // NOI18N
             }
-            params.put("mainClassName", mainName); // NOI18N
         }
         
 
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/PomJavaNativeMWI.java b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/PomJavaNativeMWI.java
index ac01a5c..be689be 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/PomJavaNativeMWI.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/PomJavaNativeMWI.java
@@ -28,7 +28,14 @@
  *
  * @author mkleint
  */
-@TemplateRegistration(folder=ArchetypeWizards.TEMPLATE_FOLDER, position=980, displayName="#LBL_Maven_POM_Archetype", iconBase="org/netbeans/modules/maven/resources/Maven2Icon.gif", description="pom-root.html")
+@TemplateRegistration(
+        displayName="#LBL_Maven_POM_Archetype",
+        iconBase="org/netbeans/modules/maven/resources/Maven2Icon.gif",
+        description="pom-root.html",
+        folder=ArchetypeWizards.TEMPLATE_FOLDER,
+        position=980,
+        createHandlerClass = IDENativeTemplateHandler.class
+)
 @NbBundle.Messages("LBL_Maven_POM_Archetype=POM Project")
 public class PomJavaNativeMWI extends IDENativeMavenWizardIterator {
 
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/implspi/ActiveQueue.java b/platform/openide.util.lookup/src/org/openide/util/lookup/implspi/ActiveQueue.java
index dd57b50..abf380a 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/implspi/ActiveQueue.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/implspi/ActiveQueue.java
@@ -57,17 +57,23 @@
         }
 
         @Override
-        public Reference<Object> remove(long timeout) throws IllegalArgumentException, InterruptedException {
-            throw new InterruptedException();
+        public Reference<? extends Object> remove(long timeout) throws IllegalArgumentException, InterruptedException {
+            if (timeout < 0) {
+                throw new IllegalArgumentException("Negative timeout value");
+            } else if (Thread.currentThread() != Daemon.running) {
+                throw new InterruptedException();
+            }
+
+            return super.remove(timeout);
         }
 
         @Override
-        public Reference<Object> remove() throws InterruptedException {
-            throw new InterruptedException();
-        }
-        
-        final Reference<? extends Object> removeSuper() throws InterruptedException {
-            return super.remove(0);
+        public Reference<? extends Object> remove() throws InterruptedException {
+            if (Thread.currentThread() != Daemon.running) {
+                throw new InterruptedException();
+            }
+
+            return super.remove();
         }
     }
 
@@ -112,7 +118,7 @@
                     if (impl == null) {
                         return;
                     }
-                    Reference<?> ref = impl.removeSuper();
+                    Reference<?> ref = impl.remove();
                     LOGGER.log(Level.FINE, "Got dequeued reference {0}", new Object[] { ref });
                     if (!(ref instanceof Runnable)) {
                         LOGGER.log(Level.WARNING, "A reference not implementing runnable has been added to the Utilities.activeReferenceQueue(): {0}", ref.getClass());
@@ -131,9 +137,8 @@
                         // to allow GC
                         ref = null;
                     }
-                } catch (InterruptedException ex) {
-                    // Can happen during VM shutdown, it seems. Ignore.
-                    continue;
+                } catch (InterruptedException ignored) {
+                    // Can happen during VM shutdown, it seems.
                 }
             }
         }