aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/java/jarjar/jarjar-core/src/main/java/com/tonicsystems/jarjar/transform/jar/ClassClosureJarProcessor.java
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/java/jarjar/jarjar-core/src/main/java/com/tonicsystems/jarjar/transform/jar/ClassClosureJarProcessor.java')
-rw-r--r--third_party/java/jarjar/jarjar-core/src/main/java/com/tonicsystems/jarjar/transform/jar/ClassClosureJarProcessor.java143
1 files changed, 0 insertions, 143 deletions
diff --git a/third_party/java/jarjar/jarjar-core/src/main/java/com/tonicsystems/jarjar/transform/jar/ClassClosureJarProcessor.java b/third_party/java/jarjar/jarjar-core/src/main/java/com/tonicsystems/jarjar/transform/jar/ClassClosureJarProcessor.java
deleted file mode 100644
index 3a44d3868a..0000000000
--- a/third_party/java/jarjar/jarjar-core/src/main/java/com/tonicsystems/jarjar/transform/jar/ClassClosureJarProcessor.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Copyright 2007 Google Inc.
- *
- * 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 com.tonicsystems.jarjar.transform.jar;
-
-import com.tonicsystems.jarjar.transform.config.PatternUtils;
-import com.tonicsystems.jarjar.transform.config.ClassKeepTransitive;
-import com.tonicsystems.jarjar.transform.Transformable;
-import com.tonicsystems.jarjar.util.ClassNameUtils;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nonnull;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.commons.Remapper;
-import org.objectweb.asm.commons.ClassRemapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Keeps all classes reachable from a given set of roots.
- *
- * Put this early in the chain as it does not honour renames.
- */
-public class ClassClosureJarProcessor extends AbstractFilterJarProcessor {
-
- private static final Logger LOG = LoggerFactory.getLogger(ClassClosureJarProcessor.class);
-
- private static class DependencyCollector extends Remapper {
-
- private final Set<String> dependencies = new HashSet<String>();
-
- @Override
- public String map(String key) {
- if (key.startsWith("java/") || key.startsWith("javax/"))
- return null;
- dependencies.add(key);
- return null;
- }
-
- @Override
- public Object mapValue(Object value) {
- if (value instanceof String) {
- String s = (String) value;
- if (ClassNameUtils.isArrayForName(s)) {
- mapDesc(s.replace('.', '/'));
- } else if (ClassNameUtils.isForName(s)) {
- map(s.replace('.', '/'));
- }
- return value;
- } else {
- return super.mapValue(value);
- }
- }
- }
-
- private final List<ClassKeepTransitive> patterns;
- private final List<String> roots = new ArrayList<String>();
- private final Map<String, Set<String>> dependencies = new HashMap<String, Set<String>>();
- private Set<String> closure;
-
- public ClassClosureJarProcessor(@Nonnull Iterable<? extends ClassKeepTransitive> patterns) {
- this.patterns = PatternUtils.toList(patterns);
- }
-
- public ClassClosureJarProcessor(@Nonnull ClassKeepTransitive... patterns) {
- this(Arrays.asList(patterns));
- }
-
- public void addKeep(@Nonnull ClassKeepTransitive pattern) {
- patterns.add(pattern);
- }
-
- private boolean isEnabled() {
- return !patterns.isEmpty();
- }
-
- @Override
- public Result scan(Transformable struct) throws IOException {
- if (!isEnabled())
- return Result.KEEP;
- try {
- if (ClassNameUtils.isClass(struct.name)) {
- String name = struct.name.substring(0, struct.name.length() - 6);
- for (ClassKeepTransitive pattern : patterns)
- if (pattern.matches(name))
- roots.add(name);
- DependencyCollector collector = new DependencyCollector();
- dependencies.put(name, collector.dependencies);
- new ClassReader(new ByteArrayInputStream(struct.data)).accept(new ClassRemapper(null, collector), ClassReader.EXPAND_FRAMES);
- collector.dependencies.remove(name);
- }
- } catch (Exception e) {
- LOG.warn("Error reading " + struct.name + ": " + e.getMessage());
- }
- return Result.KEEP;
- }
-
- private void addTransitiveClosure(Collection<? super String> out, Collection<String> itemDependencies) {
- if (itemDependencies == null)
- return;
- for (String name : itemDependencies)
- if (out.add(name))
- addTransitiveClosure(out, dependencies.get(name));
- }
-
- @Override
- protected boolean isFiltered(String name) {
- if (closure == null) {
- closure = new HashSet<String>();
- addTransitiveClosure(closure, roots);
- }
- return !closure.contains(name);
- }
-
- @Override
- public Result process(Transformable struct) throws IOException {
- if (!isEnabled())
- return Result.KEEP;
- if (!ClassNameUtils.isClass(struct.name))
- return Result.KEEP;
- return super.process(struct);
- }
-}