/** * Copyright 2012 Tobias Gierke <tobias.gierke@code-sourcery.de> * * 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 de.codesourcery.jasm16.compiler.io; import de.codesourcery.jasm16.exceptions.ResourceNotFoundException; /** * Responsible for looking-up an {@link IResource} instance by string identifier. * * @author tobias.gierke@code-sourcery.de * @see IResourceResolver#resolve(String) */ public interface IResourceResolver { /** * Resolver whose methods always fail with {@link ResourceNotFoundException}. */ public static final IResourceResolver NOP_RESOLVER = new IResourceResolver() { @Override public IResource resolve(String identifier)throws ResourceNotFoundException { throw new ResourceNotFoundException("Not implemented: resolve("+identifier+")",identifier); } @Override public IResource resolveRelative(String identifier, IResource parent) throws ResourceNotFoundException { throw new ResourceNotFoundException("Not implemented: resolve("+identifier+","+parent+")",identifier); } }; /** * Look-up a resource by it's identifier. * * <p> * The outcome of passing "relative" identifiers to this method is undefined. * Use {@link #resolveRelative(String, IResource)} if you suspect the identifier * may be a relative resource reference. * </p> * * @param identifier * @return * @throws ResourceNotFoundException */ public IResource resolve(String identifier) throws ResourceNotFoundException; /** * Look-up a resource while assuming that relative identifiers should be resolved relative to a specific parent resource. * * <p> * If the identifier is an absolute reference, behaves exactly like {@link #resolve(String)}. * If the identifier is a relative reference, the reference is resolved relative to * the given parent resource. * </p> * * @param identifier * @param parent parent resource * @return * @throws ResourceNotFoundException */ public IResource resolveRelative(String identifier,IResource parent) throws ResourceNotFoundException; }