001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
019 */
020 package org.sonar.java.bytecode.asm;
021
022 import java.util.ArrayList;
023 import java.util.Collection;
024 import java.util.HashSet;
025 import java.util.List;
026 import java.util.Set;
027
028 import org.sonar.squid.api.SourceCodeEdgeUsage;
029
030 public class AsmResource {
031
032 private int accessFlags;
033 AsmClass parent;
034 boolean used = false;
035 private List<AsmEdge> outgoingEdges = new ArrayList<AsmEdge>();
036
037 void setAccessFlags(int accessFlags) {
038 this.accessFlags = accessFlags;
039 }
040
041 void addUsesOfClasses(AsmClass[] asmClasses) {
042 for (AsmClass asmClass : asmClasses) {
043 addEdge(new AsmEdge(this, asmClass, SourceCodeEdgeUsage.USES));
044 }
045 }
046
047 public Set<AsmClass> getDistinctUsedAsmClasses() {
048 Set<AsmClass> distinctUsedAsmClasses = new HashSet<AsmClass>();
049 for (AsmEdge usage : getOutgoingEdges()) {
050 if (usage.getUsage() == SourceCodeEdgeUsage.USES) {
051 distinctUsedAsmClasses.add((AsmClass) usage.getTo());
052 }
053 }
054 return distinctUsedAsmClasses;
055 }
056
057 public Set<AsmClass> getImplementedInterfaces() {
058 Set<AsmClass> implementedInterfaces = new HashSet<AsmClass>();
059 for (AsmEdge usage : getOutgoingEdges()) {
060 if (usage.getUsage() == SourceCodeEdgeUsage.IMPLEMENTS) {
061 implementedInterfaces.add((AsmClass) usage.getTo());
062 }
063 }
064 return implementedInterfaces;
065 }
066
067 public void addEdge(AsmEdge edge) {
068 outgoingEdges.add(edge);
069 }
070
071 public Collection<AsmEdge> getOutgoingEdges() {
072 return outgoingEdges;
073 }
074
075 public AsmClass getParent() {
076 return parent;
077 }
078
079 public boolean isAbstract() {
080 return AsmAccessFlags.isAbstract(accessFlags);
081 }
082
083 public boolean isInterface() {
084 return AsmAccessFlags.isInterface(accessFlags);
085 }
086
087 public boolean isStatic() {
088 return AsmAccessFlags.isStatic(accessFlags);
089 }
090
091 boolean isPublic() {
092 return AsmAccessFlags.isPublic(accessFlags);
093 }
094
095 public boolean isPrivate() {
096 return AsmAccessFlags.isPrivate(accessFlags);
097 }
098
099 public boolean isProtected() {
100 return AsmAccessFlags.isProtected(accessFlags);
101 }
102
103 boolean isFinal() {
104 return AsmAccessFlags.isFinal(accessFlags);
105 }
106
107 public boolean isDeprecated() {
108 return AsmAccessFlags.isDeprecated(accessFlags);
109 }
110
111 public void setUsed(boolean used) {
112 this.used = used;
113 }
114
115 public boolean isUsed() {
116 return used;
117 }
118 }