Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2012 Trillian Mobile AB
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License
   * as published by the Free Software Foundation; either version 2
   * of the License, or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/gpl-2.0.html>.
  */
 package org.robovm.compiler.clazz;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 
 import soot.SootClass;
 import soot.SootField;

Author(s):
niklas
 
 public class ClazzInfo implements Serializable {
     private static final long serialVersionUID = 53L;
     
     private int modifiers;
     private String name;
     private String internalName;
     private String superclassName;
     private final List<StringinterfaceNames = new ArrayList<String>();
     private final Set<Trampolinetrampolines = new HashSet<Trampoline>();
     private final List<FieldInfofields = new ArrayList<FieldInfo>();
     private final List<MethodInfomethods = new ArrayList<MethodInfo>();
     private final Set<StringcatchNames = new HashSet<String>();
     private Map<StringDependencydependencies = new HashMap<String,Dependency>();
     
     private transient Clazz clazz;
     private transient List<FieldInfoclassFields;
     private transient List<FieldInfoinstanceFields;
     
     ClazzInfo() {}
     
     ClazzInfo(Clazz clazzSootClass sootClass) {
         this. = clazz;
          = sootClass.getModifiers();
          = sootClass.getName();
          = Types.getInternalName(sootClass);
         if (sootClass.hasSuperclass()) {
              = Types.getInternalName(sootClass.getSuperclass());
         }
         for (SootClass ifs : sootClass.getInterfaces()) {
             .add(Types.getInternalName(ifs));
         }
         for (SootField field : sootClass.getFields()) {
             .add(new FieldInfo(field.getModifiers(), field.getName(), Types.getDescriptor(field)));
         }
         for (SootMethod method : sootClass.getMethods()) {
             .add(new MethodInfo(method.getModifiers(), method.getName(), Types.getDescriptor(method)));
         }
     }
     
     private ClazzInfo(String internalName) {
         this. = internalName;
         this. = internalName.replace('/''.');
     }
     
     public boolean isPhantom() {
         return  == null;
     }
     
     void setClazz(Clazz clazz) {
         this. = clazz;
     }
     
     public int getModifiers() {
         return ;
     }
 
     public void setModifiers(int modifiers) {
         this. = modifiers;
     }
    
    public String getName() {
        return ;
    }
    
    public void setName(String name) {
        this. = name;
    }
    
    public String getInternalName() {
        return ;
    }
    
    public void setInternalName(String internalName) {
        this. = internalName;
    }
    
    public String getPackageName() {
        int idx = .lastIndexOf('.');
        if (idx == -1) {
            return "";
        }
        return .substring(0, idx);
    }
    
    public String getSuperclassName() {
        return ;
    }
    
    public void setSuperclassName(String superclassName) {
        this. = superclassName;
    }
    
    public boolean hasSuperclass() {
        return  != null;
    }
    
    private ClazzInfo loadClazzInfo(String n) {
        if (n != null) {
            Clazz c = ..load(n);
            if (c != null) {
                return c.getClazzInfo();
            }
        }
        return new ClazzInfo(n);
    }
    
    public ClazzInfo getSuperclass() {
        return loadClazzInfo();
    }
    
    public List<StringgetInterfaceNames() {
        return Collections.unmodifiableList();
    }
    
    public void setInterfaceNames(List<StringinterfaceNames) {
        this..clear();
        this..addAll(interfaceNames);
    }
    
    public List<ClazzInfogetInterfaces() {
        List<ClazzInforesult = new ArrayList<ClazzInfo>();
        for (String ifname : ) {
            result.add(loadClazzInfo(ifname));
        }
        return result;
    }
    
    public Set<TrampolinegetTrampolines() {
        return Collections.unmodifiableSet();
    }
    
    public void setTrampolines(Set<Trampolinetrampolines) {
        this..clear();
        this..addAll(trampolines);
    }
    public Set<StringgetCatchNames() {
        return ;
    }
    
    public void setCatchNames(Set<StringcatchNames) {
        this..clear();
        this..addAll(catchNames);
    }
    public List<ClazzInfogetCatches() {
        List<ClazzInforesult = new ArrayList<ClazzInfo>();
        for (String n : ) {
            result.add(loadClazzInfo(n));
        }
        return result;
    }
    
    @Override
    public String toString() {
        return ;
    }
    
    public FieldInfo getField(String nameString desc) {
        for (FieldInfo f : ) {
            if (f.getName().equals(name) && f.getDesc().equals(desc)) {
                return f;
            }
        }
        return null;
    }
    
    public List<FieldInfogetFields() {
        return Collections.unmodifiableList();
    }
    public void clearFields() {
        this..clear();
    }
    public void addField(int modifiersString nameString desc) {
        this..add(new FieldInfo(modifiersnamedesc));
    }
    
    public List<FieldInfogetClassFields() {
        if ( == null) {
             = new ArrayList<FieldInfo>();
            for (FieldInfo f : ) {
                if (f.isStatic()) {
                    .add(f);
                }
            }
        }
        return ;
    }
    
    public List<FieldInfogetInstanceFields() {
        if ( == null) {
             = new ArrayList<FieldInfo>();
            for (FieldInfo f : ) {
                if (!f.isStatic()) {
                    .add(f);
                }
            }
        }
        return ;
    }
    
    public MethodInfo getMethod(String nameString desc) {
        for (MethodInfo m : ) {
            if (m.getName().equals(name) && m.getDesc().equals(desc)) {
                return m;
            }
        }
        return null;
    }
    public List<MethodInfogetMethods(String name) {
        List<MethodInforesult = new ArrayList<MethodInfo>();
        for (MethodInfo m : ) {
            if (m.getName().equals(name)) {
                result.add(m);
            }
        }
        return result;
    }
    public List<MethodInfogetMethods() {
        return Collections.unmodifiableList();
    }
    
    public void clearMethods() {
        this..clear();
    }
    
    public void addMethod(int flagsString nameString desc) {
        this..add(new MethodInfo(flagsnamedesc));
    }
    
    public void addDependency(String className) {
        if (!.containsKey(className)) {
            Clazz clazz = this...load(className);
            String path = null;
            boolean inBootClasspath = false;
            if (clazz != null) {
                path = clazz.getPath().getFile().getAbsolutePath();
                inBootClasspath = clazz.isInBootClasspath();
            }
            .put(classNamenew Dependency(classNamepathinBootClasspath));
        }
    }
    public void addDependencies(Collection<StringclassNames) {
        for (String className : classNames) {
            addDependency(className);
        }
    }
    public void clearDependencies() {
         = new HashMap<StringDependency>();
    }
    public Set<DependencygetDependencies() {
        return new HashSet<Dependency>(.values());
    }
    
    public boolean isPublic() {
        return ( & .) > 0;
    }
    
    public boolean isFinal() {
        return ( & .) > 0;
    }
    
    public boolean isInterface() {
        return ( & .) > 0;
    }
    
    public boolean isAbstract() {
        return ( & .) > 0;
    }
    
    public class FieldInfo implements Serializable {
        private static final long serialVersionUID = 1L;
        
        private int modifiers;
        private String name;
        private String desc;
        
        private FieldInfo(int modifiersString nameString desc) {
            this. = modifiers;
            this. = name;
            this. = desc;
        }
        public String getName() {
            return ;
        }
        
        public String getDesc() {
            return ;
        }
        
        public boolean isPublic() {
            return ( & .) > 0;
        }
        
        public boolean isPrivate() {
            return ( & .) > 0;
        }
        
        public boolean isProtected() {
            return ( & .) > 0;
        }
        
        public boolean isStatic() {
            return ( & .) > 0;
        }
        
        public boolean isFinal() {
            return ( & .) > 0;
        }
        
        public boolean isVolatile() {
            return ( & .) > 0;
        }
    }
    
    public class MethodInfo implements Serializable {
        private static final long serialVersionUID = 1L;
        
        private int modifiers;
        private String name;
        private String desc;
        private MethodInfo(int modifiersString nameString desc) {
            this. = modifiers;
            this. = name;
            this. = desc;
        }
        
        public String getName() {
            return ;
        }
        
        public String getDesc() {
            return ;
        }
        public boolean isPublic() {
            return ( & .) > 0;
        }
        
        public boolean isPrivate() {
            return ( & .) > 0;
        }
        
        public boolean isProtected() {
            return ( & .) > 0;
        }
        
        public boolean isStatic() {
            return ( & .) > 0;
        }
        
        public boolean isFinal() {
            return ( & .) > 0;
        }
        
        public boolean isSynchronized() {
            return ( & .) > 0;
        }
        
        public boolean isNative() {
            return ( & .) > 0;
        }
        
        public boolean isAbstract() {
            return ( & .) > 0;
        }
    }
New to GrepCode? Check out our FAQ X