mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-11 12:19:00 +00:00
[With] fixing the internal aliasing system
old Wither annotations were no longer being picked up.
This commit is contained in:
3 files changed
+39
-9
No files matched your search
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
package lombok.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
@@ -30,6 +31,7 @@ public class LombokInternalAliasing {
|
||||
/** Maps a package name to a space separated list of packages. If the key package is star-imported, assume all packages in the 'value' part of the MapEntry are too. */
|
||||
public static final Map<String, Collection<String>> IMPLIED_EXTRA_STAR_IMPORTS;
|
||||
public static final Map<String, String> ALIASES;
|
||||
public static final Map<String, Collection<String>> REVERSE_ALIASES;
|
||||
|
||||
/**
|
||||
* Provide a fully qualified name (FQN), and the canonical version of this is returned.
|
||||
@@ -53,5 +55,24 @@ public class LombokInternalAliasing {
|
||||
m2.put("lombok.Delegate", "lombok.experimental.Delegate");
|
||||
m2.put("lombok.experimental.Wither", "lombok.With");
|
||||
ALIASES = Collections.unmodifiableMap(m2);
|
||||
|
||||
Map<String, Collection<String>> m3 = new HashMap<String, Collection<String>>();
|
||||
for (Map.Entry<String, String> e : m2.entrySet()) {
|
||||
Collection<String> c = m3.get(e.getValue());
|
||||
if (c == null) {
|
||||
m3.put(e.getValue(), Collections.singleton(e.getKey()));
|
||||
} else if (c.size() == 1) {
|
||||
Collection<String> newC = new ArrayList<String>(2);
|
||||
newC.addAll(c);
|
||||
m3.put(e.getValue(), c);
|
||||
} else {
|
||||
c.add(e.getKey());
|
||||
}
|
||||
}
|
||||
for (Map.Entry<String, Collection<String>> e : m3.entrySet()) {
|
||||
Collection<String> c = e.getValue();
|
||||
if (c.size() > 1) e.setValue(Collections.unmodifiableList((ArrayList<String>) c));
|
||||
}
|
||||
REVERSE_ALIASES = Collections.unmodifiableMap(m3);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2009-2015 The Project Lombok Authors.
|
||||
* Copyright (C) 2009-2019 The Project Lombok Authors.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
package lombok.core;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -75,6 +76,14 @@ public class TypeLibrary {
|
||||
}
|
||||
|
||||
public static TypeLibrary createLibraryForSingleType(String fqnSingleton) {
|
||||
if (LombokInternalAliasing.REVERSE_ALIASES.containsKey(fqnSingleton)) {
|
||||
// Internal aliasing is a little too complex to handle with the map-less 'efficient' implementation.
|
||||
TypeLibrary tl = new TypeLibrary();
|
||||
tl.addType(fqnSingleton);
|
||||
tl.lock();
|
||||
return tl;
|
||||
}
|
||||
|
||||
return new TypeLibrary(fqnSingleton);
|
||||
}
|
||||
|
||||
@@ -89,7 +98,7 @@ public class TypeLibrary {
|
||||
if (locked) throw new IllegalStateException("locked");
|
||||
int idx = fullyQualifiedTypeName.lastIndexOf('.');
|
||||
if (idx == -1) throw new IllegalArgumentException(
|
||||
"Only fully qualified types are allowed (and stuff in the default package is not palatable to us either!)");
|
||||
"Only fully qualified types are allowed (types in the default package cannot be added here either)");
|
||||
String unqualified = fullyQualifiedTypeName.substring(idx + 1);
|
||||
if (unqualifiedToQualifiedMap == null) throw new IllegalStateException("SingleType library");
|
||||
|
||||
@@ -97,8 +106,11 @@ public class TypeLibrary {
|
||||
unqualifiedToQualifiedMap.put(unqualified, dotBased);
|
||||
unqualifiedToQualifiedMap.put(fullyQualifiedTypeName, dotBased);
|
||||
unqualifiedToQualifiedMap.put(dotBased, dotBased);
|
||||
for (Map.Entry<String, String> e : LombokInternalAliasing.ALIASES.entrySet()) {
|
||||
if (fullyQualifiedTypeName.equals(e.getValue())) unqualifiedToQualifiedMap.put(e.getKey(), dotBased);
|
||||
Collection<String> oldNames = LombokInternalAliasing.REVERSE_ALIASES.get(fullyQualifiedTypeName);
|
||||
if (oldNames != null) for (String oldName : oldNames) {
|
||||
unqualifiedToQualifiedMap.put(oldName, dotBased);
|
||||
int li = oldName.lastIndexOf('.');
|
||||
if (li != -1) unqualifiedToQualifiedMap.put(oldName.substring(li + 1), dotBased);
|
||||
}
|
||||
|
||||
int idx2 = fullyQualifiedTypeName.indexOf('$', idx + 1);
|
||||
@@ -119,9 +131,6 @@ public class TypeLibrary {
|
||||
public String toQualified(String typeReference) {
|
||||
if (unqualifiedToQualifiedMap == null) {
|
||||
if (typeReference.equals(unqualified) || typeReference.equals(qualified)) return qualified;
|
||||
for (Map.Entry<String, String> e : LombokInternalAliasing.ALIASES.entrySet()) {
|
||||
if (e.getKey().equals(typeReference)) return e.getValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return unqualifiedToQualifiedMap.get(typeReference);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2009-2015 The Project Lombok Authors.
|
||||
* Copyright (C) 2009-2019 The Project Lombok Authors.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -45,7 +45,7 @@ public class TypeResolver {
|
||||
|
||||
public String typeRefToFullyQualifiedName(LombokNode<?, ?, ?> context, TypeLibrary library, String typeRef) {
|
||||
typeRef = LombokInternalAliasing.processAliases(typeRef);
|
||||
// When asking if 'Foo' could possibly be referring to 'bar.Baz', the answer is obviously no.
|
||||
// When asking if 'Foo' could possibly be referring to 'bar.Baz', the answer is obviously no.
|
||||
String qualified = library.toQualified(typeRef);
|
||||
if (qualified == null) return null;
|
||||
|
||||
|
||||
Reference in new issue
Block a user