77import java .io .ByteArrayInputStream ;
88import java .io .ByteArrayOutputStream ;
99import java .io .IOException ;
10+ import java .io .InputStreamReader ;
11+ import java .io .Reader ;
1012import java .lang .reflect .InvocationTargetException ;
1113import java .util .Iterator ;
1214
3537import net .sourceforge .pmd .eclipse .runtime .writer .WriterException ;
3638import net .sourceforge .pmd .eclipse .ui .nls .StringKeys ;
3739import net .sourceforge .pmd .eclipse .util .IOUtil ;
38- import net .sourceforge .pmd .lang .ast .JavaCharStream ;
40+ import net .sourceforge .pmd .lang .Language ;
41+ import net .sourceforge .pmd .lang .LanguageRegistry ;
42+ import net .sourceforge .pmd .lang .LanguageVersionHandler ;
43+ import net .sourceforge .pmd .lang .Parser ;
44+ import net .sourceforge .pmd .lang .ast .ParseException ;
45+ import net .sourceforge .pmd .lang .java .JavaLanguageModule ;
3946import net .sourceforge .pmd .lang .java .ast .ASTCompilationUnit ;
40- import net .sourceforge .pmd .lang .java .ast .JavaParser ;
41- import net .sourceforge .pmd .lang .java .ast .ParseException ;
4247
4348/**
4449 * Process PMDGenerateAST action menu. Generate a AST from the selected file.
@@ -55,6 +60,7 @@ public class PMDGenerateASTAction extends AbstractUIAction implements IRunnableW
5560 /**
5661 * @see org.eclipse.ui.IActionDelegate#run(IAction)
5762 */
63+ @ Override
5864 public void run (IAction action ) {
5965 LOG .info ("Generation AST action requested" );
6066
@@ -94,6 +100,7 @@ public void run(IAction action) {
94100 /**
95101 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
96102 */
103+ @ Override
97104 public void selectionChanged (IAction action , ISelection selection ) {
98105 }
99106
@@ -107,10 +114,11 @@ private void generateAST(IFile file) {
107114 LOG .info ("Generating AST for file " + file .getName ());
108115 ByteArrayOutputStream byteArrayOutputStream = null ;
109116 ByteArrayInputStream astInputStream = null ;
110- try {
111- JavaParser parser = new JavaParser (new JavaCharStream (file .getContents ()));
112- parser .setJdkVersion (Integer .MAX_VALUE );
113- ASTCompilationUnit compilationUnit = parser .CompilationUnit ();
117+ try (Reader reader = new InputStreamReader (file .getContents (), file .getCharset ())) {
118+ Language javaLanguage = LanguageRegistry .getLanguage (JavaLanguageModule .NAME );
119+ LanguageVersionHandler languageVersionHandler = javaLanguage .getDefaultVersion ().getLanguageVersionHandler ();
120+ Parser parser = languageVersionHandler .getParser (languageVersionHandler .getDefaultParserOptions ());
121+ ASTCompilationUnit compilationUnit = (ASTCompilationUnit ) parser .parse (file .getName (), reader );
114122 byteArrayOutputStream = new ByteArrayOutputStream ();
115123 IAstWriter astWriter = PMDPlugin .getDefault ().getAstWriter ();
116124 astWriter .write (byteArrayOutputStream , compilationUnit );
@@ -158,13 +166,13 @@ private static String astNameFor(IFile file) {
158166
159167 String name = file .getName ();
160168 int dotPosition = name .indexOf ('.' );
161- String astName = name .substring (0 , dotPosition ) + ".ast" ;
162- return astName ;
169+ return name .substring (0 , dotPosition ) + ".ast" ;
163170 }
164171
165172 /**
166173 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
167174 */
175+ @ Override
168176 public void run (IProgressMonitor monitor ) throws InvocationTargetException , InterruptedException {
169177 monitor .beginTask ("" , structuredSelection .size ());
170178 for (Iterator <?> i = structuredSelection .iterator (); i .hasNext ();) {
0 commit comments