8000 Allow all SDK access from task outputs, IDE config reporting with SDKs · sakerbuild/saker.java.compiler@0f56739 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0f56739

Browse files
committed
Allow all SDK access from task outputs, IDE config reporting with SDKs
1 parent 3570b56 commit 0f56739

16 files changed

+334
-93
lines changed

api/src/main/saker/java/compiler/api/classpath/ClassPathEntry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public interface ClassPathEntry {
6060
*
6161
* @return The input file of the classpath entry.
6262
* @see ClassPathEntryInputFile#accept(ClassPathEntryInputFileVisitor)
63-
* @since 0.8.4
63+
* @since saker.java.compiler 0.8.4
6464
*/
6565
public default ClassPathEntryInputFile getInputFile() {
6666
return ClassPathEntryInputFile.create(getFileLocation());

api/src/main/saker/java/compiler/api/classpath/ClassPathEntryInputFile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
*
3535
* @see ClassPathEntry
3636
* @see ClassPathEntry#getInputFile()
37-
* @since 0.8.4
37+
* @since saker.java.compiler 0.8.4
3838
*/
3939
public interface ClassPathEntryInputFile {
4040
/**

api/src/main/saker/java/compiler/api/compile/JavaCompilationConfigurationOutput.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
*/
1616
package saker.java.compiler.api.compile;
1717

18+
import java.util.NavigableMap;
19+
1820
import saker.build.file.path.SakerPath;
21+
import saker.build.thirdparty.saker.util.ObjectUtils;
1922
import saker.sdk.support.api.SDKDescription;
2023

2124
/**
@@ -84,7 +87,17 @@ public interface JavaCompilationConfigurationOutput {
8487
*
8588
* @return The SDK description.
8689
*/
87-
public SDKDescription getJavaSDK();
90+
public default SDKDescription getJavaSDK() {
91+
return ObjectUtils.getMapValue(getSDKs(), SakerJavaCompilerUtils.DEFAULT_SDK_NAME);
92+
}
93+
94+
/**
95+
* Gets the SDKs that were used during the compilation.
96+
*
97+
* @return The SDK names mapped to their descriptions.
98+
* @since saker.java.compiler 0.8.5
99+
*/
100+
public NavigableMap<String, SDKDescription> getSDKs();
88101

89102
@Override
90103
public int hashCode();

api/src/main/saker/java/compiler/api/compile/JavaCompilerTaskFrontendOutput.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package saker.java.compiler.api.compile;
1717

18+
import java.util.NavigableMap;
19+
1820
import saker.build.file.path.SakerPath;
1921
import saker.build.task.utils.StructuredTaskResult;
2022
import saker.sdk.support.api.SDKDescription;
@@ -130,4 +132,15 @@ public interface JavaCompilerTaskFrontendOutput {
130132
*/
131133
public StructuredTaskResult getModuleName();
132134

135+
//NavigableMap<String, SDKDescription>
136+
/**
137+
* Gets the SDKs that were used during the Java compilation.
138+
* <p>
139+
* The result is an instance of {@link NavigableMap NavigableMap&lt;String, SDKDescription&gt;}.
140+
*
141+
* @return The structured task result of the used SDKs.
142+
* @since saker.java.compiler 0.8.5
143+
*/
144+
public StructuredTaskResult getSDKs();
145+
133146
}

impl/src/main/saker/java/compiler/impl/compile/ClassPathIDEConfigurationEntry.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,14 @@
2424
import saker.build.file.path.SakerPath;
2525
import saker.build.task.utils.StructuredTaskResult;
2626
import saker.build.thirdparty.saker.util.io.SerialUtils;
27+
import saker.java.compiler.api.classpath.ClassPathEntryInputFile;
2728
import saker.java.compiler.api.classpath.JavaSourceDirectory;
2829
import saker.std.api.file.location.FileLocation;
2930

3031
public class ClassPathIDEConfigurationEntry implements Externalizable {
3132
private static final long serialVersionUID = 1L;
3233

33-
private FileLocation fileLocation;
34+
private ClassPathEntryInputFile inputFile;
3435
private Collection<? extends JavaSourceDirectory> sourceDirectories;
3536
private StructuredTaskResult sourceAttachment;
3637
private StructuredTaskResult docAttachment;
@@ -45,18 +46,27 @@ public ClassPathIDEConfigurationEntry() {
4546
public ClassPathIDEConfigurationEntry(FileLocation fileLocation,
4647
Collection<? extends JavaSourceDirectory> sourceDirectories, StructuredTaskResult sourceAttachment,
4748
StructuredTaskResult docAttachment) {
48-
this.fileLocation = fileLocation;
49+
this.inputFile = ClassPathEntryInputFile.create(fileLocation);
50+
this.sourceDirectories = sourceDirectories;
51+
this.sourceAttachment = sourceAttachment;
52+
this.docAttachment = docAttachment;
53+
}
54+
55+
public ClassPathIDEConfigurationEntry(ClassPathEntryInputFile inputFile,
56+
Collection<? extends JavaSourceDirectory> sourceDirectories, StructuredTaskResult sourceAttachment,
57+
StructuredTaskResult docAttachment) {
10000 58+
this.inputFile = inputFile;
4959
this.sourceDirectories = sourceDirectories;
5060
this.sourceAttachment = sourceAttachment;
5161
this.docAttachment = docAttachment;
5262
}
5363

5464
public ClassPathIDEConfigurationEntry(FileLocation fileLocation) {
55-
this.fileLocation = fileLocation;
65+
this.inputFile = ClassPathEntryInputFile.create(fileLocation);
5666
}
5767

58-
public FileLocation getFileLocation() {
59-
return fileLocation;
68+
public ClassPathEntryInputFile getInputFile() {
69+
return inputFile;
6070
}
6171

6272
public Collection<? extends JavaSourceDirectory> getSourceDirectories() {
@@ -81,7 +91,7 @@ public SakerPath getSourceGenDirectory() {
8191

8292
@Override
8393
public void writeExternal(ObjectOutput out) throws IOException {
84-
out.writeObject(fileLocation);
94+
out.writeObject(inputFile);
8595
SerialUtils.writeExternalCollection(out, sourceDirectories);
8696
out.writeObject(sourceAttachment);
8797
out.writeObject(docAttachment);
@@ -90,7 +100,7 @@ public void writeExternal(ObjectOutput out) throws IOException {
90100

91101
@Override
92102
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
93-
fileLocation = (FileLocation) in.readObject();
103+
inputFile = (ClassPathEntryInputFile) in.readObject();
94104
sourceDirectories = SerialUtils.readExternalImmutableLinkedHashSet(in);
95105
sourceAttachment = (StructuredTaskResult) in.readObject();
96106
docAttachment = (StructuredTaskResult) in.readObject();
@@ -102,7 +112,7 @@ public int hashCode() {
102112
final int prime = 31;
103113
int result = 1;
104114
result = prime * result + ((docAttachment == null) ? 0 : docAttachment.hashCode());
105-
result = prime * result + ((fileLocation == null) ? 0 : fileLocation.hashCode());
115+
result = prime * result + ((inputFile == null) ? 0 : inputFile.hashCode());
106116
result = prime * result + ((sourceAttachment == null) ? 0 : sourceAttachment.hashCode());
107117
result = prime * result + ((sourceDirectories == null) ? 0 : sourceDirectories.hashCode());
108118
result = prime * result + ((sourceGenDirectory == null) ? 0 : sourceGenDirectory.hashCode());
@@ -123,10 +133,10 @@ public boolean equals(Object obj) {
123133
return false;
124134
} else if (!docAttachment.equals(other.docAttachment))
125135
return false;
126-
if (fileLocation == null) {
127-
if (other.fileLocation != null)
136+
if (inputFile == null) {
137+
if (other.inputFile != null)
128138
return false;
129-
} else if (!fileLocation.equals(other.fileLocation))
139+
} else if (!inputFile.equals(other.inputFile))
130140
return false;
131141
if (sourceAttachment == null) {
132142
if (other.sourceAttachment != null)
@@ -148,7 +158,7 @@ public boolean equals(Object obj) {
148158

149159
@Override
150160
public String toString() {
151-
return getClass().getSimpleName() + "[" + (fileLocation != null ? "fileLocation=" + fileLocation + ", " : "")
161+
return getClass().getSimpleName() + "[" + (inputFile != null ? "fileLocation=" + inputFile + ", " : "")
152162
+ (sourceDirectories != null ? "sourceDirectories=" + sourceDirectories + ", " : "")
153163
+ (sourceAttachment != null ? "sourceAttachment=" + sourceAttachment + ", " : "")
154164
+ (docAttachment != null ? "docAttachment=" + docAttachment : "") + "]";

impl/src/main/saker/java/compiler/impl/compile/FullWorkerJavaCompilerTaskFactory.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.NavigableMap;
2323
import java.util.Objects;
2424
import java.util.Set;
25+
import java.util.TreeMap;
26+
import java.util.Map.Entry;
2527

2628
import saker.build.file.SakerDirectory;
2729
import saker.build.file.SakerFile;
@@ -44,6 +46,7 @@
4446
import saker.sdk.support.api.IndeterminateSDKDescription;
4547
import saker.sdk.support.api.SDKDescription;
4648
import saker.sdk.support.api.SDKReference;
49+
import saker.sdk.support.api.SDKSupportUtils;
4750
import saker.sdk.support.api.exc.SDKNotFoundException;
4851
import testing.saker.java.compiler.TestFlag;
4952

@@ -106,9 +109,14 @@ private InternalJavaCompilerOutput compile(TaskContext taskcontext) throws IOExc
106109
throw new SDKNotFoundException("No SDK found with name: " + JavaSDKReference.DEFAULT_SDK_NAME);
107110
}
108111

109-
SDKDescription javasdkdesc = sdks.get(JavaSDKReference.DEFAULT_SDK_NAME);
110-
if (javasdkdesc instanceof IndeterminateSDKDescription) {
111-
javasdkdesc = ((IndeterminateSDKDescription) javasdkdesc).pinSDKDescription(javasdkreference);
112+
NavigableMap<String, SDKDescription> pinnedsdks = new TreeMap<>(SDKSupportUtils.getSDKNameComparator());
113+
for (Entry<String, SDKReference> entry : sdkrefs.entrySet()) {
114+
String sdkname = entry.getKey();
115+
SDKDescription desc = sdks.get(sdkname);
116+
if (desc instanceof IndeterminateSDKDescription) {
117+
desc = ((IndeterminateSDKDescription) desc).pinSDKDescription(entry.getValue());
118+
}
119+
pinnedsdks.put(sdkname, desc);
112120
}
113121

114122
String modulename;
@@ -170,7 +178,8 @@ private InternalJavaCompilerOutput compile(TaskContext taskcontext) throws IOExc
170178
//report the ide configuration even if the compilation failed
171179
startIdeConfigurationTask(taskcontext, taskid.getPassIdentifier(), javasdkreference,
172180
ObjectUtils.isNullOrEmpty(annotationProcessors) ? null : outputSourceDirectory.getSakerPath(),
173-
classpathentries, bootclasspathentries, outputClassDirectory.getSakerPath(), modulepathentries);
181+
classpathentries, bootclasspathentries, outputClassDirectory.getSakerPath(), modulepathentries,
182+
pinnedsdks);
174183
}
175184

176185
if (TestFlag.ENABLED) {
@@ -182,7 +191,7 @@ private InternalJavaCompilerOutput compile(TaskContext taskcontext) throws IOExc
182191

183192
SimpleJavaCompilationOutputConfiguration outputconfig = new SimpleJavaCompilationOutputConfiguration(taskid,
184193
outputClassDirectory.getSakerPath(), outputNativeHeaderDirectory.getSakerPath(),
185-
outputResourceDirectory.getSakerPath(), outputSourceDirectory.getSakerPath(), modulename, javasdkdesc);
194+
outputResourceDirectory.getSakerPath(), outputSourceDirectory.getSakerPath(), modulename, pinnedsdks);
186195
taskcontext.startTask(JavaTaskUtils.createJavaCompilationConfigurationOutputTaskIdentifier(taskid),
187196
new JavaCompilationConfigLiteralTaskFactory(outputconfig), null);
188197

@@ -198,7 +207,8 @@ private InternalJavaCompilerOutput compile(TaskContext taskcontext) throws IOExc
198207
private void startIdeConfigurationTask(TaskContext taskcontext, String compilationId, SDKReference javacompilersdk,
199208
SakerPath processorGenDirectory, Collection<? extends ClassPathIDEConfigurationEntry> classPathEntries,
200209
Collection<? extends ClassPathIDEConfigurationEntry> bootClassPathEntries, SakerPath outputBinDirectory,
201-
Collection<? extends ModulePathIDEConfigurationEntry> modulepathentries) throws Exception {
210+
Collection<? extends ModulePathIDEConfigurationEntry> modulepathentries,
211+
NavigableMap<String, SDKDescription> pinnedsdks) throws Exception {
202212
JavaIDEConfigurationReportingTaskFactory task = new JavaIDEConfigurationReportingTaskFactory(compilationId);
203213
task.setAddExports(addExports);
204214
task.setCompilerJavaVersion(javacompilersdk.getProperty(JavaSDKReference.PROPERTY_JAVA_VERSION));
@@ -210,6 +220,7 @@ private void startIdeConfigurationTask(TaskContext taskcontext, String compilati
210220
task.setParameters(parameters);
211221
task.setCompilerInstallLocation(javacompilersdk.getPath(JavaSDKReference.PATH_INSTALL_LOCATION));
212222
task.setClassPathEntries(classPathEntries);
223+
task.setSdks(pinnedsdks);
213224

214225
TaskIdentifier taskid = JavaIDEConfigurationReportingTaskFactory.createTaskIdentifier(compilationId);
215226
taskcontext.startTask(taskid, task, null);

impl/src/main/saker/java/compiler/impl/compile/IncrementalWorkerJavaCompilerTaskFactory.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.NavigableMap;
2626
import java.util.Objects;
2727
import java.util.Set;
28+
import java.util.TreeMap;
2829

2930
import javax.annotation.processing.Processor;
3031

@@ -68,6 +69,7 @@
6869
import saker.sdk.support.api.IndeterminateSDKDescription;
6970
import saker.sdk.support.api.SDKDescription;
7071
import saker.sdk.support.api.SDKReference;
72+
import saker.sdk.support.api.SDKSupportUtils;
7173
import saker.sdk.support.api.exc.SDKNotFoundException;
7274
import testing.saker.java.compiler.TestFlag;
7375

@@ -140,9 +142,14 @@ private InternalJavaCompilerOutput compile(TaskContext taskcontext) throws IOExc
140142
throw new SDKNotFoundException("No SDK found with name: " + JavaSDKReference.DEFAULT_SDK_NAME);
141143
}
142144

143-
SDKDescription javasdkdesc = sdks.get(JavaSDKReference.DEFAULT_SDK_NAME);
144-
if (javasdkdesc instanceof IndeterminateSDKDescription) {
145-
javasdkdesc = ((IndeterminateSDKDescription) javasdkdesc).pinSDKDescription(javasdkreference);
145+
NavigableMap<String, SDKDescription> pinnedsdks = new TreeMap<>(SDKSupportUtils.getSDKNameComparator());
146+
for (Entry<String, SDKReference> entry : sdkrefs.entrySet()) {
147+
String sdkname = entry.getKey();
148+
SDKDescription desc = sdks.get(sdkname);
149+
if (desc instanceof IndeterminateSDKDescription) {
150+
desc = ((IndeterminateSDKDescription) desc).pinSDKDescription(entry.getValue());
151+
}
152+
pinnedsdks.put(sdkname, desc);
146153
}
147154

148155
String modulename;
@@ -209,7 +216,8 @@ private InternalJavaCompilerOutput compile(TaskContext taskcontext) throws IOExc
209216
//report the ide configuration even if the compilation failed
210217
startIdeConfigurationTask(taskcontext, taskid.getPassIdentifier(), javasdkreference,
211218
ObjectUtils.isNullOrEmpty(annotationProcessors) ? null : outputSourceDirectory.getSakerPath(),
212-
classpathentries, bootclasspathentries, outputClassDirectory.getSakerPath(), modulepathentries);
219+
classpathentries, bootclasspathentries, outputClassDirectory.getSakerPath(), modulepathentries,
220+
pinnedsdks);
213221
}
214222

215223
Object abiversionkey = info.getAbiVersionKey();
@@ -224,7 +232,7 @@ private InternalJavaCompilerOutput compile(TaskContext taskcontext) throws IOExc
224232

225233
SimpleJavaCompilationOutputConfiguration outputconfig = new SimpleJavaCompilationOutputConfiguration(taskid,
226234
outputClassDirectory.getSakerPath(), outputNativeHeaderDirectory.getSakerPath(),
227-
outputResourceDirectory.getSakerPath(), outputSourceDirectory.getSakerPath(), modulename, javasdkdesc);
235+
outputResourceDirectory.getSakerPath(), outputSourceDirectory.getSakerPath(), modulename, pinnedsdks);
228236

229237
InternalJavaCompilerOutputImpl output = new InternalJavaCompilerOutputImpl(sourceDirectories, classPath,
230238
modulePath, abiversionkey, implementationversionkey, outputconfig);
@@ -300,7 +308,8 @@ protected Entry<SakerPath, ContentDescriptor> transformEntry(SakerPath key, File
300308
private void startIdeConfigurationTask(TaskContext taskcontext, String compilationId, SDKReference javacompilersdk,
301309
SakerPath processorGenDirectory, Collection<? extends ClassPathIDEConfigurationEntry> classPathEntries,
302310
Collection<? extends ClassPathIDEConfigurationEntry> bootClassPathEntries, SakerPath outputBinDirectory,
303-
Collection<? extends ModulePathIDEConfigurationEntry> modulepathentries) throws Exception {
311+
Collection<? extends ModulePathIDEConfigurationEntry> modulepathentries,
312+
NavigableMap<String, SDKDescription> pinnedsdks) throws Exception {
304313
JavaIDEConfigurationReportingTaskFactory task = new JavaIDEConfigurationReportingTaskFactory(compilationId);
305314
task.setAddExports(addExports);
306315
task.setCompilerJavaVersion(javacompilersdk.getProperty(JavaSDKReference.PROPERTY_JAVA_VERSION));
@@ -312,6 +321,7 @@ private void startIdeConfigurationTask(TaskContext taskcontext, String compilati
312321
task.setParameters(parameters);
313322
task.setCompilerInstallLocation(javacompilersdk.getPath(JavaSDKReference.PATH_INSTALL_LOCATION));
314323
task.setClassPathEntries(classPathEntries);
324+
task.setSdks(pinnedsdks);
315325

316326
TaskIdentifier taskid = JavaIDEConfigurationReportingTaskFactory.createTaskIdentifier(compilationId);
317327
taskcontext.startTask(taskid, task, null);

impl/src/main/saker/java/compiler/impl/compile/InternalJavaCompilerOutputImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.ObjectInput;
2121
import java.io.ObjectOutput;
2222
import java.util.Collection;
23+
import java.util.NavigableMap;
2324

2425
import saker.build.file.path.SakerPath;
2526
import saker.build.thirdparty.saker.util.io.SerialUtils;
@@ -160,6 +161,11 @@ public SDKDescription getJavaSDK() {
160161
return outputConfig.getJavaSDK();
161162
}
162163

164+
@Override
165+
public NavigableMap<String, SDKDescription> getSDKs() {
166+
return outputConfig.getSDKs();
167+
}
168+
163169
public void setHadAnnotationProcessors(boolean hadAnnotationProcessors) {
164170
this.hadAnnotationProcessors = hadAnnotationProcessors;
165171
}

0 commit comments

Comments
 (0)
0