[jdk21][fixes #3393] Support changed JCImport.qualid type

This commit is contained in:
Rawi01 committed 2023-06-19 22:00:15 +02:00
1 parent 9e5e0c3803
commit 96cd3cd549
4 files changed
+23 -7

No files matched your search

+3 -3
View File
@@ -50,7 +50,7 @@ public class JavacImportList implements ImportList {
@Override public String getFullyQualifiedNameForSimpleNameNoAliasing(String unqualified) {
for (JCTree def : defs) {
if (!(def instanceof JCImport)) continue;
JCTree qual = ((JCImport) def).qualid;
JCTree qual = Javac.getQualid((JCImport) def);
if (!(qual instanceof JCFieldAccess)) continue;
String simpleName = ((JCFieldAccess) qual).name.toString();
if (simpleName.equals(unqualified)) {
@@ -68,7 +68,7 @@ public class JavacImportList implements ImportList {
for (JCTree def : defs) {
if (!(def instanceof JCImport)) continue;
if (((JCImport) def).staticImport) continue;
JCTree qual = ((JCImport) def).qualid;
JCTree qual = Javac.getQualid((JCImport) def);
if (!(qual instanceof JCFieldAccess)) continue;
String simpleName = ((JCFieldAccess) qual).name.toString();
if (!"*".equals(simpleName)) continue;
@@ -87,7 +87,7 @@ public class JavacImportList implements ImportList {
for (JCTree def : defs) {
if (!(def instanceof JCImport)) continue;
if (((JCImport) def).staticImport) continue;
JCTree qual = ((JCImport) def).qualid;
JCTree qual = Javac.getQualid((JCImport) def);
if (!(qual instanceof JCFieldAccess)) continue;
String simpleName = ((JCFieldAccess) qual).name.toString();
if (!"*".equals(simpleName)) continue;
@@ -561,7 +561,7 @@ public class JavacHandlerUtil {
if (!(def instanceof JCImport)) continue;
JCImport imp0rt = (JCImport) def;
if (imp0rt.staticImport) continue;
if (!imp0rt.qualid.toString().equals(name)) continue;
if (!Javac.getQualid(imp0rt).toString().equals(name)) continue;
JavacAugments.JCImport_deletable.set(imp0rt, true);
}
}
@@ -92,6 +92,7 @@ import com.sun.tools.javac.util.Name;
import com.sun.tools.javac.util.Position;
import lombok.javac.CommentInfo;
import lombok.javac.Javac;
import lombok.javac.PackageName;
import lombok.permit.Permit;
import lombok.javac.CommentInfo.EndConnection;
@@ -485,8 +486,9 @@ public class PrettyPrinter extends JCTree.Visitor {
}
@Override public void visitImport(JCImport tree) {
if (tree.qualid instanceof JCFieldAccess) {
JCFieldAccess fa = ((JCFieldAccess) tree.qualid);
JCTree qualid = Javac.getQualid(tree);
if (qualid instanceof JCFieldAccess) {
JCFieldAccess fa = ((JCFieldAccess) qualid);
if (fa.name.length() == 1 && fa.name.contentEquals("*")) {
if (fa.selected instanceof JCFieldAccess) {
JCFieldAccess lombokExperimental = (JCFieldAccess) fa.selected;
@@ -500,7 +502,7 @@ public class PrettyPrinter extends JCTree.Visitor {
aPrint("import ");
if (tree.staticImport) print("static ");
print(tree.qualid);
print(qualid);
println(";", tree);
}
+14
View File
@@ -51,6 +51,7 @@ import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
import com.sun.tools.javac.tree.JCTree.JCExpression;
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
import com.sun.tools.javac.tree.JCTree.JCIdent;
import com.sun.tools.javac.tree.JCTree.JCImport;
import com.sun.tools.javac.tree.JCTree.JCLiteral;
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
@@ -275,6 +276,19 @@ public class Javac {
}
}
/**
* In some versions, the field's type is {@code JCTree}, in others it is {@code JCFieldAccess}, which at the JVM level are not the same.
*/
private static final Field JCIMPORT_QUALID = Permit.permissiveGetField(JCImport.class, "qualid");
public static JCTree getQualid(JCImport tree) {
try {
return (JCTree) JCIMPORT_QUALID.get(tree);
} catch (IllegalAccessException e) {
throw sneakyThrow(e.getCause());
}
}
public static Object getDocComments(JCCompilationUnit cu) {
try {
return JCCOMPILATIONUNIT_DOCCOMMENTS.get(cu);