diff -r 268875216dfc -r faf96b92a47b src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripDebugPlugin.java --- a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/StripDebugPlugin.java Mon Feb 25 15:15:46 2019 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package jdk.tools.jlink.internal.plugins; - -import java.util.function.Predicate; -import jdk.internal.org.objectweb.asm.ClassReader; -import jdk.internal.org.objectweb.asm.ClassWriter; -import jdk.tools.jlink.plugin.ResourcePool; -import jdk.tools.jlink.plugin.ResourcePoolBuilder; -import jdk.tools.jlink.plugin.ResourcePoolEntry; -import jdk.tools.jlink.plugin.Plugin; - -/** - * - * Strip debug attributes plugin - */ -public final class StripDebugPlugin implements Plugin { - public static final String NAME = "strip-debug"; - private final Predicate predicate; - - public StripDebugPlugin() { - this((path) -> false); - } - - StripDebugPlugin(Predicate predicate) { - this.predicate = predicate; - } - - @Override - public String getName() { - return NAME; - } - - @Override - public String getDescription() { - return PluginsResourceBundle.getDescription(NAME); - } - - @Override - public ResourcePool transform(ResourcePool in, ResourcePoolBuilder out) { - //remove *.diz files as well as debug attributes. - in.transformAndCopy((resource) -> { - ResourcePoolEntry res = resource; - if (resource.type().equals(ResourcePoolEntry.Type.CLASS_OR_RESOURCE)) { - String path = resource.path(); - if (path.endsWith(".class")) { - if (path.endsWith("module-info.class")) { - // XXX. Do we have debug info? Is Asm ready for module-info? - } else { - ClassReader reader = new ClassReader(resource.contentBytes()); - ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); - reader.accept(writer, ClassReader.SKIP_DEBUG); - byte[] content = writer.toByteArray(); - res = resource.copyWithContent(content); - } - } - } else if (predicate.test(res.path())) { - res = null; - } - return res; - }, out); - - return out.build(); - } -}