package org.netbeans.gradle.project.query;
import java.io.File;
import org.netbeans.gradle.project.util.GradleFileUtils;
import org.netbeans.gradle.project.util.NbFunction;
import org.netbeans.gradle.project.util.NbSupplier;
import org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation;
import org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation2;
import org.openide.filesystems.FileObject;
import org.openide.util.lookup.ServiceProvider;
import org.openide.util.lookup.ServiceProviders;
@ServiceProviders({
@ServiceProvider(service = SourceForBinaryQueryImplementation2.class, position = 70),
@ServiceProvider(service = SourceForBinaryQueryImplementation.class, position = 70)})
public final class GradleCacheSourceForBinaryQuery extends AbstractSourceForBinaryQuery {
private final GradleCacheByBinaryLookup sourceLookup;
public GradleCacheSourceForBinaryQuery() {
this(GradleFileUtils.GRADLE_USER_HOME_PROVIDER);
}
public GradleCacheSourceForBinaryQuery(NbSupplier<File> gradleUserHomeProvider) {
this.sourceLookup = new GradleCacheByBinaryLookup(GradleFileUtils.SOURCE_DIR_NAME, gradleUserHomeProvider, binaryToSourceName());
}
public static NbFunction<FileObject, String> binaryToSourceName() {
return new NbFunction<FileObject, String>() {
@Override
public String apply(FileObject arg) {
return GradleFileUtils.binaryToSourceName(arg);
}
};
}
@Override
protected Result tryFindSourceRoot(File binaryRoot) {
return sourceLookup.tryFindEntryByBinary(binaryRoot);
}
}