You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/02/19 00:36:07 UTC
[groovy] branch danielsun/tweak-resolving updated: Fix the failing
JDK8 build
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch danielsun/tweak-resolving
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/danielsun/tweak-resolving by this push:
new 9fdfb92 Fix the failing JDK8 build
9fdfb92 is described below
commit 9fdfb92bc96dc528a78e2b12b0cd20983d4185d7
Author: Daniel Sun <su...@apache.org>
AuthorDate: Wed Feb 19 08:35:46 2020 +0800
Fix the failing JDK8 build
---
.../codehaus/groovy/control/ResolveVisitor.java | 42 +--------------------
.../org/codehaus/groovy/vmplugin/VMPlugin.java | 7 ++++
.../codehaus/groovy/vmplugin/v9/ClassFinder.java | 2 +-
.../org/codehaus/groovy/vmplugin/v9/Java9.java | 44 ++++++++++++++++++++++
4 files changed, 53 insertions(+), 42 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index 0eda13a..a3d9efc 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -645,47 +645,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
private static final EvictableCache<String, Set<String>> DEFAULT_IMPORT_CLASS_AND_PACKAGES_CACHE = new UnlimitedConcurrentCache<>();
static {
- if (VMPluginFactory.getPlugin().getVersion() >= 9) {
- try {
- initCache();
- } catch (Exception e) {
- System.err.println("[WARNING] The default import cache of resolve visitor failed to be initialized");
- }
- }
- }
-
- private static void initCache() {
- URI gsLocation = null;
- try {
- gsLocation = DefaultGroovyMethods.getLocation(GroovySystem.class).toURI();
- } catch (URISyntaxException e) {
- e.printStackTrace();
- }
-
- for (String prefix : DEFAULT_IMPORTS) {
- String pn = prefix.substring(0, prefix.length() - 1).replace('.', '/');
-
- Map<String, Set<String>> map = Collections.emptyMap();
- if (pn.startsWith("java/")) {
- map = ClassFinder.find(URI.create("jrt:/modules/java.base/"), pn);
- } else if (pn.startsWith("groovy/")) {
- if (null != gsLocation) {
- map = ClassFinder.find(gsLocation, pn);
- }
- }
-
- map = map.entrySet().stream()
- .collect(
- Collectors.toMap(
- Map.Entry::getKey,
- entry -> entry.getValue().stream()
- .map(e -> e.replace('/', '.') + ".")
- .collect(Collectors.toSet())
- )
- );
-
- DEFAULT_IMPORT_CLASS_AND_PACKAGES_CACHE.putAll(map);
- }
+ DEFAULT_IMPORT_CLASS_AND_PACKAGES_CACHE.putAll(VMPluginFactory.getPlugin().getDefaultImportClasses(DEFAULT_IMPORTS));
}
protected boolean resolveFromDefaultImports(final ClassNode type, final String[] packagePrefixes) {
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java b/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
index 40ba4fb..7478a5b 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
@@ -26,6 +26,9 @@ import org.codehaus.groovy.ast.CompileUnit;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
/**
* Interface to access VM version based actions.
@@ -111,4 +114,8 @@ public interface VMPlugin {
* @return the transformed meta method
*/
MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod);
+
+ default Map<String, Set<String>> getDefaultImportClasses(String[] packageNames) {
+ return Collections.emptyMap();
+ }
}
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java b/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
index 5fa6708..90d0c03 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
@@ -100,7 +100,7 @@ public class ClassFinder {
String packagePathStr = Arrays.stream(Arrays.copyOfRange(pathElems, prefixElemCnt + (!wfs && pathElems[0].isEmpty() ? 1 : 0), nameCount - 1)).collect(Collectors.joining("/"));
if (recursive || packageName.equals(packagePathStr)) {
- Set<String> packageNameSet = result.computeIfAbsent(filename.substring(0, filename.lastIndexOf(".")), f -> new HashSet<>());
+ Set<String> packageNameSet = result.computeIfAbsent(filename.substring(0, filename.lastIndexOf(".")), f -> new HashSet<>(2));
packageNameSet.add(packagePathStr);
}
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
index cfcb9d8..553d4fc 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
@@ -19,6 +19,7 @@
package org.codehaus.groovy.vmplugin.v9;
import groovy.lang.GroovyRuntimeException;
+import groovy.lang.GroovySystem;
import groovy.lang.MetaClass;
import groovy.lang.MetaMethod;
import groovy.lang.Tuple;
@@ -27,6 +28,7 @@ import org.codehaus.groovy.GroovyBugError;
import org.codehaus.groovy.reflection.CachedClass;
import org.codehaus.groovy.reflection.CachedMethod;
import org.codehaus.groovy.reflection.ReflectionUtils;
+import org.codehaus.groovy.runtime.DefaultGroovyMethods;
import org.codehaus.groovy.vmplugin.v8.Java8;
import java.lang.invoke.MethodHandle;
@@ -41,9 +43,13 @@ import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.math.BigInteger;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -55,6 +61,44 @@ import java.util.stream.Collectors;
* Additional Java 9 based functions will be added here as needed.
*/
public class Java9 extends Java8 {
+ @Override
+ public Map<String, Set<String>> getDefaultImportClasses(String[] packageNames) {
+ Map<String, Set<String>> result = new LinkedHashMap<>();
+
+ URI gsLocation = null;
+ try {
+ gsLocation = DefaultGroovyMethods.getLocation(GroovySystem.class).toURI();
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
+
+ for (String prefix : packageNames) {
+ String pn = prefix.substring(0, prefix.length() - 1).replace('.', '/');
+
+ Map<String, Set<String>> map = Collections.emptyMap();
+ if (pn.startsWith("java/")) {
+ map = ClassFinder.find(URI.create("jrt:/modules/java.base/"), pn);
+ } else if (pn.startsWith("groovy/")) {
+ if (null != gsLocation) {
+ map = ClassFinder.find(gsLocation, pn);
+ }
+ }
+
+ map = map.entrySet().stream()
+ .collect(
+ Collectors.toMap(
+ Map.Entry::getKey,
+ entry -> entry.getValue().stream()
+ .map(e -> e.replace('/', '.') + ".")
+ .collect(Collectors.toSet())
+ )
+ );
+
+ result.putAll(map);
+ }
+
+ return result;
+ }
private static class LookupHolder {
private static final Method PRIVATE_LOOKUP;