/* * Copyright (C) 2019 The Android Open Source Project * * 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.android.preload.check; import dalvik.system.DexFile; import java.util.Collection; import java.util.Enumeration; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Test boot classpath classes that satisfy a given regular expression to be not initialized. * Optionally check that at least one class was matched. */ public class NotInitializedRegex { /** * First arg (mandatory): regular exception. Second arg (optional): boolean to denote a * required match. */ public static void main(String[] args) throws Exception { Matcher m = Pattern.compile(args[0]).matcher(""); boolean requiresMatch = args.length > 1 ? Boolean.parseBoolean(args[1]) : false; Collection dexFiles = Util.getBootDexFiles(); int matched = 0, notMatched = 0; for (DexFile dexFile : dexFiles) { Enumeration entries = dexFile.entries(); while (entries.hasMoreElements()) { String entry = entries.nextElement(); m.reset(entry); if (m.matches()) { System.out.println(entry + ": match"); matched++; check(entry); } else { System.out.println(entry + ": no match"); notMatched++; } } } System.out.println("Matched: " + matched + " Not-Matched: " + notMatched); if (requiresMatch && matched == 0) { throw new RuntimeException("Did not find match"); } System.out.println("OK"); } private static void check(String name) { Util.assertNotInitialized(name, null); } }