4949import com .sun .tools .javac .tree .JCTree ;
5050import com .sun .tools .javac .tree .JCTree .JCCompilationUnit ;
5151import com .sun .tools .javac .tree .JCTree .JCFieldAccess ;
52- import com .sun .tools .javac .tree .JCTree .JCIdent ;
5352import com .sun .tools .javac .tree .JCTree .JCImport ;
5453import com .sun .tools .javac .util .Context ;
5554import com .sun .tools .javac .util .Log ;
@@ -293,9 +292,7 @@ private static RangeMap<Integer, String> buildReplacements(
293292 }
294293
295294 private static String getSimpleName (JCImport importTree ) {
296- return importTree .getQualifiedIdentifier () instanceof JCIdent
297- ? ((JCIdent ) importTree .getQualifiedIdentifier ()).getName ().toString ()
298- : ((JCFieldAccess ) importTree .getQualifiedIdentifier ()).getIdentifier ().toString ();
295+ return getQualifiedIdentifier (importTree ).getIdentifier ().toString ();
299296 }
300297
301298 private static boolean isUnused (
@@ -304,18 +301,15 @@ private static boolean isUnused(
304301 Multimap <String , Range <Integer >> usedInJavadoc ,
305302 JCImport importTree ,
306303 String simpleName ) {
307- String qualifier =
308- (( JCFieldAccess ) importTree . getQualifiedIdentifier ()) .getExpression ().toString ();
304+ JCFieldAccess qualifiedIdentifier = getQualifiedIdentifier ( importTree );
305+ String qualifier = qualifiedIdentifier .getExpression ().toString ();
309306 if (qualifier .equals ("java.lang" )) {
310307 return true ;
311308 }
312309 if (unit .getPackageName () != null && unit .getPackageName ().toString ().equals (qualifier )) {
313310 return true ;
314311 }
315- if (importTree .getQualifiedIdentifier () instanceof JCFieldAccess
316- && ((JCFieldAccess ) importTree .getQualifiedIdentifier ())
317- .getIdentifier ()
318- .contentEquals ("*" )) {
312+ if (qualifiedIdentifier .getIdentifier ().contentEquals ("*" )) {
319313 return false ;
320314 }
321315
@@ -328,6 +322,15 @@ private static boolean isUnused(
328322 return true ;
329323 }
330324
325+ private static JCFieldAccess getQualifiedIdentifier (JCImport importTree ) {
326+ // Use reflection because the return type is JCTree in some versions and JCFieldAccess in others
327+ try {
328+ return (JCFieldAccess ) JCImport .class .getMethod ("getQualifiedIdentifier" ).invoke (importTree );
329+ } catch (ReflectiveOperationException e ) {
330+ throw new LinkageError (e .getMessage (), e );
331+ }
332+ }
333+
331334 /** Applies the replacements to the given source, and re-format any edited javadoc. */
332335 private static String applyReplacements (String source , RangeMap <Integer , String > replacements ) {
333336 // save non-empty fixed ranges for reformatting after fixes are applied
0 commit comments