OSDN Git Service

必要のないクラスを削除し,クラスの整理を行った.
authorHaruaki Tamada <tamada@cc.kyoto-su.ac.jp>
Wed, 13 Apr 2011 08:45:06 +0000 (17:45 +0900)
committerHaruaki Tamada <tamada@cc.kyoto-su.ac.jp>
Wed, 13 Apr 2011 08:45:06 +0000 (17:45 +0900)
1  2 
src/main/java/jp/sourceforge/stigmata/birthmarks/is/InheritanceStructureBirthmarkExtractVisitor.java
src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeManager.java
src/main/java/jp/sourceforge/stigmata/spi/ReflectedBirthmarkService.java
src/main/java/jp/sourceforge/stigmata/utils/ConfigFileExporter.java
src/main/resources/resources/stigmata.xml

@@@ -12,6 -10,8 +10,8 @@@ import jp.sourceforge.stigmata.digger.C
  import jp.sourceforge.stigmata.utils.WellknownClassManager;
  
  import org.objectweb.asm.ClassVisitor;
 -import com.sun.xml.internal.ws.org.objectweb.asm.Opcodes;
++import org.objectweb.asm.Opcodes;
  
  /**
   * 
index 7c85b82,a8aeff2..ac6133b
mode 100644,100644..100755
@@@ -1,37 -1,39 +1,41 @@@
  package jp.sourceforge.stigmata.resolvers;
  
 -import java.io.IOException;
 -import java.util.ArrayList;
 -import java.util.List;
 +import java.io.File;
 +import java.util.ServiceLoader;
  
 -public class StigmataHomeManager{
+ /**
+  * 
+  * @author Haruaki Tamada
+  */
 +public class StigmataHomeManager implements StigmataHomeResolver{
      private String home;
 -    private List<StigmataHomeResolver> resolvers = new ArrayList<StigmataHomeResolver>();
  
 -    public StigmataHomeManager(){
 -        resolvers.add(new DefaultStigmataHomeResolver());
 -        resolvers.add(new MacOSXStigmataHomeResolver());
 -        resolvers.add(new WindowsStigmataHomeResolver());
 -        resolvers.add(new PropertyStigmataHomeResolver());
 +    @Override
 +    public String getStigmataHome(){
 +        if(home == null){
 +            home = resolveHome();
 +        }
 +        return home;
      }
  
 -    public String getStigmataHome(){
 +    private String resolveHome(){
 +        ServiceLoader<StigmataHomeResolver> loader = ServiceLoader.load(StigmataHomeResolver.class);
 +        String home = null;
 +        String name = System.getProperty("os.name");
 +
 +        for(StigmataHomeResolver resolver: loader){
 +            if(resolver.isTarget(name)){
 +                home = resolver.getStigmataHome();
 +                break;
 +            }
 +        }
          if(home == null){
 -            String home = null;
 -            String osName = System.getProperty("os.name");
 -            for(StigmataHomeResolver resolver: resolvers){
 -                if(resolver.isTarget(osName)){
 -                    try{
 -                        home = resolver.getStigmataHome();
 -                    } catch(IOException e){
 -                    }
 -                }
 -                if(home != null){
 -                    this.home = home;
 -                    break;
 -                }
 +            home = System.getProperty("stigmata.home");
 +            if(home == null){
 +                home = System.getenv("STIGMATA_HOME");
 +            }
 +            if(home == null){
 +                home = getUserHome() + File.separator + ".stigmata";
              }
          }
          return home;
index 0000000,f1e7409..ef87a87
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,101 +1,116 @@@
 -            return targetClass.newInstance();\r
+ package jp.sourceforge.stigmata.spi;\r
\r
+ import java.io.Serializable;\r
++import java.lang.reflect.Constructor;\r
\r
+ import jp.sourceforge.stigmata.BirthmarkComparator;\r
+ import jp.sourceforge.stigmata.BirthmarkExtractor;\r
+ import jp.sourceforge.stigmata.BirthmarkPreprocessor;\r
\r
+ public class ReflectedBirthmarkService implements BirthmarkService, Serializable{\r
+     private static final long serialVersionUID = 4090172591560046236L;\r
\r
+     private String type;\r
+     private String description;\r
+     private String extractorClass;\r
+     private String comparatorClass;\r
+     private String preprocessorClass;\r
\r
+     private transient BirthmarkExtractor extractor;\r
+     private transient BirthmarkComparator comparator;\r
+     private transient BirthmarkPreprocessor preprocessor;\r
\r
+     public ReflectedBirthmarkService(String type, String description,\r
+             String extractorClass, String comparatorClass){\r
+         this(type, description, extractorClass, comparatorClass, null);\r
+     }\r
\r
++    public String toString(){\r
++        return String.format("%s, extractor=%s, comparator=%s", type, extractorClass, comparatorClass);\r
++    }\r
++\r
+     /**\r
+      * \r
+      * @param type\r
+      * @param description\r
+      * @param extractorClass\r
+      * @param comparatorClass\r
+      * @param preprocessorClass\r
+      * @throws NullPointerException one of type, extractorClass, and comparatorClass is null. \r
+      */\r
+     public ReflectedBirthmarkService(String type, String description,\r
+             String extractorClass, String comparatorClass, String preprocessorClass){\r
+         if(type == null || extractorClass == null || comparatorClass == null){\r
+             throw new NullPointerException();\r
+         }\r
+         this.type = type;\r
+         this.description = description;\r
+         this.extractorClass = extractorClass;\r
+         this.comparatorClass = comparatorClass;\r
+         this.preprocessorClass = preprocessorClass;\r
+     }\r
\r
+     @Override\r
+     public String getType(){\r
+         return type;\r
+     }\r
\r
+     @Override\r
+     public String getDescription(){\r
+         return description;\r
+     }\r
\r
+     @Override\r
+     public synchronized BirthmarkPreprocessor getPreprocessor(){\r
+         if(preprocessor == null && preprocessorClass != null){\r
+             preprocessor = instantiateClass(preprocessorClass, BirthmarkPreprocessor.class);\r
+         }\r
+         return preprocessor;\r
+     }\r
\r
+     private <T> T instantiateClass(String name, Class<T> type){\r
+         try{\r
+             Class<? extends T> targetClass = Class.forName(name).asSubclass(type);\r
++            Constructor<? extends T> constructor = targetClass.getConstructor(BirthmarkService.class);\r
++            return constructor.newInstance(this);\r
+         } catch(Exception e){\r
++            e.printStackTrace();\r
+         }\r
+         return null;\r
+     }\r
\r
++    public String getExtractorClassName(){\r
++        return extractorClass;\r
++    }\r
++\r
+     @Override\r
+     public BirthmarkExtractor getExtractor(){\r
+         if(extractor == null){\r
+             extractor = instantiateClass(extractorClass, BirthmarkExtractor.class);\r
+         }\r
+         return extractor;\r
+     }\r
\r
++    public String getComparatorClassName(){\r
++        return comparatorClass;\r
++    }\r
++\r
+     @Override\r
+     public synchronized BirthmarkComparator getComparator(){\r
+         if(comparator == null){\r
+             comparator = instantiateClass(comparatorClass, BirthmarkComparator.class);\r
+         }\r
+         return comparator;\r
+     }\r
\r
+     @Override\r
+     public boolean isExperimental(){\r
+         return true;\r
+     }\r
\r
+     @Override\r
+     public boolean isUserDefined(){\r
+         return true;\r
+     }\r
\r
+ }\r
@@@ -35,17 -31,17 +31,21 @@@ public class ConfigFileExporter
      }
  
      public void export(PrintWriter out) throws IOException{
--        out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
--        out.println("<stigmata>");
++        try{
++            out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
++            out.println("<stigmata>");
  
--        exportServices(out);
--        exportFilters(out);
--        exportWellknownClasses(out);
--        exportClasspath(out);
--        exportProperties(out);
++            exportServices(out);
++            exportFilters(out);
++            exportWellknownClasses(out);
++            exportClasspath(out);
++            exportProperties(out);
  
--        out.println("</stigmata>");
--        out.flush();
++            out.println("</stigmata>");
++            out.flush();
++        } finally{
++            out.close();
++        }
      }
  
      private void exportProperties(PrintWriter out) throws IOException{
              if(service.isExperimental() && service instanceof BirthmarkService){
                  out.println("    <birthmark-service>");
                  out.printf("      <type>%s</type>%n", service.getType());
-                 out.printf("      <display-name>%s</display-name>%n", service.getDisplayType());
-                 out.printf("      <description>%s</description>%n", service.getDescription());
-                 out.printf("      <extractor>%s</extractor>%n", service.getExtractorClassName());
-                 out.printf("      <comparator>%s</comparator>%n", service.getComparatorClassName());
+                 if(service instanceof ReflectedBirthmarkService){
 -                    out.printf("      <description>%s</description>%n", service.getDescription());
 -                    out.printf("      <extractor>%s</extractor>%n", service.getExtractor().getClass().getName());
 -                    out.printf("      <comparator>%s</comparator>%n", service.getComparator().getClass().getName());
++                    ReflectedBirthmarkService rbs = (ReflectedBirthmarkService)service;
++                    out.printf("      <description>%s</description>%n", rbs.getDescription());
++                    out.printf("      <extractor>%s</extractor>%n", rbs.getExtractorClassName());
++                    out.printf("      <comparator>%s</comparator>%n", rbs.getComparatorClassName());
+                 }
                  out.println("    </birthmark-service>");
              }
          }
@@@ -4,7 -4,7 +4,6 @@@
    <birthmark-services>
      <birthmark-service>
        <type>uc_seq</type>
--      <display-name>Used Classes (compare as sequence)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor
@@@ -16,7 -16,7 +15,6 @@@
  
      <birthmark-service>
        <type>uc_dp</type>
--      <display-name>Used Classes (DP matching)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor
@@@ -28,7 -28,7 +26,6 @@@
  
      <birthmark-service>
        <type>uc_ed</type>
--      <display-name>Used Classes (Edit distance)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.uc.UsedClassesBirthmarkExtractor
@@@ -40,7 -40,7 +37,6 @@@
  
      <birthmark-service>
        <type>is_ed</type>
--      <display-name>Inheritance Structure (Edit distance)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor
@@@ -52,7 -52,7 +48,6 @@@
  
      <birthmark-service>
        <type>is_dp</type>
--      <display-name>Inheritance Structure (DP matching)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.is.InheritanceStructureBirthmarkExtractor
@@@ -64,7 -64,7 +59,6 @@@
  
      <birthmark-service>
        <type>smc_dp</type>
--      <display-name>Sequence of Method Calls (DP matching)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor
@@@ -76,7 -76,7 +70,6 @@@
  
      <birthmark-service>
        <type>smc_ed</type>
--      <display-name>Sequence of Method Calls (Edit distance)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.smc.SequentialMethodCallBirthmarkExtractor
@@@ -88,7 -88,7 +81,6 @@@
  
      <birthmark-service>
        <type>cvfv_ed</type>
--      <display-name>Constant Value of Field Variable (Edit distance)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor
  
      <birthmark-service>
        <type>cvfv_dp</type>
--      <display-name>Constant Value of Field Variable (DP matching)</display-name>
        <description></description>
        <extractor>
          jp.sourceforge.stigmata.birthmarks.cvfv.ConstantValueOfFieldVariableBirthmarkExtractor