| /* |
| * Copyright 2018 The Bazel Authors. All rights reserved. |
| * |
| * Licensed 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 io.bazel.kotlin.builder.utils.jars |
| |
| import java.nio.file.Path |
| import java.util.function.Predicate |
| |
| class SourceJarExtractor(destDir: Path, val fileMatcher: Predicate<String> = Predicate { true }) : JarExtractor(destDir) { |
| val jarFiles = mutableListOf<Path>() |
| val sourcesList = mutableListOf<String>() |
| |
| override fun preWrite(isDirectory: Boolean, target: Path): Boolean { |
| if (!isDirectory && fileMatcher.test(target.toString())) { |
| sourcesList.add(target.toString()) |
| } |
| return true |
| } |
| |
| fun execute() { |
| destDir.also { |
| try { |
| it.toFile().mkdirs() |
| } catch (ex: Exception) { |
| throw RuntimeException("could not create unpack directory at $it", ex) |
| } |
| } |
| jarFiles.forEach { |
| try { |
| extract(it) |
| } catch (ex: Throwable) { |
| throw RuntimeException("error extracting source jar $it", ex) |
| } |
| } |
| } |
| } |