jlahoda commented on a change in pull request #3396:
URL: https://github.com/apache/netbeans/pull/3396#discussion_r777137254



##########
File path: 
java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java
##########
@@ -18,99 +18,34 @@
  */
 package org.netbeans.modules.java.source;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.security.ProtectionDomain;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import javax.lang.model.SourceVersion;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Opcodes;
-import org.openide.modules.OnStart;
 
 /**
  *
  * @author lahvac
  */
 public class NoJavacHelper {
 
-    private static final AtomicReference<Boolean> hasWorkingJavac = new 
AtomicReference<>();
-    public static boolean hasWorkingJavac() {
-        Boolean res = hasWorkingJavac.get();
-        if (res != null) {
-            return res;
-        }
+    private static final boolean hasWorkingJavac;
+
+    static {
+        boolean res;
         try {
             SourceVersion.valueOf("RELEASE_17");
             res = true;
         } catch (IllegalArgumentException ex) {
-            //OK
             res = false;
         }
-        hasWorkingJavac.compareAndSet(null, res);
-        return hasWorkingJavac.get();
+        hasWorkingJavac = res;
     }
 
-    public static boolean hasNbJavac() {
-        try {
-            Class.forName("com.sun.tools.javac.comp.Repair");
-            return true;
-        } catch (ClassNotFoundException ex) {
-            //OK
-            return false;
-        }
+    public static boolean hasWorkingJavac() {
+        return hasWorkingJavac;
     }
 
-    @OnStart
-    public static class FixClasses implements Runnable {

Review comment:
       I am a bit on a fence with the removal of the `FixClasses`. The sole 
purpose of this was to prevent wild linkage exceptions while running on JDK 8 
without nb-javac. This is obviously a much smaller issue now that (nb-)javac is 
a default, but the exceptions are likely to make the IDE hard to use. So I can 
see an argument for both removing the code and keeping it.

##########
File path: 
java/java.source.base/src/org/netbeans/modules/java/source/indexing/JavaCustomIndexer.java
##########
@@ -1395,15 +1395,7 @@ private static File dumpHeap(@NonNull final String path) 
{
     private static Pair<Object,Method> heapDumper;
 
     private static String computeJavacVersion() {
-        if (NoJavacHelper.hasNbJavac()) {
-            File nbJavac = 
InstalledFileLocator.getDefault().locate("modules/ext/nb-javac-impl.jar", 
"org.netbeans.modules.nbjavac.impl", false);
-            if (nbJavac != null) {
-                return String.valueOf(nbJavac.lastModified());
-            }
-            return "-1";
-        } else {
-            return System.getProperty("java.vm.version", "unknown");
-        }
+        return System.getProperty("java.vm.version", "unknown");

Review comment:
       This would mean complete re-index when running on a different JDK, even 
with nb-javac. That is probably too much. I guess I'd suggest to either simply 
return a fixed value (e.g. `return "nb-javac";`) regardless what the underlying 
version is, or check the version of nb-javac if installed, e.g.:
   ```
           String version = System.getProperty("java.vm.version", "unknown");
   
           for (ModuleInfo mi : 
Lookup.getDefault().lookupAll(ModuleInfo.class)) {
               if ("org.netbeans.libs.nbjavacapi".equals(mi.getCodeNameBase())) 
{
                   version = mi.getSpecificationVersion().toString();
               }
           }
   
           return version;
   ```
   
   (assuming it is able to find the wrapper module.)

##########
File path: 
java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java
##########
@@ -18,99 +18,34 @@
  */
 package org.netbeans.modules.java.source;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.security.ProtectionDomain;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import javax.lang.model.SourceVersion;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Opcodes;
-import org.openide.modules.OnStart;
 
 /**
  *
  * @author lahvac
  */
 public class NoJavacHelper {
 
-    private static final AtomicReference<Boolean> hasWorkingJavac = new 
AtomicReference<>();
-    public static boolean hasWorkingJavac() {
-        Boolean res = hasWorkingJavac.get();
-        if (res != null) {
-            return res;
-        }
+    private static final boolean hasWorkingJavac;
+
+    static {
+        boolean res;
         try {
             SourceVersion.valueOf("RELEASE_17");
             res = true;
         } catch (IllegalArgumentException ex) {
-            //OK
             res = false;
         }
-        hasWorkingJavac.compareAndSet(null, res);
-        return hasWorkingJavac.get();
+        hasWorkingJavac = res;
     }
 
-    public static boolean hasNbJavac() {
-        try {
-            Class.forName("com.sun.tools.javac.comp.Repair");
-            return true;
-        } catch (ClassNotFoundException ex) {
-            //OK
-            return false;
-        }
+    public static boolean hasWorkingJavac() {
+        return hasWorkingJavac;
     }
 
-    @OnStart
-    public static class FixClasses implements Runnable {
-
-        @Override
-        public void run() {
-            if (!hasWorkingJavac()) {
-                String JavaVersion = 
System.getProperty("java.specification.version"); //NOI18N
-                boolean isJdkVer8OrBelow = true;
-                if (!JavaVersion.startsWith("1.")) {   //NOI18N
-                    isJdkVer8OrBelow = false;
-                }
-                if (isJdkVer8OrBelow) {
-                    {
-                        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();
-
-                        
defineClass("com.sun.tools.javac.code.Scope$WriteableScope",
-                                    "com.sun.tools.javac.code.Scope",
-                                    classData);
-                    }
-                    {
-                        ClassWriter w = new ClassWriter(0);
-                        w.visit(Opcodes.V1_8, Opcodes.ACC_ABSTRACT | 
Opcodes.ACC_INTERFACE | Opcodes.ACC_PUBLIC, 
"javax/lang/model/element/ModuleElement", null, "java/lang/Object", new 
String[] {"javax/lang/model/element/Element"});
-                        byte[] classData = w.toByteArray();
-
-                        defineClass("javax.lang.model.element.ModuleElement",
-                                    "com.sun.tools.javac.code.Scope",
-                                    classData);
-                    }
-                }
-            }
-        }
-
-        private void defineClass(String fqn, String injectToClass, byte[] 
classData) {
-            try {
-                Class<?> unsafeClass = Class.forName("sun.misc.Unsafe");
-                Field theUnsafe = unsafeClass.getDeclaredField("theUnsafe"); 
//NOI18N
-                theUnsafe.setAccessible(true);
-                Object unsafe = theUnsafe.get(null);
-
-                Class targetClass = Class.forName(injectToClass);  //NOI18N
-
-                Method defineClass = 
unsafeClass.getDeclaredMethod("defineClass", String.class, byte[].class, 
int.class, int.class, ClassLoader.class, ProtectionDomain.class);  //NOI18N
-                defineClass.invoke(unsafe, fqn, classData, 0, 
classData.length, targetClass.getClassLoader(), 
targetClass.getProtectionDomain());  //NOI18N 
-            } catch (Throwable t) {
-                //ignore...
-                
Logger.getLogger(NoJavacHelper.class.getName()).log(Level.WARNING, null, t);
-            }
-        }
+    @Deprecated

Review comment:
       I think I'd simply remove this method. This is not an API, we can remove 
whatever we want. (Maybe just increment the implementation version in 
`java.source.base/manifest.mf`, so that old and new modules won't mix.)

##########
File path: 
java/java.source.base/test/unit/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorkerTest.java
##########
@@ -1958,13 +1958,13 @@ protected void tearDown() throws Exception {
     }
 
     public static Test suite() {
-        if (NoJavacHelper.hasNbJavac()) {
-            return new VanillaCompileWorkerTest("noop");
-        } else {
+//        if (NoJavacHelper.hasNbJavac()) {

Review comment:
       Nit: simply delete the non-nb-javac lines.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to