24 */
25
26 package com.sun.tools.javac.api;
27
28 import java.io.InputStream;
29 import java.io.OutputStream;
30 import java.io.OutputStreamWriter;
31 import java.io.PrintWriter;
32 import java.io.Writer;
33 import java.nio.charset.Charset;
34 import java.util.Collections;
35 import java.util.EnumSet;
36 import java.util.Locale;
37 import java.util.Objects;
38 import java.util.Set;
39
40 import javax.lang.model.SourceVersion;
41 import javax.tools.*;
42
43 import com.sun.source.util.JavacTask;
44 import com.sun.tools.javac.file.JavacFileManager;
45 import com.sun.tools.javac.main.Arguments;
46 import com.sun.tools.javac.main.Option;
47 import com.sun.tools.javac.file.BaseFileManager;
48 import com.sun.tools.javac.file.CacheFSInfo;
49 import com.sun.tools.javac.jvm.Target;
50 import com.sun.tools.javac.util.ClientCodeException;
51 import com.sun.tools.javac.util.Context;
52 import com.sun.tools.javac.util.DefinedBy;
53 import com.sun.tools.javac.util.DefinedBy.Api;
54 import com.sun.tools.javac.util.List;
55 import com.sun.tools.javac.util.Log;
56 import com.sun.tools.javac.util.PropagatedException;
57
58 /**
59 * TODO: describe com.sun.tools.javac.api.Tool
60 *
61 * <p><b>This is NOT part of any supported API.
62 * If you write code that depends on this, you do so at your own
63 * risk. This code and its internal interfaces are subject to change
180 if (fileManager == null) {
181 fileManager = getStandardFileManager(diagnosticListener, null, null);
182 if (fileManager instanceof BaseFileManager baseFileManager) {
183 baseFileManager.autoClose = true;
184 }
185 }
186 fileManager = ccw.wrap(fileManager);
187
188 context.put(JavaFileManager.class, fileManager);
189
190 Arguments args = Arguments.instance(context);
191 args.init("javac", options, classes, compilationUnits);
192
193 // init multi-release jar handling
194 if (fileManager.isSupportedOption(Option.MULTIRELEASE.primaryName) == 1) {
195 Target target = Target.instance(context);
196 List<String> list = List.of(target.multiReleaseValue());
197 fileManager.handleOption(Option.MULTIRELEASE.primaryName, list.iterator());
198 }
199
200 return new JavacTaskImpl(context);
201 } catch (PropagatedException ex) {
202 throw ex.getCause();
203 } catch (ClientCodeException ex) {
204 throw new RuntimeException(ex.getCause());
205 }
206 }
207
208 @Override @DefinedBy(Api.COMPILER)
209 public int run(InputStream in, OutputStream out, OutputStream err, String... arguments) {
210 if (err == null)
211 err = System.err;
212 for (String argument : arguments)
213 Objects.requireNonNull(argument);
214 return com.sun.tools.javac.Main.compile(arguments, new PrintWriter(err, true));
215 }
216
217 @Override @DefinedBy(Api.COMPILER)
218 public Set<SourceVersion> getSourceVersions() {
219 return Collections.unmodifiableSet(EnumSet.range(SourceVersion.RELEASE_3,
|
24 */
25
26 package com.sun.tools.javac.api;
27
28 import java.io.InputStream;
29 import java.io.OutputStream;
30 import java.io.OutputStreamWriter;
31 import java.io.PrintWriter;
32 import java.io.Writer;
33 import java.nio.charset.Charset;
34 import java.util.Collections;
35 import java.util.EnumSet;
36 import java.util.Locale;
37 import java.util.Objects;
38 import java.util.Set;
39
40 import javax.lang.model.SourceVersion;
41 import javax.tools.*;
42
43 import com.sun.source.util.JavacTask;
44 import com.sun.tools.javac.code.Preview;
45 import com.sun.tools.javac.file.JavacFileManager;
46 import com.sun.tools.javac.main.Arguments;
47 import com.sun.tools.javac.main.Option;
48 import com.sun.tools.javac.file.BaseFileManager;
49 import com.sun.tools.javac.file.CacheFSInfo;
50 import com.sun.tools.javac.jvm.Target;
51 import com.sun.tools.javac.util.ClientCodeException;
52 import com.sun.tools.javac.util.Context;
53 import com.sun.tools.javac.util.DefinedBy;
54 import com.sun.tools.javac.util.DefinedBy.Api;
55 import com.sun.tools.javac.util.List;
56 import com.sun.tools.javac.util.Log;
57 import com.sun.tools.javac.util.PropagatedException;
58
59 /**
60 * TODO: describe com.sun.tools.javac.api.Tool
61 *
62 * <p><b>This is NOT part of any supported API.
63 * If you write code that depends on this, you do so at your own
64 * risk. This code and its internal interfaces are subject to change
181 if (fileManager == null) {
182 fileManager = getStandardFileManager(diagnosticListener, null, null);
183 if (fileManager instanceof BaseFileManager baseFileManager) {
184 baseFileManager.autoClose = true;
185 }
186 }
187 fileManager = ccw.wrap(fileManager);
188
189 context.put(JavaFileManager.class, fileManager);
190
191 Arguments args = Arguments.instance(context);
192 args.init("javac", options, classes, compilationUnits);
193
194 // init multi-release jar handling
195 if (fileManager.isSupportedOption(Option.MULTIRELEASE.primaryName) == 1) {
196 Target target = Target.instance(context);
197 List<String> list = List.of(target.multiReleaseValue());
198 fileManager.handleOption(Option.MULTIRELEASE.primaryName, list.iterator());
199 }
200
201 // pass preview mode to the file manager:
202 if (fileManager.isSupportedOption(Option.PREVIEWMODE.primaryName) == 1) {
203 Preview preview = Preview.instance(context);
204 fileManager.handleOption(Option.PREVIEWMODE.primaryName, List.of(String.valueOf(preview.isEnabled())).iterator());
205 }
206
207 return new JavacTaskImpl(context);
208 } catch (PropagatedException ex) {
209 throw ex.getCause();
210 } catch (ClientCodeException ex) {
211 throw new RuntimeException(ex.getCause());
212 }
213 }
214
215 @Override @DefinedBy(Api.COMPILER)
216 public int run(InputStream in, OutputStream out, OutputStream err, String... arguments) {
217 if (err == null)
218 err = System.err;
219 for (String argument : arguments)
220 Objects.requireNonNull(argument);
221 return com.sun.tools.javac.Main.compile(arguments, new PrintWriter(err, true));
222 }
223
224 @Override @DefinedBy(Api.COMPILER)
225 public Set<SourceVersion> getSourceVersions() {
226 return Collections.unmodifiableSet(EnumSet.range(SourceVersion.RELEASE_3,
|