001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2008-2011 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 }