You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by jl...@apache.org on 2017/12/15 21:58:45 UTC

[incubator-netbeans] branch jdk-javac updated: Adding ability to start on JDK 8 and show a dialog to download nb-javac.

This is an automated email from the ASF dual-hosted git repository.

jlahoda pushed a commit to branch jdk-javac
in repository https://gitbox.apache.org/repos/asf/incubator-netbeans.git


The following commit(s) were added to refs/heads/jdk-javac by this push:
     new 824ab39  Adding ability to start on JDK 8 and show a dialog to download nb-javac.
824ab39 is described below

commit 824ab395d5ba04d5cb5ab0e533533b974d8fcefb
Author: Jan Lahoda <jl...@netbeans.org>
AuthorDate: Fri Dec 15 22:58:11 2017 +0100

    Adding ability to start on JDK 8 and show a dialog to download nb-javac.
---
 java.source.base/manifest.mf                       |  1 -
 java.source.base/nbproject/project.xml             |  8 ++
 .../org/netbeans/api/java/source/JavaSource.java   |  3 +
 .../modules/java/source/NoJavacHelper.java         | 99 ++++++++++++++++++++++
 .../netbeans/modules/java/source/base/layer.xml    |  4 -
 .../java/source/indexing/JavaCustomIndexer.java    |  9 +-
 .../java/source/parsing/JavacParserFactory.java    |  3 +
 .../modules/java/source/save/Reformatter.java      |  3 +
 .../modules/java/source/save/Reindenter.java       |  3 +
 java.source.jdk9.req/build.xml                     |  5 --
 java.source.jdk9.req/manifest.mf                   |  7 --
 java.source.jdk9.req/nbproject/project.properties  |  3 -
 java.source.jdk9.req/nbproject/project.xml         | 11 ---
 .../modules/java/source/jdk9/req/Bundle.properties |  1 -
 java.source/nbproject/project.xml                  |  8 ++
 .../modules/java/source/JBrowseModule.java         | 62 +++++++++++++-
 nbbuild/cluster.properties                         |  1 -
 .../updatecenters/resources/Bundle.properties      |  3 +-
 18 files changed, 197 insertions(+), 37 deletions(-)

diff --git a/java.source.base/manifest.mf b/java.source.base/manifest.mf
index 21b5540..09331a8 100644
--- a/java.source.base/manifest.mf
+++ b/java.source.base/manifest.mf
@@ -3,4 +3,3 @@ OpenIDE-Module: org.netbeans.modules.java.source.base
 OpenIDE-Module-Implementation-Version: 2
 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/java/source/base/Bundle.properties
 OpenIDE-Module-Layer: org/netbeans/modules/java/source/base/layer.xml
-OpenIDE-Module-Requires: org.netbeans.modules.javac
diff --git a/java.source.base/nbproject/project.xml b/java.source.base/nbproject/project.xml
index fa276ea..d012fd5 100644
--- a/java.source.base/nbproject/project.xml
+++ b/java.source.base/nbproject/project.xml
@@ -70,6 +70,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.libs.asm</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>5.4</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.libs.javacapi</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
diff --git a/java.source.base/src/org/netbeans/api/java/source/JavaSource.java b/java.source.base/src/org/netbeans/api/java/source/JavaSource.java
index 2b66dfb..89acf16 100644
--- a/java.source.base/src/org/netbeans/api/java/source/JavaSource.java
+++ b/java.source.base/src/org/netbeans/api/java/source/JavaSource.java
@@ -48,6 +48,7 @@ import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.classpath.JavaClassPathConstants;
 import org.netbeans.api.java.platform.JavaPlatformManager;
 import org.netbeans.modules.java.source.JavaSourceAccessor;
+import org.netbeans.modules.java.source.NoJavacHelper;
 import org.netbeans.modules.java.source.parsing.CachingArchiveProvider;
 import org.netbeans.modules.java.source.parsing.ClassParser;
 import org.netbeans.modules.java.source.parsing.ClasspathInfoTask;
@@ -185,6 +186,8 @@ public final class JavaSource {
         if (files == null) {
             throw new IllegalArgumentException ();
         }
+        if (!NoJavacHelper.hasWorkingJavac())
+            return null;
         try {
             return new JavaSource(cpInfo, files);
 // TODO: Split
diff --git a/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java b/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java
new file mode 100644
index 0000000..27c612e
--- /dev/null
+++ b/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java
@@ -0,0 +1,99 @@
+ /*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License.  When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ */
+package org.netbeans.modules.java.source;
+
+import java.lang.reflect.Field;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Opcodes;
+import org.openide.modules.OnStart;
+import sun.misc.Unsafe;
+
+/**
+ *
+ * @author lahvac
+ */
+public class NoJavacHelper {
+
+    public static boolean hasWorkingJavac() {
+        try {
+            Class.forName("javax.lang.model.element.ModuleElement");
+            return true;
+        } catch (ClassNotFoundException ex) {
+            //OK
+            return false;
+        }
+    }
+
+    public static boolean hasNbJavac() {
+        try {
+            Class.forName("com.sun.tools.javac.comp.Repair");
+            return true;
+        } catch (ClassNotFoundException ex) {
+            //OK
+            return false;
+        }
+    }
+
+    @OnStart
+    public static class FixClasses implements Runnable {
+
+        @Override
+        public void run() {
+            if (!hasWorkingJavac()) {
+                ClassWriter w = new ClassWriter(0);
+                w.visit(Opcodes.V1_8, Opcodes.ACC_ABSTRACT | Opcodes.ACC_PUBLIC, "com/sun/tools/javac/code/Scope$WriteableScope", null, "com/sun/tools/javac/code/Scope", null);
+                byte[] classData = w.toByteArray();
+                try {
+                    Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
+                    theUnsafe.setAccessible(true);
+                    Unsafe unsafe = (Unsafe) theUnsafe.get(null);
+                    Class scopeClass = Class.forName("com.sun.tools.javac.code.Scope");
+                    unsafe.defineClass("com.sun.tools.javac.code.Scope$WriteableScope", classData, 0, classData.length, scopeClass.getClassLoader(), scopeClass.getProtectionDomain());
+                } catch (Throwable t) {
+                    //ignore...
+                    Logger.getLogger(NoJavacHelper.class.getName()).log(Level.FINE, null, t);
+                }
+            }
+        }
+
+    }
+}
diff --git a/java.source.base/src/org/netbeans/modules/java/source/base/layer.xml b/java.source.base/src/org/netbeans/modules/java/source/base/layer.xml
index 7716cef..1dad21e 100644
--- a/java.source.base/src/org/netbeans/modules/java/source/base/layer.xml
+++ b/java.source.base/src/org/netbeans/modules/java/source/base/layer.xml
@@ -37,10 +37,6 @@
                 <file name="Reindenter.instance">
                     <attr name="instanceClass" stringvalue="org.netbeans.modules.java.source.save.Reindenter$Factory"/>
                 </file>
-                <file name="JavaIndexer.instance">
-                    <attr name="instanceClass" stringvalue="org.netbeans.modules.java.source.indexing.JavaCustomIndexer$Factory"/>
-                    <!--attr name="position" intvalue="1000"/-->
-                </file>
                 <file name="SourcePathCheck.instance">
                     <attr name="instanceClass" stringvalue="org.netbeans.modules.java.source.classpath.SourcePathCheck$Factory"/>
                 </file>
diff --git a/java.source.base/src/org/netbeans/modules/java/source/indexing/JavaCustomIndexer.java b/java.source.base/src/org/netbeans/modules/java/source/indexing/JavaCustomIndexer.java
index 9c2d0ba..8e5a3b0 100644
--- a/java.source.base/src/org/netbeans/modules/java/source/indexing/JavaCustomIndexer.java
+++ b/java.source.base/src/org/netbeans/modules/java/source/indexing/JavaCustomIndexer.java
@@ -66,6 +66,7 @@ import org.netbeans.api.annotations.common.CheckForNull;
 
 import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.annotations.common.NullAllowed;
+import org.netbeans.api.editor.mimelookup.MimeRegistration;
 //import org.netbeans.api.annotations.common.StaticResource;
 import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.classpath.JavaClassPathConstants;
@@ -79,6 +80,7 @@ import org.netbeans.api.project.Project;
 import org.netbeans.modules.java.source.ElementHandleAccessor;
 import org.netbeans.modules.java.source.JavaSourceTaskFactoryManager;
 import org.netbeans.modules.java.source.ModuleNames;
+import org.netbeans.modules.java.source.NoJavacHelper;
 import org.netbeans.modules.java.source.base.Module;
 import org.netbeans.modules.java.source.parsing.FileManagerTransaction;
 import org.netbeans.modules.java.source.parsing.FileObjects;
@@ -1175,7 +1177,12 @@ public class JavaCustomIndexer extends CustomIndexer {
         @Override
         public int hashCode() {
             return getIndexerName().hashCode();
-        }        
+        }
+
+        @MimeRegistration(mimeType="text/x-java", service=CustomIndexerFactory.class)
+        public static Factory register() {
+            return NoJavacHelper.hasWorkingJavac() ? new Factory() : null;
+        }
     }
 
     public static final class CompileTuple {
diff --git a/java.source.base/src/org/netbeans/modules/java/source/parsing/JavacParserFactory.java b/java.source.base/src/org/netbeans/modules/java/source/parsing/JavacParserFactory.java
index 85b26db..68e21e2 100644
--- a/java.source.base/src/org/netbeans/modules/java/source/parsing/JavacParserFactory.java
+++ b/java.source.base/src/org/netbeans/modules/java/source/parsing/JavacParserFactory.java
@@ -26,6 +26,7 @@ import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 import org.netbeans.api.editor.mimelookup.MimeLookup;
 import org.netbeans.api.editor.mimelookup.MimeRegistration;
+import org.netbeans.modules.java.source.NoJavacHelper;
 import org.netbeans.modules.parsing.api.Snapshot;
 import org.netbeans.modules.parsing.spi.ParserFactory;
 import org.openide.filesystems.FileObject;
@@ -49,6 +50,8 @@ public class JavacParserFactory extends ParserFactory {
     
     @Override
     public JavacParser createParser(final Collection<Snapshot> snapshots) {
+        if (!NoJavacHelper.hasWorkingJavac())
+            return null;
         assert snapshots != null;
         if (snapshots.size() == 1) {
             final FileObject fo = snapshots.iterator().next().getSource().getFileObject();
diff --git a/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java b/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
index 4cb8a31..433493d 100644
--- a/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
+++ b/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java
@@ -52,6 +52,7 @@ import org.netbeans.modules.editor.indent.spi.Context;
 import org.netbeans.modules.editor.indent.spi.ExtraLock;
 import org.netbeans.modules.editor.indent.spi.ReformatTask;
 import org.netbeans.modules.java.source.JavaSourceAccessor;
+import org.netbeans.modules.java.source.NoJavacHelper;
 import org.netbeans.modules.java.source.parsing.FileObjects;
 import org.netbeans.modules.java.source.parsing.JavacParser;
 import org.netbeans.modules.parsing.api.Embedding;
@@ -384,6 +385,8 @@ public class Reformatter implements ReformatTask {
     public static class Factory implements ReformatTask.Factory {
 
         public ReformatTask createTask(Context context) {
+            if (!NoJavacHelper.hasWorkingJavac())
+                return null;
             Source source = Source.create(context.document());
             return source != null ? new Reformatter(source, context) : null;
         }        
diff --git a/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java b/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java
index b719866..99b2f7c 100644
--- a/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java
+++ b/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java
@@ -75,6 +75,7 @@ import org.netbeans.modules.editor.indent.spi.Context;
 import org.netbeans.modules.editor.indent.spi.Context.Region;
 import org.netbeans.modules.editor.indent.spi.ExtraLock;
 import org.netbeans.modules.editor.indent.spi.IndentTask;
+import org.netbeans.modules.java.source.NoJavacHelper;
 import org.netbeans.modules.java.source.parsing.FileObjects;
 import org.netbeans.modules.java.source.parsing.JavacParser;
 import org.netbeans.modules.java.source.parsing.ParsingUtils;
@@ -1203,6 +1204,8 @@ public class Reindenter implements IndentTask {
 
         @Override
         public IndentTask createTask(Context context) {
+            if (!NoJavacHelper.hasWorkingJavac())
+                return null;
             return new Reindenter(context);
         }
     }
diff --git a/java.source.jdk9.req/build.xml b/java.source.jdk9.req/build.xml
deleted file mode 100644
index 3ee732c..0000000
--- a/java.source.jdk9.req/build.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project basedir="." default="netbeans" name="java.source.jdk9.req">
-    <description>Builds, tests, and runs the project org.netbeans.modules.java.source.jdk9.req</description>
-    <import file="../nbbuild/templates/projectized.xml"/>
-</project>
diff --git a/java.source.jdk9.req/manifest.mf b/java.source.jdk9.req/manifest.mf
deleted file mode 100644
index 9ab42f9..0000000
--- a/java.source.jdk9.req/manifest.mf
+++ /dev/null
@@ -1,7 +0,0 @@
-Manifest-Version: 1.0
-AutoUpdate-Show-In-Client: false
-OpenIDE-Module: org.netbeans.modules.java.source.jdk9.req
-OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/java/source/jdk9/req/Bundle.properties
-OpenIDE-Module-Specification-Version: 1.0
-OpenIDE-Module-Package-Dependencies: [com.sun.source.tree.ModuleTree]
-OpenIDE-Module-Provides: org.netbeans.modules.javac
diff --git a/java.source.jdk9.req/nbproject/project.properties b/java.source.jdk9.req/nbproject/project.properties
deleted file mode 100644
index ff160e0..0000000
--- a/java.source.jdk9.req/nbproject/project.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-is.eager=true
-javac.source=1.7
-javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/java.source.jdk9.req/nbproject/project.xml b/java.source.jdk9.req/nbproject/project.xml
deleted file mode 100644
index 43d5e53..0000000
--- a/java.source.jdk9.req/nbproject/project.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.apisupport.project</type>
-    <configuration>
-        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
-            <code-name-base>org.netbeans.modules.java.source.jdk9.req</code-name-base>
-            <module-dependencies/>
-            <public-packages/>
-        </data>
-    </configuration>
-</project>
diff --git a/java.source.jdk9.req/src/org/netbeans/modules/java/source/jdk9/req/Bundle.properties b/java.source.jdk9.req/src/org/netbeans/modules/java/source/jdk9/req/Bundle.properties
deleted file mode 100644
index 3991227..0000000
--- a/java.source.jdk9.req/src/org/netbeans/modules/java/source/jdk9/req/Bundle.properties
+++ /dev/null
@@ -1 +0,0 @@
-OpenIDE-Module-Name=Java Source JDK 9 Required
diff --git a/java.source/nbproject/project.xml b/java.source/nbproject/project.xml
index 9474f22..8b375b2 100644
--- a/java.source/nbproject/project.xml
+++ b/java.source/nbproject/project.xml
@@ -121,6 +121,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.autoupdate.ui</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>1.46</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.classfile</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
diff --git a/java.source/src/org/netbeans/modules/java/source/JBrowseModule.java b/java.source/src/org/netbeans/modules/java/source/JBrowseModule.java
index 2ea38ba..ebc853a 100644
--- a/java.source/src/org/netbeans/modules/java/source/JBrowseModule.java
+++ b/java.source/src/org/netbeans/modules/java/source/JBrowseModule.java
@@ -19,8 +19,23 @@
 
 package org.netbeans.modules.java.source;
 
+import java.awt.Dialog;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.prefs.Preferences;
+import org.netbeans.modules.autoupdate.ui.api.PluginManager;
 import org.netbeans.modules.java.source.usages.ClassIndexManager;
+import org.openide.DialogDescriptor;
+import org.openide.DialogDisplayer;
+import org.openide.awt.NotificationDisplayer;
+import org.openide.awt.NotificationDisplayer.Priority;
+import org.openide.awt.StatusDisplayer;
 import org.openide.modules.ModuleInstall;
+import org.openide.util.HelpCtx;
+import org.openide.util.ImageUtilities;
+import org.openide.util.NbBundle;
+import org.openide.util.NbPreferences;
+import org.openide.windows.WindowManager;
 
 /**
  *
@@ -34,8 +49,51 @@ public class JBrowseModule extends ModuleInstall {
     /** Creates a new instance of JBrowseModule */
     public JBrowseModule() {
     }
-    
-    
+
+    public static final String KEY_WARNING_SHOWN = "nb-javac.warning.shown";
+
+    @Override
+    @NbBundle.Messages({
+        "TITLE_FeaturesLimited=Java features limited",
+        "DESC_FeaturesLimited=<html>No supported javac library available." +
+                             " Most Java editing features are disabled." +
+                             " Please either:" +
+                             "<ul>" +
+                                 "<li>install nb-javac library (<b>highly recommended</b>)</li>" +
+                                 "<li>run NetBeans on JDK 9 or later</li>" +
+                             "</ul>",
+        "BN_Install=Install nb-javac",
+        "DN_nbjavac=nb-javac library"
+    })
+    public void restored() {
+        WindowManager.getDefault().invokeWhenUIReady(() -> {
+            WindowManager.getDefault().invokeWhenUIReady(() -> {
+                Preferences prefs = NbPreferences.forModule(NoJavacHelper.class);
+                if (!NoJavacHelper.hasWorkingJavac() && !prefs.getBoolean(KEY_WARNING_SHOWN, false)) {
+                    String install = Bundle.BN_Install();
+                    Dialog[] d = new Dialog[1];
+                    DialogDescriptor dd = new DialogDescriptor(Bundle.DESC_FeaturesLimited(), Bundle.TITLE_FeaturesLimited(), true, new Object[] {install, DialogDescriptor.CANCEL_OPTION}, install, DialogDescriptor.DEFAULT_ALIGN, HelpCtx.DEFAULT_HELP, evt -> {
+                        if (install.equals(evt.getActionCommand())) {
+                            PluginManager.installSingle("org.netbeans.modules.nbjavac", Bundle.DN_nbjavac());
+                        }
+                        d[0].setVisible(false);
+                    });
+                    d[0] = DialogDisplayer.getDefault().createDialog(dd);
+                    d[0].setVisible(true);
+                    prefs.putBoolean(KEY_WARNING_SHOWN, true);
+                }
+
+                if (!NoJavacHelper.hasNbJavac()) {
+                    NotificationDisplayer.getDefault().notify("Install nb-javac Library", ImageUtilities.loadImageIcon("/org/netbeans/modules/java/source/resources/icons/warning.png", false), "It is recommended to install nb-javac Library to improve Java editing experience.", evt -> {
+                        PluginManager.installSingle("org.netbeans.modules.nbjavac", Bundle.DN_nbjavac());
+                    }, prefs.getBoolean(KEY_WARNING_SHOWN, false) ? Priority.SILENT : Priority.HIGH);
+                    prefs.putBoolean(KEY_WARNING_SHOWN, true);
+                }
+            });
+        });
+        super.restored();
+    }
+
     @Override
     public void close () {
         super.close();
diff --git a/nbbuild/cluster.properties b/nbbuild/cluster.properties
index 6c8f868..e0ff36b 100644
--- a/nbbuild/cluster.properties
+++ b/nbbuild/cluster.properties
@@ -621,7 +621,6 @@ nb.cluster.java=\
         java.source.ant,\
         java.source.base,\
         java.source.compat8,\
-        java.source.jdk9.req,\
         java.source.nbjavac,\
         java.source.queries,\
         java.source.queriesimpl,\
diff --git a/updatecenters/src/org/netbeans/modules/updatecenters/resources/Bundle.properties b/updatecenters/src/org/netbeans/modules/updatecenters/resources/Bundle.properties
index 7f6e4b5..a96dae0 100644
--- a/updatecenters/src/org/netbeans/modules/updatecenters/resources/Bundle.properties
+++ b/updatecenters/src/org/netbeans/modules/updatecenters/resources/Bundle.properties
@@ -31,4 +31,5 @@ URL_LatestBuild=http://bits.netbeans.org/dev/nbms-and-javadoc/lastSuccessfulBuil
 #NOI18N
 URL_Default_N=http://updates.netbeans.org/netbeans/updates/dev/uc/final/main/catalog.xml.gz?{$netbeans.hash.code}
 #NOI18N
-URL_PluginPortal=http://plugins.netbeans.org/nbpluginportal/updates/8.2/catalog.xml.gz
+#URL_PluginPortal=http://plugins.netbeans.org/nbpluginportal/updates/8.2/catalog.xml.gz
+URL_PluginPortal=http://lahoda.info/hudson/job/nb-javac_Library/lastSuccessfulBuild/artifact/make/netbeans/nb-javac-modules/build/updates/updates.xml

-- 
To stop receiving notification emails like this one, please contact
['"commits@netbeans.apache.org" <co...@netbeans.apache.org>'].