This is an automated email from the ASF dual-hosted git repository. jtulach pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push: new 00baf1aa55 Locate sources JAR if it is next to binary JAR new 9a86d279f8 Merge pull request #5156 from jtulach/jtulach/SourceNextToBinary 00baf1aa55 is described below commit 00baf1aa552d46e0b44622938546a9d9f7951ec8 Author: Jaroslav Tulach <jaroslav.tul...@apidesign.org> AuthorDate: Tue Dec 27 04:53:45 2022 +0100 Locate sources JAR if it is next to binary JAR --- .../classpath/SourceNextToBinaryQueryImpl.java | 65 ++++++++++++++++++++++ .../classpath/SourceNextToBinaryQueryImplTest.java | 49 ++++++++++++++++ 2 files changed, 114 insertions(+) diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImpl.java b/java/java.source.base/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImpl.java new file mode 100644 index 0000000000..8a8874bbb0 --- /dev/null +++ b/java/java.source.base/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImpl.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.netbeans.modules.java.source.classpath; + +import java.net.URL; +import javax.swing.event.ChangeListener; +import org.netbeans.api.java.queries.SourceForBinaryQuery; +import org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation; +import org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation2; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; +import org.openide.filesystems.URLMapper; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = SourceForBinaryQueryImplementation.class, position = 100000) +public final class SourceNextToBinaryQueryImpl implements SourceForBinaryQueryImplementation { + @Override + public SourceForBinaryQuery.Result findSourceRoots(URL binaryRoot) { + URL file = FileUtil.getArchiveFile(binaryRoot); + if (file != null) { + FileObject fo = URLMapper.findFileObject(file); + if (fo != null) { + FileObject src = fo.getParent().getFileObject(fo.getName() + "-sources", fo.getExt()); + if (src != null) { + return new SourceForBinaryQueryImplementation2.Result() { + @Override + public boolean preferSources() { + return false; + } + + @Override + public FileObject[] getRoots() { + return new FileObject[]{FileUtil.getArchiveRoot(src)}; + } + + @Override + public void addChangeListener(ChangeListener l) { + } + + @Override + public void removeChangeListener(ChangeListener l) { + } + }; + } + } + } + return null; + } +} diff --git a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImplTest.java b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImplTest.java new file mode 100644 index 0000000000..0393ee8325 --- /dev/null +++ b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/classpath/SourceNextToBinaryQueryImplTest.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.netbeans.modules.java.source.classpath; + +import java.net.URL; +import org.netbeans.api.java.queries.SourceForBinaryQuery; +import org.netbeans.junit.NbTestCase; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; +import org.openide.filesystems.URLMapper; + +public final class SourceNextToBinaryQueryImplTest extends NbTestCase { + public SourceNextToBinaryQueryImplTest(String n) { + super(n); + } + + public void testFindSourceNextToBinary() throws Exception { + clearWorkDir(); + FileObject root = FileUtil.toFileObject(getWorkDir()); + assertNotNull("Root for testing found", root); + FileObject dir = root.createFolder("testFolder"); + FileObject jar = dir.createData("junit-4.12", "jar"); + FileObject src = dir.createData("junit-4.12-sources", "jar"); + + URL jarRoot = FileUtil.getArchiveRoot(URLMapper.findURL(jar, URLMapper.INTERNAL)); + SourceNextToBinaryQueryImpl instance = new SourceNextToBinaryQueryImpl(); + SourceForBinaryQuery.Result result = instance.findSourceRoots(jarRoot); + assertNotNull("result is found", result); + assertEquals("ONe root", 1, result.getRoots().length); + FileObject found = FileUtil.getArchiveFile(result.getRoots()[0]); + assertEquals("The right source file found", src, found); + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists