package org.netbeans.gradle.project.java.query; import java.io.File; import java.net.URL; import java.util.Locale; import javax.swing.event.ChangeListener; import org.netbeans.api.java.queries.BinaryForSourceQuery.Result; import org.netbeans.gradle.project.query.AbstractBinaryForSourceQuery; import org.netbeans.spi.java.queries.BinaryForSourceQueryImplementation; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProviders; @ServiceProviders({@ServiceProvider(service = BinaryForSourceQueryImplementation.class)}) public final class AutoJavaBinaryForSourceQuery extends AbstractBinaryForSourceQuery { private static final URL[] NO_ROOTS = new URL[0]; public static final String SOURCES_SUFFIX = "-sources.zip"; public static final String JAR_SUFFIX = ".jar"; private static FileObject getJarForSource(FileObject sourceRoot) { String srcFileName = sourceRoot.getNameExt(); if (!srcFileName.toLowerCase(Locale.US).endsWith(SOURCES_SUFFIX)) { return null; } String jarFileName = srcFileName.substring(0, srcFileName.length() - SOURCES_SUFFIX.length()) + JAR_SUFFIX; FileObject dir = sourceRoot.getParent(); if (dir == null) { return null; } return dir.getFileObject(jarFileName); } @Override protected Result tryFindBinaryRoots(File sourceRoot) { final FileObject sourceRootObj = FileUtil.toFileObject(sourceRoot); if (sourceRootObj == null) { return null; } if (getJarForSource(sourceRootObj) == null) { return null; } return new Result() { @Override public URL[] getRoots() { FileObject jar = getJarForSource(sourceRootObj); if (jar == null) { return NO_ROOTS; } return new URL[]{jar.toURL()}; } @Override public void addChangeListener(ChangeListener l) { } @Override public void removeChangeListener(ChangeListener l) { } }; } }