| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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 org.apache.flex.compiler.common; |
| |
| import org.apache.flex.compiler.internal.projects.DependencyGraph; |
| |
| |
| /** |
| * An enumeration representing the four types of dependencies that an |
| * edge in a {@link DependencyGraph} can have. |
| */ |
| public enum DependencyType |
| { |
| /** |
| * An <code>INHERITANCE</code> dependency is created by a reference |
| * to a class or interface in the <code>extends</code> clause or the |
| * <code>implements</code> clause of a class or interface declaration. |
| * <p> |
| * Examples: |
| * <ul> |
| * <li><code>class C2 extends <u>C1</u> implements <u>I1</u>, <u>I2</u></code> |
| * <li><code>interface I1 extends <u>I2</u>, <u>I3</u></code> |
| * </ul> |
| */ |
| INHERITANCE('i'), |
| |
| /** |
| * A <code>SIGNATURE</code> dependency is created by a type annotation |
| * that is not inside of a function body. |
| * <p> |
| * Examples: |
| * <ul> |
| * <li><code>public var i:<u>int</u></code> |
| * <li><code>private function f(i:<u>int</u>):<u>String</u></code> |
| * </ul> |
| */ |
| SIGNATURE('s'), |
| |
| /** |
| * A <code>NAMESPACE</code> dependency is created by a reference to a |
| * user-defined namespace. |
| * <p> |
| * Examples: |
| * <ul> |
| * <li><code><u>ns</u> var foo:int</code> |
| * <li><code><u>ns</u>::foo</code> |
| * <li><code>use namespace <u>ns</u></code> |
| * </ul> |
| */ |
| NAMESPACE('n'), |
| |
| /** |
| * An <code>EXPRESSION</code> dependency is any dependency that isn't |
| * one of the other three types. |
| */ |
| EXPRESSION('e'); |
| |
| /** |
| * Private constructor. |
| * |
| * @param symbol The character representing the dependency type in XML |
| * format (such as the <code><dep></code> tag in a SWC catalog). |
| */ |
| private DependencyType(char symbol) |
| { |
| this.symbol = symbol; |
| } |
| |
| /** |
| * The character representing the dependency type in XML |
| * format (such as the <code><dep></code> tag in a SWC catalog). |
| */ |
| private final char symbol; |
| |
| /** |
| * Gets the character representing the dependency type in XML |
| * format (such as the <code><dep></code> tag in a SWC catalog). |
| * |
| * @return symbol The character. |
| */ |
| public char getSymbol() |
| { |
| return symbol; |
| } |
| |
| /** |
| * A helper function to check if this {@link DependencyType} |
| * is contained in an {@link DependencyTypeSet}. |
| * |
| * @param dependencies A {@link DependencyTypeSet} to look in. |
| * @return <code>true</code> if this {@link DependencyType} |
| * is contained in the specified {@link DependencyTypeSet}. |
| */ |
| public boolean existsIn(DependencyTypeSet dependencies) |
| { |
| return dependencies.contains(this); |
| } |
| |
| /** |
| * Gets the enum object from its symbol. |
| * |
| * @param symbol The character representing the dependency type in XML |
| * format (such as the <code><dep></code> tag in a SWC catalog), |
| * such as <code>'i'</code>. |
| * @return The enum object with the specified symbol, |
| * such as <code>INHERITANCE</code>. |
| */ |
| public static DependencyType get(char symbol) |
| { |
| switch (symbol) |
| { |
| case 'i': |
| return INHERITANCE; |
| case 'n': |
| return NAMESPACE; |
| case 's': |
| return SIGNATURE; |
| case 'e': |
| return EXPRESSION; |
| default: |
| throw new IllegalArgumentException("Invalid symbol: " + symbol); |
| } |
| } |
| |
| /** |
| * Gets a short string of symbols for the dependency types |
| * in a dependency type set. |
| * |
| * @param types A {@link DependencyTypeSet}. |
| * @return A short string of symbols of the types in the {@link DependencyTypeSet} |
| * in INHERITANCE, NAMESPACE, SIGNATURE, EXPRESSION order. |
| */ |
| public static String getTypeString(DependencyTypeSet types) |
| { |
| StringBuilder sb = new StringBuilder(); |
| if (INHERITANCE.existsIn(types)) |
| sb.append('i'); |
| if (NAMESPACE.existsIn(types)) |
| sb.append('n'); |
| if (SIGNATURE.existsIn(types)) |
| sb.append('s'); |
| if (EXPRESSION.existsIn(types)) |
| sb.append('e'); |
| return sb.toString(); |
| } |
| } |