Ensure m2e 1.8.2 works with older jdt versions

Change-Id: I8469ac0143774838b718c2a8b1cc3e1d59f13a56
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/InternalModuleSupport.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/InternalModuleSupport.java
new file mode 100644
index 0000000..8a4e08d
--- /dev/null
+++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/InternalModuleSupport.java
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Red Hat, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *      Red Hat, Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.jdt.internal;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.zip.ZipFile;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jdt.core.IClasspathAttribute;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IModuleDescription;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
+import org.eclipse.jdt.internal.compiler.env.AutomaticModuleNaming;
+import org.eclipse.jdt.internal.compiler.env.IModule;
+import org.eclipse.jdt.internal.core.AbstractModule;
+
+import org.apache.maven.project.MavenProject;
+
+import org.eclipse.m2e.core.MavenPlugin;
+import org.eclipse.m2e.core.project.IMavenProjectFacade;
+import org.eclipse.m2e.jdt.IClasspathDescriptor;
+import org.eclipse.m2e.jdt.IClasspathEntryDescriptor;
+
+
+/**
+ * Helper for Java Module Support relying on new JDT classes
+ *
+ * @author Fred Bricon
+ * @since 1.8.2
+ */
+@Deprecated
+@SuppressWarnings("restriction")
+class InternalModuleSupport {
+
+  private static final Logger log = LoggerFactory.getLogger(InternalModuleSupport.class);
+
+  /**
+   * Sets <code>module</code flag to <code>true</code> to classpath dependencies declared in module-info.java
+   * 
+   * @param facade a Maven facade project
+   * @param classpath a classpath descriptor
+   * @param monitor a progress monitor
+   */
+  public static void configureClasspath(IMavenProjectFacade facade, IClasspathDescriptor classpath,
+      IProgressMonitor monitor) throws CoreException {
+    IJavaProject javaProject = JavaCore.create(facade.getProject());
+    IModuleDescription moduleDescription = javaProject.getModuleDescription();
+    if(!(moduleDescription instanceof AbstractModule)) {
+      return;
+    }
+    AbstractModule module = (AbstractModule) moduleDescription;
+    Set<String> requiredModules = Stream.of(module.getRequiredModules()).map(m -> new String(m.name()))
+        .collect(Collectors.toSet());
+    for(IClasspathEntryDescriptor entry : classpath.getEntryDescriptors()) {
+      String moduleName = getModuleName(entry, monitor);
+      if(requiredModules.contains(moduleName)) {
+        entry.setClasspathAttribute(IClasspathAttribute.MODULE, Boolean.TRUE.toString());
+      }
+    }
+  }
+
+  private static String getModuleName(IClasspathEntryDescriptor entry, IProgressMonitor monitor) {
+    String module = null;
+    if(IClasspathEntry.CPE_LIBRARY == entry.getEntryKind()) {
+      module = getModuleNameFromJar(entry.getPath().toFile());
+    } else if(IClasspathEntry.CPE_PROJECT == entry.getEntryKind()) {
+      module = getModuleNameFromProject(entry.getPath(), monitor);
+    }
+    return module;
+  }
+
+  private static String getModuleNameFromProject(IPath projectPath, IProgressMonitor monitor) {
+    IJavaProject project = getJavaProject(projectPath);
+    String module = null;
+    if(project != null) {
+      try {
+        if(project.getModuleDescription() == null) {
+          String buildName = null;
+          IMavenProjectFacade facade = MavenPlugin.getMavenProjectRegistry().getProject(project.getProject());
+          if(facade != null) {
+            MavenProject mavenProject = facade.getMavenProject(monitor);
+            if(mavenProject != null) {
+              buildName = mavenProject.getBuild().getFinalName();
+            }
+          }
+          if(buildName == null || buildName.isEmpty()) {
+            buildName = project.getElementName();
+          }
+          module = new String(AutomaticModuleNaming.determineAutomaticModuleName(buildName, false, null));
+        } else {
+          module = project.getModuleDescription().getElementName();
+        }
+      } catch(CoreException ex) {
+        log.error(ex.getMessage(), ex);
+      }
+    }
+    return module;
+  }
+
+  private static IJavaProject getJavaProject(IPath projectPath) {
+    if(projectPath == null || projectPath.isEmpty()) {
+      return null;
+    }
+    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+    IProject project = root.getProject(projectPath.lastSegment());
+    if(project.isAccessible()) {
+      return JavaCore.create(project);
+    }
+    return null;
+  }
+
+  private static String getModuleNameFromJar(File file) {
+    if(!file.isFile()) {
+      return null;
+    }
+    char[] moduleName = null;
+    try (ZipFile zipFile = new ZipFile(file)) {
+      IModule module = null;
+      ClassFileReader reader = ClassFileReader.read(zipFile, IModule.MODULE_INFO_CLASS);
+      if(reader != null) {
+        module = reader.getModuleDeclaration();
+        if(module != null) {
+          moduleName = module.name();
+        }
+      }
+    } catch(ClassFormatException | IOException ex) {
+      log.error(ex.getMessage(), ex);
+    }
+    if(moduleName == null) {
+      moduleName = AutomaticModuleNaming.determineAutomaticModuleName(file.getAbsolutePath());
+    }
+    return new String(moduleName);
+  }
+
+}
diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/ModuleSupport.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/ModuleSupport.java
index 6f591c5..6e8dbb5 100644
--- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/ModuleSupport.java
+++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/ModuleSupport.java
@@ -11,39 +11,11 @@
 
 package org.eclipse.m2e.jdt.internal;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import java.util.zip.ZipFile;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.core.IClasspathAttribute;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IModuleDescription;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
-import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
-import org.eclipse.jdt.internal.compiler.env.AutomaticModuleNaming;
-import org.eclipse.jdt.internal.compiler.env.IModule;
-import org.eclipse.jdt.internal.core.AbstractModule;
 
-import org.apache.maven.project.MavenProject;
-
-import org.eclipse.m2e.core.MavenPlugin;
 import org.eclipse.m2e.core.project.IMavenProjectFacade;
 import org.eclipse.m2e.jdt.IClasspathDescriptor;
-import org.eclipse.m2e.jdt.IClasspathEntryDescriptor;
 
 
 /**
@@ -52,13 +24,10 @@
  * @author Fred Bricon
  * @since 1.8.2
  */
-@SuppressWarnings("restriction")
 public class ModuleSupport {
 
   static final boolean IS_MODULE_SUPPORT_AVAILABLE;
 
-  private static final Logger log = LoggerFactory.getLogger(ModuleSupport.class);
-
   static {
     boolean isModuleSupportAvailable = false;
     try {
@@ -81,93 +50,6 @@
     if(!IS_MODULE_SUPPORT_AVAILABLE) {
       return;
     }
-    IJavaProject javaProject = JavaCore.create(facade.getProject());
-    IModuleDescription moduleDescription = javaProject.getModuleDescription();
-    if(!(moduleDescription instanceof AbstractModule)) {
-      return;
-    }
-    AbstractModule module = (AbstractModule) moduleDescription;
-    Set<String> requiredModules = Stream.of(module.getRequiredModules()).map(m -> new String(m.name()))
-        .collect(Collectors.toSet());
-    for(IClasspathEntryDescriptor entry : classpath.getEntryDescriptors()) {
-      String moduleName = getModuleName(entry, monitor);
-      if(requiredModules.contains(moduleName)) {
-        entry.setClasspathAttribute(IClasspathAttribute.MODULE, Boolean.TRUE.toString());
-      }
-    }
+    InternalModuleSupport.configureClasspath(facade, classpath, monitor);
   }
-
-  private static String getModuleName(IClasspathEntryDescriptor entry, IProgressMonitor monitor) {
-    String module = null;
-    if(IClasspathEntry.CPE_LIBRARY == entry.getEntryKind()) {
-      module = getModuleNameFromJar(entry.getPath().toFile());
-    } else if(IClasspathEntry.CPE_PROJECT == entry.getEntryKind()) {
-      module = getModuleNameFromProject(entry.getPath(), monitor);
-    }
-    return module;
-  }
-
-  private static String getModuleNameFromProject(IPath projectPath, IProgressMonitor monitor) {
-    IJavaProject project = getJavaProject(projectPath);
-    String module = null;
-    if(project != null) {
-      try {
-        if(project.getModuleDescription() == null) {
-          String buildName = null;
-          IMavenProjectFacade facade = MavenPlugin.getMavenProjectRegistry().getProject(project.getProject());
-          if(facade != null) {
-            MavenProject mavenProject = facade.getMavenProject(monitor);
-            if(mavenProject != null) {
-              buildName = mavenProject.getBuild().getFinalName();
-            }
-          }
-          if(buildName == null || buildName.isEmpty()) {
-            buildName = project.getElementName();
-          }
-          module = new String(AutomaticModuleNaming.determineAutomaticModuleName(buildName, false, null));
-        } else {
-          module = project.getModuleDescription().getElementName();
-        }
-      } catch(CoreException ex) {
-        log.error(ex.getMessage(), ex);
-      }
-    }
-    return module;
-  }
-
-  private static IJavaProject getJavaProject(IPath projectPath) {
-    if(projectPath == null || projectPath.isEmpty()) {
-      return null;
-    }
-    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-    IProject project = root.getProject(projectPath.lastSegment());
-    if(project.isAccessible()) {
-      return JavaCore.create(project);
-    }
-    return null;
-  }
-
-  private static String getModuleNameFromJar(File file) {
-    if(!file.isFile()) {
-      return null;
-    }
-    char[] moduleName = null;
-    try (ZipFile zipFile = new ZipFile(file)) {
-      IModule module = null;
-      ClassFileReader reader = ClassFileReader.read(zipFile, IModule.MODULE_INFO_CLASS);
-      if(reader != null) {
-        module = reader.getModuleDeclaration();
-        if(module != null) {
-          moduleName = module.name();
-        }
-      }
-    } catch(ClassFormatException | IOException ex) {
-      log.error(ex.getMessage(), ex);
-    }
-    if(moduleName == null) {
-      moduleName = AutomaticModuleNaming.determineAutomaticModuleName(file.getAbsolutePath());
-    }
-    return new String(moduleName);
-  }
-
 }