/* * Copyright 2013 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.core.ext.soyc.coderef; import com.google.gwt.thirdparty.guava.common.collect.Lists; import com.google.gwt.thirdparty.guava.common.collect.Sets; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; /** * The abstraction of any possible entity in the code that is register by soyc: classes, methods * and fields. It includes all contributed sizes per fragment. * */ public abstract class EntityDescriptor { /** * Stores the size contribution to each fragment for this entity. * Fragments are 0-based, and -1 means in no fragment */ public static class Fragment { private int id = -1; private int size; public Fragment(int fragmentId, int fragmentSize) { id = fragmentId; size = fragmentSize; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } } protected final String name; /** * Stores obfuscated names. An entity can have several obfuscated names, because it can be * presented in several forms, eg. in methods: original and its static version. */ protected final Set<String> obfuscatedNames = Sets.newHashSet(); // Some entities can be in several fragments protected final List<Fragment> fragments = Lists.newArrayList(); public EntityDescriptor(String name) { this.name = name; } public void addFragment(Fragment fragment) { fragments.add(fragment); } /** * Returns the list of sizes per fragment contributed by this entity. */ public Collection<Fragment> getFragments() { return Collections.unmodifiableCollection(fragments); } /** * Returns the full qualified name. */ public abstract String getFullName(); /** * Returns the name of the entity. For instance, class entities return the short name * {@link com.google.gwt.dev.jjs.ast.JDeclaredType#getShortName()}, fields return the field name, * and methods return the method name without its signature. */ public String getName() { return name; } public Set<String> getObfuscatedNames() { return Collections.unmodifiableSet(obfuscatedNames); } public void addObfuscatedName(String obfuscatedName) { this.obfuscatedNames.add(obfuscatedName); } }