org_aspectj_ajde_core_tests_InpathTest_java
org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ModuleBinding
PackageBinding getVisiblePackage(PackageBinding parent, char[] name) {
        PackageBinding pkg = parent != null ? parent.getPackage0(name) : this.environment.getPackage0(name);
        if (pkg != null) {
            if (pkg == LookupEnvironment.TheNotFoundPackage) {
                return null;
            }
            return pkg;
        }
        char[][] parentName = parent == null ? CharOperation.NO_CHAR_CHAR : parent.compoundName;
        char[][] subPkgCompoundName = CharOperation.arrayConcat(parentName, name);
        char[] fullFlatName = CharOperation.concatWith(subPkgCompoundName, '.');
        PackageBinding binding = (PackageBinding)this.declaredPackages.get(fullFlatName);
        char[][] declaringModuleNames = null;
        if (this.environment.useModuleSystem) {
            IModuleAwareNameEnvironment moduleEnv = (IModuleAwareNameEnvironment)this.environment.nameEnvironment;
            declaringModuleNames = moduleEnv.getUniqueModulesDeclaringPackage(subPkgCompoundName, this.nameForLookup());
            if (binding == null && declaringModuleNames != null) {
                if (CharOperation.containsEqual(declaringModuleNames, this.moduleName)) {
                    PlainPackageBinding singleParent;
                    if (parent != null && (singleParent = parent.getIncarnation(this)) != null && singleParent != parent) {
                        binding = singleParent.getPackage0(name);
                    }
                    if (binding == null) {
                        binding = this.createDeclaredPackage(subPkgCompoundName, parent);
                    }
                } else {
                    char[][] cArray = declaringModuleNames;
                    int n = declaringModuleNames.length;
                    int n2 = 0;
                    while (n2 < n) {
                        char[] declaringModuleName = cArray[n2];
                        ModuleBinding declaringModule = this.environment.root.getModule(declaringModuleName);
                        if (declaringModule != null) {
                            PlainPackageBinding declaredPackage = declaringModule.getDeclaredPackage(fullFlatName);
                            binding = SplitPackageBinding.combine(declaredPackage, binding, this);
                        }
                        ++n2;
                    }
                }
            }
        } else if (this.environment.nameEnvironment.isPackage(parentName, name)) {
            binding = this.createDeclaredPackage(subPkgCompoundName, parent);
        }
        binding = this.combineWithPackagesFromOtherRelevantModules(binding, subPkgCompoundName, declaringModuleNames);
        assert (binding == null || binding instanceof PlainPackageBinding || binding.enclosingModule == this);
        if (binding == null || !binding.isValidBinding()) {
            if (parent != null) {
                if (binding == null) {
                    parent.addNotFoundPackage(name);
                } else {
                    parent.knownPackages.put(name, binding);
                }
            } else {
                this.environment.knownPackages.put(name, LookupEnvironment.TheNotFoundPackage);
            }
            return null;
        }
        if (parentName.length == 0) {
            this.environment.knownPackages.put(name, binding);
        } else if (parent != null) {
            binding = parent.addPackage(binding, this);
        }
        return binding;
    }
 -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.String.valueOf(char[]): java.lang.String -> java.util.Hashtable.get(java.lang.Object): java.lang.Object -> java.lang.String.valueOf(java.lang.Object): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.io.File.isDirectory(): boolean -> java.util.Hashtable.put(java.lang.Object,java.lang.Object): java.lang.Object -> java.util.Set.contains(java.lang.Object): boolean -> java.util.Hashtable.get(java.lang.Object): java.lang.Object -> java.lang.String.valueOf(java.lang.Object): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.io.File.isDirectory(): boolean -> java.util.Hashtable.put(java.lang.Object,java.lang.Object): java.lang.Object -> java.io.File.toString(): java.lang.String -> java.util.Map.computeIfAbsent(java.lang.Object,java.util.function.Function): java.lang.Object -> java.util.Optional.orElse(java.lang.Object): java.lang.Object -> java.lang.String.replace(char,char): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.util.Hashtable.get(java.lang.Object): java.lang.Object -> java.lang.String.valueOf(java.lang.Object): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.io.File.isDirectory(): boolean -> java.lang.String.length(): int -> java.lang.String.lastIndexOf(int): int -> java.lang.String.charAt(int): char -> java.lang.String.charAt(int): char -> java.lang.String.charAt(int): char -> java.lang.String.charAt(int): char -> java.io.File.list(): java.lang.String[] -> java.util.Hashtable.put(java.lang.Object,java.lang.Object): java.lang.Object -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.copyOfRange(java.lang.Object[],int,int): java.lang.Object[] -> java.util.Arrays.copyOfRange(java.lang.Object[],int,int): java.lang.Object[] -> java.util.Arrays.asList(java.lang.Object[]): java.util.List -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [CALL] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void [EXIT] [CALL] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void [EXIT] [CALL] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean [EXIT] [EXIT] [CALL] [CALL] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void [EXIT] [CALL] [CALL] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void [EXIT] -> java.lang.String.valueOf(char[]): java.lang.String [CALL] [CALL] -> java.util.Hashtable.get(java.lang.Object): java.lang.Object -> java.lang.String.valueOf(java.lang.Object): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.io.File.isDirectory(): boolean -> java.util.Hashtable.put(java.lang.Object,java.lang.Object): java.lang.Object [EXIT] [CALL] [EXIT] [EXIT] [CALL] -> java.util.Set.contains(java.lang.Object): boolean [CALL] [EXIT] [EXIT] [CALL] [CALL] -> java.util.Hashtable.get(java.lang.Object): java.lang.Object -> java.lang.String.valueOf(java.lang.Object): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.io.File.isDirectory(): boolean -> java.util.Hashtable.put(java.lang.Object,java.lang.Object): java.lang.Object [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] -> java.io.File.toString(): java.lang.String -> java.util.Map.computeIfAbsent(java.lang.Object,java.util.function.Function): java.lang.Object -> java.util.Optional.orElse(java.lang.Object): java.lang.Object [EXIT] [EXIT] [CALL] -> java.lang.String.replace(char,char): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] -> java.util.Hashtable.get(java.lang.Object): java.lang.Object -> java.lang.String.valueOf(java.lang.Object): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.io.File.isDirectory(): boolean -> java.lang.String.length(): int -> java.lang.String.lastIndexOf(int): int -> java.lang.String.charAt(int): char [CALL] [EXIT] -> java.lang.String.charAt(int): char [CALL] [EXIT] -> java.lang.String.charAt(int): char [CALL] [EXIT] -> java.lang.String.charAt(int): char [CALL] [EXIT] -> java.io.File.list(): java.lang.String[] -> java.util.Hashtable.put(java.lang.Object,java.lang.Object): java.lang.Object [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void [EXIT] [CALL] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean [CALL] -> java.util.Arrays.copyOfRange(java.lang.Object[],int,int): java.lang.Object[] -> java.util.Arrays.copyOfRange(java.lang.Object[],int,int): java.lang.Object[] [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.util.Arrays.asList(java.lang.Object[]): java.util.List [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT]