| /* |
| * Copyright 2008 Google Inc. |
| * |
| * 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.gwt.dev.javac.typemodel; |
| |
| import com.google.gwt.core.ext.typeinfo.NotFoundException; |
| import com.google.gwt.dev.util.collect.Maps; |
| |
| import java.lang.annotation.Annotation; |
| import java.util.Map; |
| |
| /** |
| * Represents a logical package. |
| */ |
| public class JPackage implements com.google.gwt.core.ext.typeinfo.JPackage { |
| |
| private final Annotations annotations = new Annotations(); |
| |
| private final String name; |
| |
| private Map<String, JRealClassType> types = Maps.create(); |
| |
| JPackage(String name) { |
| this.name = name; |
| } |
| |
| public JClassType findType(String typeName) { |
| String[] parts = typeName.split("\\."); |
| return findType(parts); |
| } |
| |
| public JClassType findType(String[] typeName) { |
| return findTypeImpl(typeName, 0); |
| } |
| |
| public <T extends Annotation> T getAnnotation(Class<T> annotationClass) { |
| return annotations.getAnnotation(annotationClass); |
| } |
| |
| public Annotation[] getAnnotations() { |
| return annotations.getAnnotations(); |
| } |
| |
| public Annotation[] getDeclaredAnnotations() { |
| return annotations.getDeclaredAnnotations(); |
| } |
| |
| public String getName() { |
| return name; |
| } |
| |
| public JClassType getType(String typeName) throws NotFoundException { |
| JClassType result = findType(typeName); |
| if (result == null) { |
| throw new NotFoundException(); |
| } |
| return result; |
| } |
| |
| public JClassType[] getTypes() { |
| return types.values().toArray(TypeOracle.NO_JCLASSES); |
| } |
| |
| public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) { |
| return annotations.isAnnotationPresent(annotationClass); |
| } |
| |
| public boolean isDefault() { |
| return "".equals(name); |
| } |
| |
| @Override |
| public String toString() { |
| return "package " + name; |
| } |
| |
| void addAnnotations(Map<Class<? extends Annotation>, Annotation> annotations) { |
| this.annotations.addAnnotations(annotations); |
| } |
| |
| void addType(JRealClassType type) { |
| types = Maps.put(types, type.getSimpleSourceName(), type); |
| } |
| |
| JClassType findTypeImpl(String[] typeName, int index) { |
| JClassType found = types.get(typeName[index]); |
| if (found == null) { |
| return null; |
| } else if (index < typeName.length - 1) { |
| return found.findNestedTypeImpl(typeName, index + 1); |
| } else { |
| return found; |
| } |
| } |
| } |