jtulach@1326: /** jtulach@1326: * Back 2 Browser Bytecode Translator jtulach@1326: * Copyright (C) 2012 Jaroslav Tulach jtulach@1326: * jtulach@1326: * This program is free software: you can redistribute it and/or modify jtulach@1326: * it under the terms of the GNU General Public License as published by jtulach@1326: * the Free Software Foundation, version 2 of the License. jtulach@1326: * jtulach@1326: * This program is distributed in the hope that it will be useful, jtulach@1326: * but WITHOUT ANY WARRANTY; without even the implied warranty of jtulach@1326: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jtulach@1326: * GNU General Public License for more details. jtulach@1326: * jtulach@1326: * You should have received a copy of the GNU General Public License jtulach@1326: * along with this program. Look for COPYING file in the top folder. jtulach@1326: * If not, see http://opensource.org/licenses/GPL-2.0. tzezula@1324: */ tzezula@1324: tzezula@1324: package org.apidesign.bck2brwsr.dew; tzezula@1324: tzezula@1324: import java.net.URI; tzezula@1324: import javax.lang.model.element.Modifier; tzezula@1324: import javax.lang.model.element.NestingKind; tzezula@1324: tzezula@1324: /** tzezula@1324: * jtulach@1326: * @author Tomas Zezula tzezula@1324: */ tzezula@1324: public abstract class BaseFileObject implements InferableJavaFileObject { tzezula@1324: tzezula@1324: protected final String path; tzezula@1324: protected final Kind kind; tzezula@1324: tzezula@1324: BaseFileObject( tzezula@1324: String path, tzezula@1324: Kind kind) { tzezula@1324: if (!path.startsWith("/")) { //NOI18N tzezula@1324: throw new IllegalArgumentException(); tzezula@1324: } tzezula@1324: this.path = path; tzezula@1324: this.kind = kind; tzezula@1324: } tzezula@1324: tzezula@1324: tzezula@1324: @Override tzezula@1324: public String infer() { tzezula@1324: return ClassLoaderFileManager.convertResourceToFQN(path); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public Kind getKind() { tzezula@1324: return kind; tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public boolean isNameCompatible(String simpleName, Kind kind) { tzezula@1324: return this.kind == kind && tzezula@1324: getSimpleName(path).equals(simpleName); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public NestingKind getNestingKind() { tzezula@1324: return null; tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public Modifier getAccessLevel() { tzezula@1324: return null; tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public URI toUri() { tzezula@1324: return URI.create(escape(path)); tzezula@1324: } tzezula@1324: tzezula@1324: @Override tzezula@1324: public String getName() { tzezula@1324: return path; tzezula@1324: } tzezula@1324: tzezula@1324: tzezula@1324: tzezula@1324: protected static String getSimpleName(String path) { tzezula@1324: int slashIndex = path.lastIndexOf('/'); tzezula@1324: assert slashIndex >= 0; tzezula@1324: return (slashIndex + 1 < path.length()) ? tzezula@1324: path.substring(slashIndex + 1) : tzezula@1324: ""; //NOI18N tzezula@1324: } tzezula@1324: tzezula@1324: protected static Kind getKind(final String path) { tzezula@1324: final String simpleName = getSimpleName(path); tzezula@1324: final int dotIndex = simpleName.lastIndexOf('.'); //NOI18N tzezula@1324: final String ext = dotIndex > 0 ? tzezula@1324: simpleName.substring(dotIndex) : tzezula@1324: ""; tzezula@1324: for (Kind k : Kind.values()) { tzezula@1324: if (k.extension.equals(ext)) { tzezula@1324: return k; tzezula@1324: } tzezula@1324: } tzezula@1324: return Kind.OTHER; tzezula@1324: } tzezula@1324: tzezula@1324: private String escape(String path) { tzezula@1324: return path; tzezula@1324: } tzezula@1324: tzezula@1324: tzezula@1324: }