/* * Copyright 2016 Google Inc. 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 com.google.turbine.binder.bound; import com.google.common.collect.ImmutableMap; import com.google.turbine.binder.lookup.ImportScope; import com.google.turbine.binder.lookup.MemberImportIndex; import com.google.turbine.binder.sym.ClassSymbol; import com.google.turbine.diag.SourceFile; import com.google.turbine.model.TurbineTyKind; import com.google.turbine.tree.Tree; import org.jspecify.nullness.Nullable; /** A {@link BoundClass} with shared lookup scopes for the current compilation unit and package. */ public class PackageSourceBoundClass implements BoundClass { private final SourceBoundClass base; private final ImportScope scope; private final MemberImportIndex memberImports; private final SourceFile source; public PackageSourceBoundClass( SourceBoundClass base, ImportScope scope, MemberImportIndex memberImports, SourceFile source) { this.base = base; this.scope = scope; this.memberImports = memberImports; this.source = source; } public Tree.TyDecl decl() { return base.decl(); } @Override public TurbineTyKind kind() { return base.kind(); } @Override public @Nullable ClassSymbol owner() { return base.owner(); } @Override public int access() { return base.access(); } @Override public ImmutableMap children() { return base.children(); } public ImportScope scope() { return scope; } /** The static member import index for the enclosing compilation unit. */ public MemberImportIndex memberImports() { return memberImports; } /** The source file. */ public SourceFile source() { return source; } }