├── print_ngram_features.py ├── convert_format.py ├── README.md ├── make_class_features.py ├── verbose_tools.py ├── detector.py ├── classifier.py ├── call_graph.py ├── extract_features_callgraph.py └── input-1300.csv /print_ngram_features.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys 4 | from gensim.models import Word2Vec, KeyedVectors 5 | import logging as log 6 | from tqdm import tqdm 7 | 8 | log.basicConfig(level=log.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') 9 | 10 | model_java_file = sys.argv[1] 11 | model_glove_file = sys.argv[2] 12 | output_java_file = sys.argv[3] 13 | output_glove_file = sys.argv[4] 14 | 15 | log.info("reading model from file {0}".format(model_java_file)) 16 | model_java = Word2Vec.load(model_java_file) 17 | log.info("reading model from file {0}".format(output_glove_file)) 18 | model_glove = KeyedVectors.load(model_glove_file) 19 | 20 | output_java = open(output_java_file, "w") 21 | output_glove = open(output_glove_file, "w") 22 | 23 | log.info("writing features to file {0}".format(output_glove_file)) 24 | for word in tqdm(model_glove.index2word): 25 | output_glove.write("{0} {1}\n".format(word.encode('utf-8'), " ".join(["{0:.6f}".format(x) for x in model_glove[word]]))) 26 | 27 | log.info("writing features to file {0}".format(output_java_file)) 28 | for word in tqdm(model_java.wv.index2word): 29 | output_java.write("{0} {1}\n".format(word, " ".join(["{0:.6f}".format(x) for x in model_java[word]]))) 30 | -------------------------------------------------------------------------------- /convert_format.py: -------------------------------------------------------------------------------- 1 | import os 2 | from collections import defaultdict 3 | import logging 4 | import sys 5 | import random 6 | 7 | logger = logging.getLogger() 8 | 9 | def convert_format(inDir, data): 10 | vocab = {} 11 | feat_count = 1 ## 12 | freq = defaultdict(int) 13 | 14 | # Iterate over the methods extracted from the corpus 15 | for _, method_info in data: 16 | # What's happening here? 17 | # Should this be measuring the frequency of classes? 18 | for ff in method_info:#.split(): 19 | # print ff.split(':')[0] 20 | if not ff in vocab: 21 | vocab[ff] = feat_count 22 | feat_count += 1 23 | freq[ff] += 1 24 | # exit() 25 | vocab["_OOV_"] = feat_count 26 | feat_count += 1 27 | 28 | oov_feat = 0 29 | #print "chosen_train_files", chosen_train_files 30 | 31 | vectors = [] 32 | labels = [] 33 | # optr = open(os.path.join(inDir, "output.txt"), "w") # not required at this stage 34 | for c, f in data: 35 | feats = [] 36 | 37 | for ff in f: 38 | if ff in vocab: 39 | if freq[ff] < 2: 40 | feats.append(vocab["_OOV_"]) 41 | else: 42 | feats.append(vocab[ff]) 43 | else: 44 | feats.append(vocab["_OOV_"]) 45 | if freq[ff] < 2: 46 | oov_feat += 1 47 | #print 'Ending loop' 48 | print_line = '-1' 49 | if c == 1: 50 | print_line = '+1' 51 | # svm_line = print_line ## Not sure what this is for 52 | for ff in sorted(feats): 53 | print_line += ' %d:1' % ff 54 | # svm_line += str(ff) ## Not sure what this is for 55 | 56 | vectors.append(list(set(feats))) 57 | labels.append(int(print_line[:2])) 58 | # optr.write(print_line +'\n') 59 | # optr.close() 60 | logger.info('oov feat: ' + str(oov_feat)) 61 | logger.info('total feat: ' + str(feat_count)) 62 | 63 | # Randomized labels until we won't find way to label items 64 | #labels = [random.randint(0, 1) for i in range(len(labels))] 65 | for i in range(100): 66 | labels[i] = 0 67 | return labels, vectors 68 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Design-Pattern-detection 2 | 3 | This application identifies design pattern instances from a given dataset. Currently, the code is compatible with Python 2.7 4 | 5 | #### Note: The files below require the matplotlib package for plotting and readable output 6 | 7 | ## Data Source 8 | - [Java file Corpus](http://groups.inf.ed.ac.uk/cup/javaGithub/) 9 | 10 | 11 | ## Dataset Generation 12 | The dataset used for the classification is generated in a series of steps. First, make_ngram.py is used to construct a Word2Vec model using a set of files (verbose files) containing class names and ngrams associated with the class. make_glove.py performs a similar task, but instead constructs a GloVe model given the verbose files. The word embedding model is used to construct a dataset by running make_class_features.py followed by 13 | 14 | ### detector.py 15 | 16 | Outputs `.verbose` files in the output directory taking `.java` files from input directory 17 | 18 | Usage: 19 | ```python 20 | python detector.py --input ./input --output ./output --tasks all 21 | ``` 22 | 23 | ### make_class_features.py 24 | 25 | Outputs vector representation Java classes from the ngram model in `dataset.csv` along with labels merged from `output-refined.csv` 26 | 27 | Usage: 28 | ```python 29 | python make_class_features.py [VERBOSE_ROOT] 30 | ``` 31 | 32 | Arguments: 33 | - VERBOSE_ROOT: root of the directory containing the verbose files. 34 | 35 | NOTE: This script uses the Word2Vec implementation in the [Gensim package](https://github.com/RaRe-Technologies/gensim "Gensim Github Repo"). 36 | And may need to install sudo apt-get install -y liblzma-dev to run it for linux machines. 37 | 38 | 39 | ## Classification 40 | Classification is performed in the python files listed below. The file calls the dataset.csv file, which is used to train a machine learning model and generate predictions. 41 | 42 | Each script outputs 43 | - confusion matrix csv and plot 44 | - Per class Precision, Recall barplots 45 | - report containing the precision, recall, and f-score values for the prediction. 46 | 47 | 48 | ### classifier.py 49 | Uses a various to classify the design patterns contained in the test files. 50 | 51 | Usage: 52 | ```python 53 | python classifier.py [CLASSIFIERNAME] 54 | ``` 55 | 56 | NOTE: Assumes the dataset is called 'dataset.csv' 57 | 58 | Arguments: 59 | 60 | - CLASSIFIERNAME - Which Classification algorithm you want to use. 61 | 62 | CLASSIFIERNAME supported are 63 | - RF: RandomForest 64 | - SVM: Support Vector Machine 65 | - ADABOOST: Adaboost 66 | - ADABOOST_LOGISTIC: Adaboost 67 | - LOGISTIC: Logistic Regression 68 | - GBTREE: GradientBoosted Tree 69 | - RIDGE: Ridge classifier 70 | - VOTER: Voting classifier composed of RF, SVM, ADABOOST 71 | 72 | 73 | ## Miscallenous Scripts [currently not used] 74 | 75 | ### print_ngram_features.py 76 | 77 | Prints the vector representations of the ngrams in readable format. 78 | 79 | Usage: 80 | print_ngram_features.py [MODEL_JAVA_FILE] [MODEL_GLOVE_FILE] [OUTPUT_JAVA_FILE] [OUTPUT_GLOVE_FILE] 81 | 82 | Arguments: 83 |
  • MODEL_JAVA_FILE: file name of the ngram vector model 84 |
  • MODEL_GLOVE_FILE: file name of the GloVe vector model 85 |
  • OUTPUT_JAVA_FILE: text file to write the vector representations of the ngrams 86 |
  • OUTPUT_GLOVE_FILE: text file to write the vector representations of GloVe 87 | 88 | 89 | -------------------------------------------------------------------------------- /make_class_features.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | 3 | import sys 4 | import os 5 | from os.path import join, getsize, splitext 6 | import re 7 | from gensim.models import Word2Vec, KeyedVectors 8 | from verbose_tools import get_classes 9 | from verbose_tools import get_classes_properties 10 | import logging as log 11 | from tqdm import tqdm 12 | 13 | NDIM = 100 ## currently set to 100 may change it to other value. 14 | verbose_root = sys.argv[1] 15 | log.basicConfig(level=log.DEBUG, filename='make_class_features.log', filemode='a', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') 16 | logger = log.getLogger(__name__) 17 | 18 | logger.info("parsing projects") 19 | sentences = [] 20 | patterns = dict() 21 | #data_file = "output-refined.csv" 22 | #data_file = "input-1300.csv" 23 | data_file = "p-mart-output-final.csv" 24 | 25 | with open(data_file) as f: 26 | for line in f: 27 | # project,class_name,pattern,url = line.strip().split(",") 28 | project, class_name, pattern = line.strip().split(",") 29 | patterns[(project, class_name)] = pattern 30 | 31 | file_data_store = dict() 32 | 33 | # Iterate through all files in the input folder (verbose_root) 34 | # for root, dirs, files in tqdm(os.walk(verbose_root)): 35 | for root, dirs, files in os.walk(verbose_root): 36 | # If the are no files in the verbose root folder 37 | if files is None: 38 | logger.error("No files found in input directory") 39 | exit() 40 | for f in files: 41 | if ".verbose" in f: 42 | file_data_store[f]=dict() 43 | proj_name = splitext(f)[0] 44 | file_data_store[f]["project_name"] = proj_name 45 | # Groups the ngrams by class 46 | class_dict = get_classes(os.path.join(root, f)) 47 | class_properties = get_classes_properties(os.path.join(root, f)) 48 | 49 | if class_dict is None: 50 | logger.warning("No classes or ngrams extracted from project file {0}".format(f)) 51 | continue 52 | file_data_store[f]["class_dict"] = class_dict 53 | file_data_store[f]["class_properties"] = class_properties 54 | 55 | # Appends the list of ngrams (in lower case) to a list of sentences 56 | for class_name, ngrams in class_dict.iteritems(): 57 | ngram_for_class = [ngram.lower() for ngram in ngrams] 58 | sentences.append(ngram_for_class) 59 | 60 | logger.info("Building Word2Vec model") 61 | ## May be able to revise these paramters for better performance 62 | ngram_model = Word2Vec(sentences, size=NDIM, window=20, min_count=2, workers=4) 63 | 64 | saved_items_list = set() 65 | saved_items_dicts = list() 66 | 67 | for f,verbose_data in file_data_store.iteritems(): 68 | proj_name = verbose_data["project_name"] # Name of the current project 69 | # Retrieve a dictionary constaining class names and corresponding ngrams 70 | class_dict = verbose_data["class_dict"] 71 | class_properties = verbose_data["class_properties"] 72 | # Iterate over class names and ngrams from the verbose file 73 | for class_name, ngrams in class_dict.iteritems(): 74 | 75 | # The if-block below makes sure that we only keep the labelled datasets in java_class_features.txt 76 | # This reduces size of java_class_features.txt, before this java_class_features.txt was almost 100 MB 77 | 78 | if (proj_name,class_name) not in patterns: 79 | continue 80 | vector_ngram = [0.0 for i in range(NDIM)] 81 | ngram_count = 0 82 | for ngram in ngrams: 83 | try: 84 | # TODO: Check if this line works as expected 85 | vector_ngram += ngram_model.wv[ngram.lower()] 86 | ngram_count += 1 87 | except Exception as e: 88 | # log.warning("Loading Word2Vec: {0}".format(e)) 89 | pass 90 | 91 | 92 | # if any ngrams were present in the trained Word2Vec embedding model 93 | if ngram_count > 0: 94 | # Normalise the vector 95 | vector_ngram /= float(ngram_count) 96 | 97 | saved_items_list.add((proj_name,class_name)) 98 | feature_dict = dict(project_name=proj_name,class_name=class_name,) 99 | class_properties[class_name].pop('method_return', None) 100 | class_properties[class_name].pop('class_name_words', None) 101 | feature_dict.update(class_properties[class_name]) 102 | feature_dict.update({"w2v_"+str(i):x for i,x in enumerate(vector_ngram)}) 103 | saved_items_dicts.append(feature_dict) 104 | 105 | 106 | 107 | # Printing Total number of examples identified from output-refined.csv 108 | print "Examples identified from output-refined.csv = "+str(len(saved_items_list)) 109 | 110 | # Determining which examples are in output-refined.csv (Labelled) but missed in `.verbose` files. 111 | patterns_keys = set(patterns.keys()) 112 | print "-"*80 113 | print "Examples in Output-refined.csv but not in `.verbose` files = " + str(len(patterns_keys-saved_items_list)) 114 | print "-"*80 115 | print "\nMissing Project,Class,Pattern" 116 | for i,(proj,class_name) in enumerate(sorted(patterns_keys-saved_items_list)): 117 | print i,",",proj,",",class_name,",",patterns[(proj,class_name)] 118 | 119 | 120 | print "-"*80 121 | print "Missing Projects = " 122 | print "-"*80 123 | 124 | missing_projects = set([proj for proj,class_name in sorted(patterns_keys-saved_items_list)]) 125 | for proj in missing_projects: 126 | print proj 127 | 128 | 129 | import pandas as pd 130 | df = pd.DataFrame.from_records(saved_items_dicts) 131 | 132 | #data_file = "output-refined.csv" 133 | #data_file = "input-1300.csv" 134 | data_file = "p-mart-output-final.csv" 135 | # patterns = pd.read_csv(data_file,header=None,names=["project_name","class_name","pattern","url"]) 136 | patterns = pd.read_csv(data_file,header=None,names=["project_name","class_name","pattern"]) 137 | print(patterns.shape) 138 | # pattern_repeats = patterns.groupby(["project_name","class_name"])["pattern"].count() 139 | #patterns.drop_duplicates(["project_name","class_name"],inplace=True) 140 | print(patterns.shape) 141 | 142 | 143 | 144 | dataset = df.merge(patterns,on=["project_name","class_name"],how="inner") 145 | print(dataset.shape) 146 | # dataset_repeats = dataset.groupby(["project_name","class_name"])["pattern"].count() 147 | # dataset_repeats = dataset_repeats[dataset_repeats>1] 148 | #dataset.drop_duplicates(["project_name","class_name"],inplace=True) 149 | #print(dataset.shape) 150 | #dataset.to_csv("dataset.csv",index=False) 151 | dataset.to_csv("P-MARt-dataset.csv",index=False) -------------------------------------------------------------------------------- /verbose_tools.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | from collections import defaultdict 3 | import os 4 | import sys 5 | import numpy as np 6 | # Prevent .pyc file from being created 7 | sys.dont_write_bytecode = True 8 | 9 | def get_classes(verbose_path): 10 | """ 11 | Extracts the classes from a verbose file (design pattern summary of a java script) 12 | 13 | Parameters: \n 14 | - verbose_path (str): file path of the verbose file 15 | 16 | Returns: \n 17 | - class_ngrams (dict): Dictionary containing the names of classes (keys) and their respective ngrams (values) 18 | """ 19 | # Quick catch if the file can't be opened 20 | try: 21 | verbose = open(verbose_path, "r") 22 | except Exception as e: 23 | print e 24 | print "\t- File could not be opened\n" 25 | 26 | # Initialise a dictionary (of lists) to hold the class ngrams 27 | class_ngrams = defaultdict(list) 28 | 29 | # Iterate through the file to extract class names and corresponding ngrams 30 | for line in verbose: 31 | current_class = "" # Keep a record of the class name for the current line 32 | # Iterate through the items in each line 33 | for item in line.split(): 34 | # Record the name of the current class 35 | items = item.split(":") 36 | if items[0] == "CLASSNAME": 37 | current_class = items[1] 38 | elif items[0] == "CLASSMETHODNGRAM": 39 | class_ngram = items[1] 40 | # Add the class_ngram to the classes list of ngrams (if not present already) 41 | class_ngrams[current_class].append(class_ngram) 42 | elif items[0] == "CLASSMETHODRETURN": 43 | class_ngram = items[1] 44 | class_ngrams[current_class].append(class_ngram) 45 | elif items[0] == "CLASSIMPLEMENTNAME": 46 | class_ngram = items[1] 47 | class_ngrams[current_class].append(class_ngram) 48 | 49 | return class_ngrams 50 | 51 | import re 52 | first_cap_re = re.compile('(.)([A-Z][a-z]+)') 53 | all_cap_re = re.compile('([a-z0-9])([A-Z])') 54 | def convert_camel_to_snake(name): 55 | s1 = first_cap_re.sub(r'\1_\2', name) 56 | return all_cap_re.sub(r'\1_\2', s1).lower() 57 | 58 | def get_classes_properties(verbose_path): 59 | """ 60 | Extracts the classes from a verbose file (design pattern summary of a java script) 61 | 62 | Parameters: \n 63 | - verbose_path (str): file path of the verbose file 64 | 65 | Returns: \n 66 | - class_props (dict): Dictionary containing the various class properties from the verbose files 67 | """ 68 | # Quick catch if the file can't be opened 69 | try: 70 | verbose = open(verbose_path, "r") 71 | except Exception as e: 72 | print 73 | e 74 | print 75 | "\t- File could not be opened\n" 76 | 77 | # Initialise a dictionary (of lists) to hold the class properties 78 | class_props = defaultdict(dict) 79 | 80 | # Iterate through the file to extract class names and corresponding ngrams 81 | for line in verbose: 82 | current_class = "" # Keep a record of the class name for the current line 83 | # Iterate through the items in each line 84 | for item in line.split(): 85 | # Record the name of the current class 86 | items = item.split(":") 87 | if items[0] == "CLASSNAME": 88 | current_class = items[1] 89 | 90 | elif items[0] == "CLASSMETHODRETURN": 91 | method_return = items[1] 92 | # Add the class_ngram to the classes list of ngrams (if not present already) 93 | if "method_return" not in class_props[current_class]: 94 | class_props[current_class]["method_return"] = list() 95 | class_props[current_class]["method_return"].append(method_return.lower()) 96 | if "method_count" not in class_props[current_class]: 97 | class_props[current_class]["method_count"] = 0 98 | class_props[current_class]["method_count"] += 1 99 | 100 | elif items[0] == "CLASSMETHODPARAMCOUNT": 101 | param_count = int(items[1]) 102 | # Add the class_ngram to the classes list of ngrams (if not present already) 103 | if "param_count" not in class_props[current_class]: 104 | class_props[current_class]["param_count"] = list() 105 | class_props[current_class]["param_count"].append(param_count) 106 | elif items[0] == "CLASSMETHODVARCOUNT": 107 | var_count = int(items[1]) 108 | # Add the class_ngram to the classes list of ngrams (if not present already) 109 | if "var_count" not in class_props[current_class]: 110 | class_props[current_class]["var_count"] = list() 111 | class_props[current_class]["var_count"].append(var_count) 112 | elif items[0] == "CLASSMETHODLINECOUNT": 113 | line_count = int(items[1]) 114 | # Add the class_ngram to the classes list of ngrams (if not present already) 115 | if "line_count" not in class_props[current_class]: 116 | class_props[current_class]["line_count"] = list() 117 | class_props[current_class]["line_count"].append(line_count) 118 | elif items[0] == "CLASSIMPLEMENTS": 119 | class_props[current_class]["implements"] = items[1]=="True" 120 | elif items[0] == "CLASSIMPLEMENTNAME": 121 | class_props[current_class]["implements_name"] = items[1] 122 | 123 | 124 | 125 | for k,v in class_props.iteritems(): 126 | v["average_param_count"] = np.mean(v["param_count"]) 127 | v["total_param_count"] = np.sum(v["param_count"]) 128 | 129 | v["total_var_count"] = np.sum(v["var_count"]) 130 | v["average_var_count"] = np.mean(v["var_count"]) 131 | 132 | v["total_line_count"] = np.sum(v["line_count"]) 133 | v["average_line_count"] = np.mean(v["line_count"]) 134 | 135 | snaked_class_name = convert_camel_to_snake(k) 136 | v["class_last_name"] = snaked_class_name.split("_")[-1] 137 | v["class_name_words"] = snaked_class_name.split("_") 138 | 139 | if v["class_last_name"]!=k.lower(): 140 | v["class_last_name_is_different"] = True 141 | else: 142 | v["class_last_name_is_different"] = False 143 | 144 | if "implements_name" in v: 145 | v["class_implements_last_name"] = convert_camel_to_snake(v["implements_name"]).split("_")[-1] 146 | else: 147 | v["class_implements_last_name"] = None 148 | 149 | for k, v in class_props.iteritems(): 150 | v_dash = dict() 151 | for k2,v2 in v.iteritems(): 152 | if type(v2) in [str,int,bool,float,np.float64,np.float32,np.int64,np.int32] or v2 is None or k2 in ["class_name_words","method_return"]: 153 | v_dash[k2] = v2 154 | class_props[k] = v_dash 155 | 156 | return class_props 157 | 158 | def find_lbld_projects(): 159 | """ 160 | Constructs a list of projects that have been labelled in the output_refined.csv file 161 | 162 | Parameters: \n 163 | - None: input assumed to be output-refined.csv 164 | 165 | Returns: \n 166 | - project_list: List of the projects containing files that have been labelled 167 | """ 168 | project_list = [] 169 | with open("output-refined.csv", "r") as lbld_data: 170 | for line in lbld_data: 171 | project, class_name, pattern, url = line.split(",") 172 | if project == "Project" and class_name == "Class": 173 | continue 174 | elif project not in project_list: 175 | project_list.append(project) 176 | 177 | return sorted(project_list) -------------------------------------------------------------------------------- /detector.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | ''' 3 | This program is mainly for identifying which projects 4 | can be used as input, output pair. 5 | B 6 | Idea is to find projects with "main" and "test" folders 7 | where main folder consists of inputs and test folder consists 8 | of outputs 9 | We take test folder as output since it summarizes which methods are 10 | important 11 | Usage: python summarizer.py \ 12 | --input 13 | --output 14 | --tasks all create format extractfeat 15 | ''' 16 | 17 | import argparse 18 | from argparse import RawTextHelpFormatter 19 | from collections import defaultdict 20 | import logging 21 | import plyj.parser 22 | import os 23 | import sys 24 | #from convert_format import * 25 | from extract_features_callgraph import * 26 | # from learning import run_train # Not used at the moment, can be addressed later 27 | import random 28 | 29 | sys.setrecursionlimit(10000) # using a recursion limit to avoid crashing if the huge dataset 30 | def check_patterns(options): 31 | ''' 32 | Function to compare patterns with 33 | directory sturcture 34 | ''' 35 | for subdir in os.listdir(options.input): 36 | # print "options.input", options.input 37 | 38 | output_files = defaultdict(list) 39 | for root, _, files in \ 40 | os.walk( 41 | os.path.join(options.input, subdir)): 42 | # check if input and output exist 43 | for pattern_type in options.patterns.keys(): 44 | for pp in options.patterns[pattern_type]: 45 | if "/%s/" % pp in root: 46 | for fname in files: 47 | # yield pattern_type, subdir, root, fname 48 | output_files[pattern_type] \ 49 | .append( 50 | (pattern_type, 51 | subdir, root, 52 | fname)) 53 | if len(output_files["input"]) > 0: 54 | # and len(output_files["output"]) > 0: # commented since a test set is not being used atm 55 | for kk in output_files.keys(): 56 | for vv in output_files[kk]: 57 | yield vv 58 | 59 | 60 | def process_dirs(options): 61 | ''' 62 | Function to create input output paris 63 | Takes input and patterns to identify 64 | input output pairs and creates output 65 | folder 66 | We take the children dir of input dir as 67 | the package name 68 | ''' 69 | # check_input_pattern returns type=input/output 70 | # and package name and filename to copy 71 | for pattern_type, pname, root, fname in \ 72 | check_patterns(options): 73 | package_outdir = os.path.join(options.output, 74 | pname) 75 | check_dir(package_outdir) 76 | # Code below makes a copy of the input 77 | # check_dir(os.path.join(package_outdir, pattern_type)) 78 | # invoke_command(['cp', 79 | # os.path.join(root, fname), 80 | # os.path.join(package_outdir, pattern_type)]) 81 | 82 | 83 | if __name__ == '__main__': 84 | # Create a argparser 85 | parser = argparse.ArgumentParser( 86 | argument_default=False, 87 | description="Script to \ 88 | identify input, output pairs", 89 | formatter_class=RawTextHelpFormatter) 90 | parser.add_argument('--input', '-i', 91 | action='store', 92 | required=True, 93 | metavar='input', 94 | help='input java files dir') 95 | parser.add_argument('--output', '-o', 96 | action='store', 97 | required=True, 98 | metavar='output', 99 | help='output folder with input \ 100 | output pair') 101 | parser.add_argument('--tasks', '-t', 102 | choices=['all', 'store', 'extractfeat', 'test', 'format'], 103 | nargs='?', # Accepts a single argument if present 104 | default='all', # If no argument is given, the default value of 'all' is used 105 | help='tasks to run') 106 | parser.add_argument('--log', '-l', 107 | action='store', 108 | metavar='loglevel', 109 | default='info', # All 110 | choices=['notset', 'debug', 'info', 111 | 'warning'], 112 | help='debug level') 113 | 114 | options = parser.parse_args() 115 | random.seed(100) 116 | # Set logging level 117 | numeric_level = getattr(logging, 118 | options.log.upper()) 119 | if not isinstance(numeric_level, int): 120 | ValueError('Invalid log level %s' 121 | % options.log) 122 | 123 | # Set up logger 124 | streamHandler = logging.StreamHandler(sys.stdout) 125 | streamHandler.setFormatter(logging.Formatter(logging.BASIC_FORMAT)) 126 | streamHandler.setLevel(numeric_level) 127 | logging.basicConfig(level=numeric_level, filename='detector.log', filemode='a', 128 | format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') 129 | logger = logging.getLogger() 130 | logger.addHandler(streamHandler) 131 | 132 | 133 | # verify input and output 134 | if not os.path.isdir(options.input): 135 | IOError('Invalid input folder %s' 136 | % options.input) 137 | logger.info('Input: %s' % options.input) 138 | 139 | check_dir(options.output) # Checks if output folder exists: if not, creates one 140 | 141 | # All output should go to output (commented out code) 142 | # check_dir( 143 | # os.path.join(options.output, "data")) # Checks if 'data' folder exists in output folder: if not, creates one 144 | # check_dir(os.path.join(options.output, 145 | # "features")) # Additional line: Checks if 'data' folder exists in output folder: if not, creates one 146 | # feat_output = os.path.join(options.output, "features") 147 | # options.output = os.path.join(options.output, "data") 148 | feat_output = options.output # avoid refactoring for now 149 | 150 | logger.info('Output: %s' % options.output) 151 | 152 | # Configure input and output subdirectory patterns 153 | # these patterns would be used to find input, 154 | # and output code pairs 155 | options.patterns = { 156 | 'input': ['main'], 157 | # 'output' : ['test'] # Not currently used, commented out for simplicity 158 | } 159 | 160 | # process inputs and outputs 161 | runAll = False 162 | if len(options.tasks) == 0 \ 163 | or 'all' in options.tasks: 164 | runAll = True 165 | 166 | if runAll \ 167 | or "store" in options.tasks: 168 | # find the prospective input, output pairs 169 | # print("Options {}".format(options)) 170 | # process_dirs(options) # commented to remove redundant folders 171 | pass 172 | 173 | # extract features from the input files 174 | if runAll \ 175 | or "extractfeat" in options.tasks: 176 | check_dir(feat_output) 177 | parser = plyj.parser.Parser() 178 | # Extracts information about the classes in the provided corpus and... 179 | # ... whether they are invoked by other methods (using 0/1 classification) 180 | data = extract_features(options.input, 181 | feat_output, parser) # Changed to options.input 182 | 183 | #format the features into liblinear format 184 | # Commented by Najam 185 | #if runAll or \ 186 | # "format" in options.tasks: 187 | # labels, vectors = convert_format(feat_output, data) 188 | #print labels, vectors 189 | #print "len", len(labels), len([x for x in labels if x == -1]) 190 | # run_train(vectors, labels) # Not being used 191 | #print "Format converted\n" 192 | -------------------------------------------------------------------------------- /classifier.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | from sklearn.model_selection import train_test_split 4 | from sklearn.svm import SVC 5 | from sklearn.pipeline import make_pipeline 6 | from sklearn.preprocessing import StandardScaler 7 | from sklearn.metrics import precision_recall_fscore_support 8 | from sklearn.linear_model import RandomizedLogisticRegression, LogisticRegression, RidgeClassifier 9 | from sklearn.metrics import balanced_accuracy_score 10 | from sklearn.model_selection import StratifiedKFold 11 | from sklearn.ensemble import GradientBoostingClassifier 12 | from sklearn.ensemble import RandomForestClassifier 13 | from sklearn.ensemble import AdaBoostClassifier,VotingClassifier 14 | from sklearn.preprocessing import LabelEncoder 15 | from sklearn.metrics import classification_report, confusion_matrix 16 | from sklearn.ensemble import ExtraTreesClassifier 17 | from sklearn.model_selection import cross_val_score 18 | import sys 19 | # import pprint # Used for pretty printing dictionaries 20 | import random 21 | import re 22 | 23 | # modified to run on MacOS 24 | import matplotlib 25 | matplotlib.rcParams['backend'] = 'TkAgg' 26 | from matplotlib import pyplot as plt # Used for plotting 27 | 28 | import seaborn as sns 29 | 30 | # initialization of the RNG 31 | np.random.seed(2016) 32 | 33 | if len(sys.argv)==2: 34 | algorithm = sys.argv[1] 35 | else: 36 | algorithm = "RF" 37 | 38 | assert algorithm in ["RF","SVM","GBTREE","ADABOOST","ADABOOST_LOGISTIC","LOGISTIC","RIDGE","VOTER", "EXTRA_TREES"] 39 | print "Algorithm Used = %s"%(algorithm) 40 | 41 | # Filename of the dataset 42 | #data_file = "dataset.csv" 43 | data_file = "P-MARt-dataset.csv" 44 | 45 | # Read data from a csv file into a pandas dataframe 46 | data = pd.read_csv(data_file) 47 | data["implements"] = data["implements"].fillna(False) 48 | # Rename the columns containing text 49 | print(data.pattern.value_counts()) 50 | sys.stdout.flush() 51 | 52 | # Lets keep classes which have atleast 10 value counts, otherwise model cant learn 53 | vc = data.pattern.value_counts() 54 | vc = vc[vc>=10] 55 | labels_keep = set(vc.index) 56 | print("Shape before filtering of data: ",data.shape) 57 | data = data[data.pattern.isin(labels_keep)] 58 | data = data.sample(frac=1) 59 | print("Shape after filtering of data: ",data.shape) 60 | 61 | # Label Encoding: Design patterns (text) to ordinal labels (numeric) 62 | le = LabelEncoder() 63 | data.pattern = le.fit_transform(data.pattern) # Encode the labels/patterns 64 | # Construct lookup table for quick reference without using the le object 65 | label_lookup = le.classes_ 66 | 67 | # strip the project, class name and design pattern label 68 | y = data['pattern'] # Labels (y) 69 | X = data.drop(['pattern','project_name','class_name', 70 | 'class_implements_last_name','class_last_name','class_last_name_is_different', 71 | 'implements_name'], axis=1) # Keep only feature columns for independent vars (x) 72 | X.fillna(0,inplace=True) 73 | 74 | # ====K-FOLD STRATIFIED CROSS VALIDATION===== 75 | 76 | def train_test_get_metrics(model_builder,X_train, X_test, y_train, y_test): 77 | model = model_builder() 78 | model.fit(X_train, y_train) #.astype(float) 79 | y_pred = model.predict(X_test) 80 | cm = confusion_matrix(label_lookup[y_test], label_lookup[y_pred], label_lookup) 81 | accuracy = np.trace(cm) / float(np.sum(cm)) 82 | misclassification = 1 - accuracy 83 | precision, recall, fscore, support = precision_recall_fscore_support(label_lookup[y_test], label_lookup[y_pred]) 84 | precision_final, recall_final, fscore_final, _ = precision_recall_fscore_support(label_lookup[y_test], 85 | label_lookup[y_pred], 86 | average='macro') 87 | balanced_accuracy = balanced_accuracy_score(label_lookup[y_test], label_lookup[y_pred]) 88 | return cm,accuracy,balanced_accuracy,misclassification,precision,recall,fscore,support,precision_final, recall_final, fscore_final 89 | 90 | 91 | def random_forest(): 92 | return RandomForestClassifier(n_estimators=1000) 93 | 94 | def gb_tree(): 95 | return GradientBoostingClassifier(n_estimators=100,max_depth=8,subsample=0.7,min_samples_leaf=4) 96 | 97 | def adaboost_tree(): 98 | return AdaBoostClassifier(base_estimator=RandomForestClassifier(n_estimators=100),n_estimators=20) # removed learning rate = 0.5 99 | 100 | def adaboost_logistic(): 101 | return AdaBoostClassifier(base_estimator=LogisticRegression(solver='lbfgs',class_weight="balanced",penalty="l2",multi_class="auto",n_jobs=-1,max_iter=500), 102 | n_estimators=10,learning_rate=0.5) 103 | 104 | def logistic(): 105 | return make_pipeline(StandardScaler(),LogisticRegression(solver='saga',class_weight="balanced",penalty="l1",multi_class="auto",n_jobs=-1)) 106 | 107 | def ridge(): 108 | return RidgeClassifier(alpha=0.3,normalize=True,class_weight="balanced") 109 | 110 | def svm(): 111 | return make_pipeline(StandardScaler(),SVC(class_weight="balanced",gamma='scale',C=1000.0,kernel="rbf",max_iter=100000,probability=True)) 112 | 113 | def voter(): 114 | return VotingClassifier(estimators=[("svm",svm()),("rf",random_forest()),("adaboost",adaboost_tree())], 115 | voting="soft") 116 | 117 | def extra_trees(): 118 | return ExtraTreesClassifier(bootstrap=False, criterion="gini", max_features=0.35000000000000003, min_samples_leaf=11, min_samples_split=15, n_estimators=100) 119 | 120 | 121 | if algorithm=="RF": 122 | model_builder = random_forest 123 | elif algorithm=="GBTREE": 124 | model_builder = gb_tree 125 | elif algorithm=="ADABOOST": 126 | model_builder = adaboost_tree 127 | elif algorithm=="ADABOOST_LOGISTIC": 128 | model_builder = adaboost_logistic 129 | elif algorithm=="LOGISTIC": 130 | model_builder = logistic 131 | elif algorithm=="RIDGE": 132 | model_builder = ridge 133 | elif algorithm=="SVM": 134 | model_builder = svm 135 | elif algorithm=="VOTER": 136 | model_builder = voter 137 | elif algorithm=="EXTRA_TREES": 138 | model_builder = extra_trees 139 | 140 | 141 | skf = StratifiedKFold(n_splits=10) 142 | cv_results = [] 143 | for train_index, test_index in skf.split(X, y): 144 | X_train, X_test = X.iloc[train_index], X.iloc[test_index] 145 | y_train, y_test = y.iloc[train_index], y.iloc[test_index] 146 | r = train_test_get_metrics(model_builder,X_train, X_test, y_train, y_test) 147 | cv_results.append(r) 148 | 149 | def summarise_cv_results(cv_results): 150 | cm, accuracy, balanced_accuracy, misclassification, precision, recall, fscore,support, precision_final, recall_final, fscore_final = list(),list(),list(),list(),list(),list(),list(),list(),list(),list(),list() 151 | for r in cv_results: 152 | cm.append(r[0]) 153 | accuracy.append(r[1]) 154 | balanced_accuracy.append(r[2]) 155 | misclassification.append(r[3]) 156 | precision.append(r[4]) 157 | recall.append(r[5]) 158 | fscore.append(r[6]) 159 | support.append(r[7]) 160 | precision_final.append(r[8]) 161 | recall_final.append(r[9]) 162 | fscore_final.append(r[10]) 163 | 164 | 165 | accuracy = np.mean(accuracy) 166 | balanced_accuracy = np.mean(balanced_accuracy) 167 | misclassification = np.mean(misclassification) 168 | 169 | precision_final = np.mean(precision_final) 170 | recall_final = np.mean(recall_final) 171 | fscore_final = np.mean(fscore_final) 172 | 173 | precision = np.mean(precision,axis=0) 174 | recall = np.mean(recall,axis=0) 175 | fscore = np.mean(fscore,axis=0) 176 | support = np.mean(support,axis=0).astype(int) 177 | #cm = np.mean(cm,axis=0).astype(int)# mean not required 178 | cm = np.sum(cm,axis=0).astype(int) 179 | 180 | return cm, accuracy, balanced_accuracy, misclassification, precision, recall, fscore, support, precision_final, recall_final, fscore_final 181 | 182 | cm, accuracy, balanced_accuracy, misclassification, precision, recall, fscore, support, precision_final, recall_final, fscore_final = summarise_cv_results(cv_results) 183 | 184 | # Save the confusion matrix to file 185 | with open("results/confusion_matrix_%s.csv"%(algorithm), "w") as f: 186 | ordered_patterns = [] 187 | for i in range(len(cm[0])): 188 | ordered_patterns.append(label_lookup[i]) 189 | f.write("{0}\n".format(",".join(ordered_patterns))) 190 | for row in cm: 191 | f.write("{0}\n".format(",".join([str(i) for i in row]))) 192 | 193 | #--------------- Plot the confusion matrix ---------------# 194 | 195 | 196 | precision_recall_single_plot = True 197 | 198 | df1 = pd.DataFrame({"Design Pattern":label_lookup,"value":precision,"Metric":["Precision"]*len(label_lookup)}) 199 | df2 = pd.DataFrame({"Design Pattern": label_lookup, "value": recall, "Metric": ["Recall"] * len(label_lookup)}) 200 | df_p_r = pd.concat((df1,df2),ignore_index=True) 201 | f, (ax1) = plt.subplots(1, 1, figsize=(8, 9)) 202 | sns.barplot(x="Design Pattern",y="value",hue="Metric",data=df_p_r,ax=ax1) 203 | plt.ylim((0,1.15)) 204 | plt.legend(loc='upper right') 205 | ax1.set_title("Precision = %2.2f%% Recall = %.2f%%"%(precision_final*100,recall_final*100)) 206 | ax1.set_xlabel("Design Pattern") 207 | ax1.set_ylabel("Precision & Recall") 208 | plt.xticks(rotation=45, ha="right") 209 | plt.savefig("results/%s Precision-Recall Scores" % (algorithm)) 210 | plt.show() 211 | 212 | cmap = plt.get_cmap('Blues') # Colour scheme 213 | 214 | # Set the plotting environment 215 | fig, ax = plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True) 216 | im = ax.imshow(cm, cmap=cmap) # Plot the confusion matrix 217 | 218 | # Show all ticks 219 | ax.set_xticks(np.arange(len(cm[0]))) 220 | ax.set_yticks(np.arange(len(cm[1]))) 221 | 222 | # Label each axis tick 223 | ax.set_xticklabels(label_lookup) 224 | ax.set_yticklabels(label_lookup) 225 | 226 | # Label each axis 227 | ax.set_ylabel("True Label") 228 | ax.set_xlabel("Predicted label") 229 | # uncomment this line to print the accuracy, Precision and recall values. 230 | #ax.set_xlabel("Predicted label\n\nAccuracy={:2.1f}% Precision={:2.1f}% Recall={:2.1f}%".format(balanced_accuracy*100, precision_final*100, recall_final*100)) 231 | # ax.set_xlabel("Predicted label\n\nMisclassification={:2.2f}%".format(misclassification*100)) 232 | # Rotate the tick labels and set their alignment. 233 | plt.setp(ax.get_xticklabels(), rotation=45, ha="right", 234 | rotation_mode="anchor") 235 | 236 | # Draw a color bar in the figure 237 | # ax.figure.colorbar(im) 238 | 239 | # Loop over the data (confusion matrix) and label pixel with text 240 | thresh = cm.max() / 2 241 | for i in range(len(cm[0])): 242 | for j in range(len(cm[1])): 243 | text = ax.text(i, j, cm[i, j], 244 | ha="center", va="center", 245 | color="white" if cm[i, j] > thresh else "black") 246 | 247 | # Uncomment below line to add title to plot 248 | # ax.set_title("Design Pattern %s Classification Confusion Matrix"%(algorithm)) 249 | fig.tight_layout() 250 | plt.savefig("results/%s Classification"%(algorithm)) 251 | plt.show() 252 | #---------------------------------------------------------# 253 | 254 | classification_report_df = pd.DataFrame({"labels":label_lookup,"precision":precision,"recall":recall,"fscore":fscore,"support":support}) 255 | classification_report_df.to_csv("results/evaluation_%s.csv"%(algorithm),index=False) -------------------------------------------------------------------------------- /call_graph.py: -------------------------------------------------------------------------------- 1 | ''' 2 | build a graph similar to the following 3 | nodes=methods 4 | link[caller, callee] = (args) 5 | variable_types[(var, class)] = type 6 | variable_types[(var, method)] = type 7 | 8 | ''' 9 | import os 10 | import plyj.model as m 11 | from collections import defaultdict 12 | 13 | class Callgraph: 14 | #builds call graph linking functions 15 | #based on method invocations and declarations 16 | def __init__(self, tree): 17 | self.tree = tree 18 | # print "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" 19 | # print tree # Used for debugging 20 | # print "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" 21 | self.graph = {'in': defaultdict(set) 22 | , 'out': defaultdict(set)} 23 | self.nodes = [] 24 | self._from_tree() 25 | 26 | def _from_tree(self): 27 | if not self.tree: 28 | return 29 | for type_decl in self.tree.type_declarations: 30 | if not hasattr(type_decl, 'body'): 31 | continue 32 | for decl in type_decl.body: 33 | if type(decl) is m.MethodDeclaration: 34 | node = Node.from_obj(decl) 35 | self.nodes.append(node) 36 | for mm in node.links: 37 | self.graph['out'][node.name].add(mm) 38 | self.graph['in'][mm].add(node.name) 39 | 40 | @classmethod 41 | def from_file(cls, filename, parser): 42 | tree = parser.parse_file( 43 | filename) 44 | #print "Received tree ", tree 45 | return Callgraph(tree) 46 | 47 | class Node: 48 | #stores class information 49 | 50 | def __init__(self, 51 | name, return_val, params, 52 | methods, statement_types): 53 | self.name = name 54 | self.return_val = return_val 55 | self.params = params 56 | self.links = set() 57 | self.body = statement_types 58 | self._process_links(methods) 59 | 60 | def _process_links(self, methods): 61 | for md in methods: 62 | vs, ms = md 63 | for vv in vs: 64 | if type(vv) is tuple: 65 | vtype, vname = vv 66 | else: 67 | vname = vv 68 | vtype = None 69 | self.params[vname] = vtype 70 | for mm in ms: 71 | if type(mm) is tuple: 72 | self.links.add(mm[1]) 73 | else: 74 | self.links.add(mm) 75 | 76 | 77 | @classmethod 78 | def from_obj(cls, method_decl): 79 | name = method_decl.name 80 | return_val = cls.handle_return_type( 81 | method_decl) 82 | params = cls.handle_params(method_decl) 83 | methods, statement_types = \ 84 | cls.handle_body(method_decl) 85 | return Node(name, return_val, 86 | params, methods, 87 | statement_types) 88 | 89 | @classmethod 90 | def handle_return_type(cls, method_decl): 91 | return_val = None 92 | if method_decl.return_type \ 93 | is not None: 94 | return_val = obj_handler( 95 | method_decl.return_type) 96 | return return_val 97 | 98 | @classmethod 99 | def handle_params(cls, method_decl): 100 | params = {} 101 | for param in method_decl.parameters: 102 | param_type = obj_handler(param.type) 103 | if hasattr(param, 'name'): 104 | param_name = obj_handler(param.name) 105 | params[param_name] = param_type 106 | elif hasattr(param, 'variable'): 107 | param_name = obj_handler(param.variable) 108 | params[param_name] = param_type 109 | else: 110 | print("Unhandled param", param) 111 | return params 112 | 113 | @classmethod 114 | def handle_body(cls, method_decl): 115 | if method_decl.body is None: 116 | return [], [] 117 | methods = [] #track function calls 118 | statement_types = [] 119 | 120 | function_handling = { 121 | m.ClassInitializer : cls.cls_init, 122 | m.VariableDeclaration : \ 123 | cls.var_decl, 124 | m.Conditional: \ 125 | cls.condition_decl, 126 | m.Block: \ 127 | cls.block_decl, 128 | m.ArrayInitializer: \ 129 | cls.array_decl, 130 | m.MethodInvocation: \ 131 | cls.method_invoc, 132 | m.IfThenElse : \ 133 | cls.cond_decl, 134 | m.While: \ 135 | cls.loop_decl, 136 | m.For: \ 137 | cls.loop_decl, 138 | m.ForEach : \ 139 | cls.loop_decl, 140 | m.Switch: \ 141 | cls.switch_decl, 142 | m.SwitchCase: \ 143 | cls.switch_decl, 144 | m.DoWhile: \ 145 | cls.loop_decl, 146 | m.Try: \ 147 | cls.try_decl, 148 | m.Catch: \ 149 | cls.try_decl, 150 | m.ConstructorInvocation: \ 151 | cls.const_invoc, 152 | m.InstanceCreation : \ 153 | cls.inst_invoc, 154 | m.ExpressionStatement: \ 155 | cls.expr_decl, 156 | m.Assignment: \ 157 | cls.assign_decl, 158 | m.Return: 159 | cls.return_decl 160 | } 161 | 162 | for statement in method_decl.body: 163 | for kk, vv in function_handling.items(): 164 | if type(statement) is kk: 165 | statement_types.append( 166 | statement) 167 | methods += \ 168 | vv(statement, \ 169 | function_handling) 170 | return methods, statement_types 171 | 172 | @classmethod 173 | def cls_init(cls, s, f): 174 | methods = [] 175 | if not hasattr(s, 'block'): 176 | return methods 177 | if s.block is None: 178 | return methods 179 | 180 | if type(s.block) is m.Block: 181 | return f[m.Block](s.block, f) 182 | elif type(s.block) is list: 183 | for bstatement in s.block: 184 | for kk, vv in f.items(): 185 | if type(bstatement) \ 186 | is kk: 187 | methods += vv(bstatement, f) 188 | return methods 189 | 190 | @classmethod 191 | def var_decl(cls, s, f): 192 | methods = [] 193 | vtype = None 194 | vtype = obj_handler(s.type) 195 | vname = None 196 | vs = [] 197 | ms = [] 198 | for vv in s.variable_declarators: 199 | if type(vv) \ 200 | is m.VariableDeclarator: 201 | vname = obj_handler(vv.variable) 202 | vs.append((vtype, vname)) 203 | if type(vv.initializer) \ 204 | is m.MethodInvocation: 205 | ms.append((type(vv.initializer), 206 | obj_handler( 207 | vv.initializer))) 208 | elif type(vv.initializer) \ 209 | is m.InstanceCreation: 210 | ms.append((type(vv.initializer), 211 | obj_handler( 212 | vv.initializer.type))) 213 | methods.append((vs, ms)) 214 | return methods 215 | 216 | def condition_decl(cls, s, f): 217 | print("Conditional", s) 218 | return [] 219 | 220 | @classmethod 221 | def cast_decl(cls, s, f): 222 | methods = [] 223 | if not hasattr(s, 'target'): 224 | return methods 225 | if s.target is None: 226 | return methods 227 | for kk, vv in f.items(): 228 | if type(s.target) is kk: 229 | methods = vv(s.target, f) 230 | return methods 231 | 232 | @classmethod 233 | def block_decl(cls, s, f): 234 | methods = [] 235 | for bstatement in s.statements: 236 | for kk, vv in f.items(): 237 | if type(bstatement) is kk: 238 | methods += vv(bstatement, f) 239 | return methods 240 | @classmethod 241 | def array_decl(cls, s, f): 242 | print("Array", s) 243 | return [] 244 | 245 | @classmethod 246 | def method_invoc(cls, s, f): 247 | methods = [] 248 | vs = [] 249 | ms = [] 250 | ms.append(obj_handler(s)) 251 | if hasattr(s, 'target'): 252 | if s.target is not None: 253 | vs.append((type(s.target), 254 | obj_handler(s.target))) 255 | methods.append((vs, ms)) 256 | return methods 257 | 258 | @classmethod 259 | def cond_decl(cls, s, f): 260 | methods = [] 261 | for kk, vv in f.items(): 262 | if type(s.if_true) is \ 263 | kk: 264 | methods += \ 265 | vv(s.if_true, f) 266 | if type(s.if_false) is \ 267 | kk: 268 | methods += \ 269 | vv(s.if_false, f) 270 | return methods 271 | 272 | @classmethod 273 | def loop_decl(cls, s, f): 274 | methods = [] 275 | if s.body is None: 276 | return methods 277 | body = s.body 278 | if not type(s.body) is list: 279 | body = [s.body] 280 | for ss in body: 281 | for kk, vv in f.items(): 282 | if type(ss) is kk: 283 | methods += vv(ss, f) 284 | return methods 285 | 286 | @classmethod 287 | def try_decl(cls, s, f): 288 | #print(s) 289 | methods = [] 290 | if s.block is None: 291 | return methods 292 | 293 | for kk, vv in f.items(): 294 | if type(s.block) is kk: 295 | methods += vv(s.block, f) 296 | return methods 297 | 298 | @classmethod 299 | def switch_decl(cls, s, f): 300 | #print("Switch", s) 301 | return [] 302 | 303 | @classmethod 304 | def const_invoc(cls, s, f): 305 | print("Constructor", s) 306 | return [] 307 | 308 | @classmethod 309 | def inst_invoc(cls, s, f): 310 | methods = [] 311 | vs = [] 312 | ms = [] 313 | ms.append(obj_handler(s.type)) 314 | methods.append((vs, ms)) 315 | for kk, vv in f.items(): 316 | for ss in s.body: 317 | if type(ss) is kk: 318 | methods += \ 319 | vv(ss, f) 320 | return methods 321 | @classmethod 322 | def expr_decl(cls, s, f): 323 | methods = [] 324 | for kk, vv in f.items(): 325 | if type(s.expression) is kk: 326 | methods = vv(s.expression, f) 327 | return methods 328 | 329 | @classmethod 330 | def assign_decl(cls, s, f): 331 | methods = [] 332 | ms = [] 333 | vs = [] 334 | if s.lhs is not None: 335 | vs.append((None, 336 | obj_handler(s.lhs))) 337 | if s.rhs is not None: 338 | if type(s.rhs) \ 339 | is m.MethodInvocation: 340 | ms.append((type(s.rhs), 341 | obj_handler( 342 | s.rhs))) 343 | elif type(s.rhs) \ 344 | is m.InstanceCreation: 345 | ms.append((type(s.rhs), 346 | obj_handler( 347 | s.rhs.type))) 348 | methods.append((vs, ms)) 349 | return methods 350 | 351 | @classmethod 352 | def return_decl(cls, s, f): 353 | methods = [] 354 | ms = [] 355 | vs = [] 356 | stype = s.result 357 | if type(stype) is \ 358 | m.MethodInvocation: 359 | ms.append((type(stype), 360 | obj_handler( 361 | stype))) 362 | elif type(stype) \ 363 | is m.InstanceCreation: 364 | ms.append((type(stype), 365 | obj_handler( 366 | stype.type))) 367 | methods.append((vs, ms)) 368 | return methods 369 | 370 | def obj_handler(obj): 371 | if type(obj) is str: 372 | return obj 373 | else: 374 | if hasattr(obj, 'name'): 375 | if type(obj.name) is str: 376 | return obj.name 377 | elif type(obj.name) is m.Name: 378 | return obj.name.value 379 | elif type(obj.name) is m.Type: 380 | return obj.name.name.value 381 | else: 382 | print('Unknown obj handler', obj) 383 | else: 384 | if hasattr(obj, 'value'): 385 | if type(obj.value) is str: 386 | return obj.value 387 | else: 388 | return None 389 | -------------------------------------------------------------------------------- /extract_features_callgraph.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Script to extract features and create 3 | liblinear format files 4 | creates two files 5 | 1) feat.verbose 6 | describes all the features and classes 7 | 2) feat.liblinear 8 | liblinear format 9 | ''' 10 | import os 11 | import plyj.model as m 12 | import logging 13 | import subprocess 14 | import sys, traceback 15 | from re import finditer 16 | from call_graph import * 17 | 18 | logger = logging.getLogger() 19 | 20 | # Moved this function from summarizer to stop some circular references 21 | def check_dir(adir): 22 | #creates directories 23 | if not os.path.isdir(adir): 24 | invoke_command(['mkdir', adir]) 25 | 26 | # Moved this function from summarizer to stop some circular references 27 | def invoke_command(cmd_array): 28 | logging.debug('Run command: %s' 29 | %(' '.join(cmd_array))) 30 | subprocess.check_call(cmd_array) 31 | 32 | 33 | def _f(kk, vv, checkCamelCase=False): 34 | if not vv: 35 | return "NONEFEATURE" 36 | if checkCamelCase: 37 | feats = [] 38 | for cc in camel_case_split(vv): 39 | feats.append("%s:%s" %(kk, cc)) 40 | return " ".join(feats) 41 | else: 42 | return "%s:%s" %(kk, vv) 43 | 44 | def extract_features(inDir, outDir, parser): 45 | ''' 46 | inDir has projects/(input, output) pairs 47 | We are going to do the following 48 | for every project 49 | for every file in input and output 50 | 1) use the ply parser to parse the file 51 | 2) extract classname, method features 52 | 3) use the output to select the class values 53 | ''' 54 | features_to_extract = [ 55 | "class", #class name 56 | "class_modifiers", #class modifiers public, private 57 | "class_implements", #interfaces 58 | "class_extends", #extends some class 59 | "method_name_ngram", #ngram word feature 60 | "method_type_param", #type param 61 | "method_param", #inputs 62 | "method_return_type", #return type 63 | "method_num_variables", #number of variables 64 | "method_num_function", #number of func calls 65 | "method_num_lines", #size of method 66 | "method_incoming_functions", #incoming function size and names 67 | "method_incoming_function_names", #incoming function size and names 68 | "method_outgoing_functions", #outgoing function size and names 69 | "method_outgoing_function_names", #outgoing function size and names 70 | "method_body_line_types" #statement types 71 | ] 72 | training_size = 0 ## May be able to get rid of this if unused 73 | proj_counter = 0 # Counter for the number of projects 74 | file_counter = 0 # Counter for the number of files 75 | 76 | proj_file_list = defaultdict(list) # Dictionary to hold the names of files and their projects 77 | method_summaries = [] # List to hold the features extracted from each file 78 | 79 | # Iterate over all the projects in the corpus given by inDir 80 | for proj in os.listdir(inDir): 81 | proj_counter += 1 # Increment the project counter 82 | method_feature_list = [] ## List to store the features found 83 | 84 | rel_path = os.path.join(inDir, proj) # Path of current project 85 | 86 | # Debug Output: 87 | # print "PROJECT NAME:\t" + proj 88 | # print " PROJECT PATH:\t" + rel_path 89 | 90 | # Finds the root, directories and files in the current path 91 | for root, drs, files in os.walk( \ 92 | os.path.join(rel_path)): 93 | 94 | for input_file in files: 95 | file_counter += 1 # Increment the file counter 96 | proj_file_list[proj].append(input_file) # Store the filename 97 | 98 | # Debugging: 99 | # print "root {0} drs {1} input_file {2}".format(root, drs, input_file) 100 | 101 | # Ignores non-java files 102 | if not input_file.endswith(".java"): 103 | continue 104 | 105 | input_file_abs = os.path.join(root, input_file) 106 | 107 | # Debugging: 108 | # print "Input file:\t" + input_file 109 | # print 'Input_file_abs', input_file_abs 110 | 111 | try: 112 | # Generate a callgraph from the current file 113 | cgraph = Callgraph.from_file(input_file_abs, parser) 114 | # Grab a list of methods from the callgraph 115 | method_feature_list += \ 116 | from_tree(cgraph, features_to_extract) 117 | except Exception as e: 118 | logger.error("ERROR: " + e.message) 119 | logger.error('\t- Errored path:\t' + input_file_abs) # Changed from python 3 to python 2 syntax for consistency 120 | 121 | #print 'Method feature list', method_feature_list 122 | #print "Here we go!!!???!" 123 | training_size += len(method_feature_list) ## 124 | 125 | method_names_in_summary = [] 126 | #print "Starting loop1" 127 | #print "Trying to loop over: ", os.path.join(rel_path, "output") 128 | for root, drs, files in os.walk( \ 129 | os.path.join(rel_path)): 130 | for output_file in files: 131 | output_file_abs = os.path.join(root, output_file) 132 | try: 133 | tree = parser.parse_file(output_file_abs) 134 | except: 135 | logger.error('errored path'+ input_file_abs) 136 | print "Errored cgraph" +str(cgraph) 137 | #logger.error('errored cgraph'+ cgraph) 138 | continue 139 | 140 | method_names_in_summary += add_class_labels(tree, 141 | method_feature_list) 142 | 143 | #print "method_names_in_summary", method_names_in_summary 144 | 145 | #class_labels = {} 146 | # print "Now opening/creating:\t" + os.path.join(outDir, "%s.verbose" % proj) 147 | 148 | # Write summary of the current project file to a text file 149 | optr = open(os.path.join(outDir, "%s.verbose" % proj), "w") 150 | for mm in method_feature_list: 151 | # If the method has been selected for inclusion in the summary 152 | if mm[0] in method_names_in_summary: 153 | _line = "1\t%s\n" %(" ".join(mm[1])) 154 | optr.write(_line) 155 | method_summaries.append((1, mm[1])) 156 | else: 157 | _line = "0\t%s\n" %(" ".join(mm[1])) 158 | optr.write(_line) 159 | method_summaries.append((0, mm[1])) 160 | 161 | optr.close() 162 | 163 | # Write the summaries of all files in corpus to a file 164 | #Currently not needed... 165 | #full_out = open(os.path.join(outDir, "full_corpus.verbose"), "w") 166 | #for item in method_summaries: 167 | # full_out.write("%s\t%s\n" %(item[0], " ".join(item[1]))) 168 | #full_out.close() 169 | 170 | # Write some details about the corpus to a file 171 | summary = open(os.path.join(outDir, "corpus_summary.csv"), "w") 172 | summary.write("Number of projects, Number of files\n") 173 | summary.write(str(proj_counter) + ',' + str(file_counter) + '\n\n') 174 | summary.write("PROJECT, CLASS\n") 175 | for project, file_list in proj_file_list.iteritems(): 176 | for file in file_list: 177 | summary.write("%s, %s \n" %(project, file)) 178 | summary.close() 179 | 180 | return method_summaries 181 | 182 | def add_class_labels(tree, 183 | method_feature_list): 184 | #print "Tree type declarations is: ", tree.type_declarations 185 | #print "Method feature list: ",method_feature_list 186 | method_names_in_summary = [] 187 | try: 188 | #if tree is not None and tree.type_declarations is not None: 189 | if tree is not None: 190 | # For the objects in the body of the code 191 | # if type_decl != NONE and type_decl != "" 192 | #print "Tree type declaration is: ", tree.type_declarations 193 | for type_decl in tree.type_declarations: 194 | if not hasattr(type_decl, 'body'): 195 | continue 196 | # Construct a list of methods in the body of the code 197 | methods = [decl for decl in type_decl.body \ 198 | if type(decl) is m.MethodDeclaration] 199 | # Iterate through the above list of methods 200 | for method_decl in methods: 201 | try: 202 | method_string = str(method_decl) # Cast to string 203 | if "MethodInvocation" in method_string: 204 | ## Add the name of the method invoked by the current method?? 205 | method_names_in_summary += \ 206 | [x.split("'")[0] for x in \ 207 | method_string.split("MethodInvocation(name='")[1:]] 208 | except Exception as e: 209 | logger.error(str(e))# added str(e) to remove TypeError 210 | logger.error("\t- Error occured in add_class_labels function") 211 | continue 212 | # else: 213 | # print "There is a stupid error" 214 | # continue 215 | except Exception as e: 216 | logger.error(sys.stderr) 217 | # traceback.print_exc() 218 | # traceback.format_exc() 219 | return method_names_in_summary 220 | 221 | def from_tree(cgraph, fte): 222 | ''' 223 | takes a parse_tree and list of features to extract 224 | ''' 225 | method_feature_list = [] 226 | tree = cgraph.tree 227 | if not tree: 228 | return method_feature_list 229 | for type_decl in tree.type_declarations: 230 | #print 'TYPE DECL!!!!!!!!!', type_decl, '\n' 231 | class_feature_list = [] 232 | if not hasattr(type_decl, 'name'): 233 | return method_feature_list 234 | class_name = type_decl.name 235 | class_feature_list += handle_class(fte, 236 | type_decl) 237 | class_feature_list += handle_class_modifier(fte, 238 | type_decl) 239 | class_feature_list += handle_class_implements(fte, 240 | type_decl) 241 | class_feature_list += handle_class_extends(fte, 242 | type_decl) 243 | for method_decl in cgraph.nodes: 244 | feature_list = [] 245 | method_name = method_decl.name 246 | feature_list += handle_method_ngram(fte, 247 | method_decl) 248 | feature_list += handle_method_return(fte, 249 | method_decl) 250 | feature_list += handle_method_param(fte, 251 | method_decl) 252 | feature_list += handle_method_stats(fte, 253 | cgraph, method_decl) 254 | method_feature_list.append( 255 | (method_name, 256 | class_feature_list + feature_list)) 257 | return method_feature_list 258 | 259 | def handle_method_ngram(fte, method_decl): 260 | feature_list = [] 261 | method_name = method_decl.name 262 | if "method_name_ngram" in fte: 263 | feature_list.append( 264 | _f("CLASSMETHODNGRAM", 265 | method_name, checkCamelCase=True)) 266 | return feature_list 267 | 268 | def handle_method_return(fte, method_decl): 269 | feature_list = [] 270 | if "method_return_type" in fte: 271 | if method_decl.return_val is not None: 272 | feature_list.append( 273 | _f("CLASSMETHODRETURN", 274 | method_decl.return_val, 275 | checkCamelCase=True)) 276 | return feature_list 277 | 278 | def handle_method_param(fte, method_decl): 279 | feature_list = [] 280 | if "method_type_param" in fte: 281 | pkeys = method_decl.params.keys() 282 | pvalues = method_decl.params.values() 283 | feature_list.append(_f("CLASSMETHODPARAMCOUNT", 284 | str(len(pkeys)))) 285 | for kk, vv in zip(pkeys, pvalues): 286 | param_name = kk 287 | param_val = type2str(vv) 288 | if param_name is not None: 289 | feature_list.append( 290 | _f("CLASSMETHODPARAMNAME", 291 | param_name, checkCamelCase=True)) 292 | if param_val is not None: 293 | feature_list.append( 294 | _f("CLASSMETHODPARAMTYPE", 295 | param_val, checkCamelCase=True)) 296 | 297 | return feature_list 298 | 299 | def handle_method_stats(fte, cgraph, method_decl): 300 | feature_list = [] 301 | var_count = len(method_decl.params.keys()) 302 | lines_count = len(method_decl.body) 303 | 304 | if "method_num_variables" in fte: 305 | feature_list.append( 306 | _f("CLASSMETHODVARCOUNT", 307 | str(var_count))) 308 | if "method_num_lines" in fte: 309 | feature_list.append( 310 | _f("CLASSMETHODLINECOUNT", 311 | str(lines_count))) 312 | if "method_body_line_types" in fte: 313 | for st_type in method_decl.body: 314 | feature_list.append( 315 | _f("CLASSMETHODLINETYPE", 316 | type2str(st_type))) 317 | if "method_incoming_functions" in fte: 318 | in_count = len(cgraph.graph['in'][ 319 | method_decl.name]) 320 | feature_list.append( 321 | _f("CLASSMETHODINCOMING", 322 | str(in_count))) 323 | if "method_incoming_function_names" in fte: 324 | for in_name in cgraph.graph['in'][ 325 | method_decl.name]: 326 | feature_list.append( 327 | _f("CLASSMETHODINCOMINGNAME", 328 | in_name, checkCamelCase=True)) 329 | if "method_outgoing_functions" in fte: 330 | out_count = len(cgraph.graph['out'][ 331 | method_decl.name]) 332 | feature_list.append( 333 | _f("CLASSMETHODOUTGOING", 334 | str(out_count))) 335 | if "method_outgoing_function_names" in fte: 336 | for out_name in cgraph.graph['out'][ 337 | method_decl.name]: 338 | feature_list.append( 339 | _f("CLASSMETHODOUTGOINGNAME", 340 | out_name, checkCamelCase=True)) 341 | 342 | return feature_list 343 | 344 | 345 | def handle_class(fte, type_decl): 346 | feature_list = [] 347 | class_name = type_decl.name 348 | if "class" in fte: 349 | feature_list.append(_f("CLASSNAME", 350 | class_name)) 351 | return feature_list 352 | 353 | def handle_class_modifier(fte, type_decl): 354 | feature_list = [] 355 | if "class_modifiers" in fte: 356 | for mm in type_decl.modifiers: 357 | if type(mm) is str: 358 | feature_list.append(_f("CLASSMODIFIER", 359 | mm)) 360 | return feature_list 361 | 362 | def handle_class_implements(fte, type_decl): 363 | feature_list = [] 364 | if "class_implements" in fte: 365 | try: 366 | if len(type_decl.implements) is 0: 367 | feature_list.append(_f("CLASSIMPLEMENTS", 368 | "False")) 369 | else: 370 | feature_list.append(_f("CLASSIMPLEMENTS", 371 | "True")) 372 | for tt in type_decl.implements: 373 | feature_list.append(_f("CLASSIMPLEMENTNAME", 374 | tt.name.value, checkCamelCase=True)) 375 | except: #its an interface 376 | do_nothing = 1 377 | return feature_list 378 | 379 | def handle_class_extends(fte, type_decl): 380 | feature_list = [] 381 | if "class_extends" in fte: 382 | if not hasattr(type_decl, 'extends'): 383 | return feature_list 384 | 385 | if type_decl.extends is not None: 386 | feature_list.append(_f("CLASSEXTENDS", 387 | "True")) 388 | if type(type_decl.extends) is list: 389 | if len(type_decl.extends) > 0: 390 | for tt in type_decl.extends: 391 | feature_list.append( 392 | _f("CLASSEXTENDNAME", 393 | tt.name.value, 394 | checkCamelCase=True)) 395 | else: 396 | feature_list.append(_f("CLASSEXTENDNAME", 397 | type_decl.extends.name.value, 398 | checkCamelCase=True)) 399 | 400 | else: 401 | feature_list.append(_f("CLASSEXTENDS", 402 | "False")) 403 | return feature_list 404 | 405 | def camel_case_split(identifier): 406 | matches = finditer('.+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)', identifier) 407 | return [m.group(0) for m in matches] 408 | 409 | def type2str(s): 410 | if type(s) == str: 411 | return s 412 | else: 413 | return str(type(s)).split("'")[1] -------------------------------------------------------------------------------- /input-1300.csv: -------------------------------------------------------------------------------- 1 | Project,Class,Pattern 2 | jbehave-core,AbstractStepsFactory,AbstractFactory 3 | jbehave-core,CompositeStepsFactory,AbstractFactory 4 | jbehave-core,InjectableStepsFactory,AbstractFactory 5 | jbehave-core,InstanceStepsFactory,AbstractFactory 6 | jbehave-core,ProvidedStepsFactory,AbstractFactory 7 | jbehave-core,GroovyStepsFactory,AbstractFactory 8 | jbehave-core,GuiceStepsFactory,AbstractFactory 9 | jbehave-core,PicoStepsFactory,AbstractFactory 10 | jbehave-core,ScalaStepsFactory,AbstractFactory 11 | jbehave-core,SpringStepsFactory,AbstractFactory 12 | jbehave-core,WeldStepsFactory,AbstractFactory 13 | Generic-Graph-View,InstancemodelFactory,AbstractFactory 14 | Generic-Graph-View,InstancemodelFactoryImpl,AbstractFactory 15 | Generic-Graph-View,GraphViewMappingFactory,AbstractFactory 16 | Generic-Graph-View,GraphViewMappingFactoryImpl,AbstractFactory 17 | Generic-Graph-View,GraphViewStyleFactory,AbstractFactory 18 | Generic-Graph-View,GraphViewStyleFactoryImpl,AbstractFactory 19 | refactoring_guru,GUIFactory,AbstractFactory 20 | refactoring_guru,MacOSFactory,AbstractFactory 21 | refactoring_guru,WindowsFactory,AbstractFactory 22 | java-design-patterns-master,OrcKingdomFactory,AbstractFactory 23 | java-design-patterns-master,KingdomFactory,AbstractFactory 24 | java-design-patterns-master,ElfKingdomFactory,AbstractFactory 25 | java-design-patterns,AbstractFactory,AbstractFactory 26 | java-patterns,MySQLRegistrationDAOFactory,AbstractFactory 27 | java-patterns,OracleRegistrationDAOFactory,AbstractFactory 28 | java-patterns,RegistrationDAOAbstractFactory,AbstractFactory 29 | java-patterns,RegistrationDAOFactory,AbstractFactory 30 | java-patterns,MySQLRegistrationDAOFactory,AbstractFactory 31 | java-patterns,OracleRegistrationDAOFactory,AbstractFactory 32 | java-patterns,RegistrationDAOAbstractFactory,AbstractFactory 33 | java-patterns,RegistrationDAOFactory,AbstractFactory 34 | jpatterns,AbstractFactoryPattern,AbstractFactory 35 | A7B36ASS,AbstractFactory,AbstractFactory 36 | A7B36ASS,StudentFactory,AbstractFactory 37 | A7B36ASS,TeacherFactory,AbstractFactory 38 | milton,ResourceFactoryFactory,AbstractFactory 39 | milton,HrResourceFactoryFactory,AbstractFactory 40 | milton,SpringResourceFactoryFactory,AbstractFactory 41 | james,RestrictingRMISocketFactory,AbstractFactory 42 | james,RMISocketFactory,AbstractFactory 43 | DimSim,RTMPCodecFactory,AbstractFactory 44 | DimSim,RTMPMinaCodecFactory,AbstractFactory 45 | DimSim,RTMPTCodecFactory,AbstractFactory 46 | DimSim,SimpleProtocolCodecFactory,AbstractFactory 47 | DimSim,RemotingCodecFactory,AbstractFactory 48 | java-game-server,UDPChannelPipelineFactory,AbstractFactory 49 | jabylon,UsersFactory,AbstractFactory 50 | jabylon,UsersFactoryImpl,AbstractFactory 51 | cayenne,WidgetFactory,AbstractFactory 52 | cayenne,DefaultWidgetFactory,AbstractFactory 53 | Mavenized-Wave-In-A-Box,ViewFactory,AbstractFactory 54 | ASEME,IACFactory,AbstractFactory 55 | ASEME,IACFactoryImpl,AbstractFactory 56 | ASEME,StatechartFactory,AbstractFactory 57 | ASEME,StatechartFactoryImpl,AbstractFactory 58 | ASEME,SRMFactory,AbstractFactory 59 | ASEME,SRMFactoryImpl,AbstractFactory 60 | ASEME,AIPFactory,AbstractFactory 61 | ASEME,AIPFactoryImpl,AbstractFactory 62 | ASEME,SUCFactory,AbstractFactory 63 | ASEME,SUCFactoryImpl,AbstractFactory 64 | see,NumberFactory,AbstractFactory 65 | see,IntegerFactory,AbstractFactory 66 | see,BigDecimalFactory,AbstractFactory 67 | see,DoubleFactory,AbstractFactory 68 | see,LocalizedBigDecimalFactory,AbstractFactory 69 | petals-studio,JmsFactoryImpl,AbstractFactory 70 | petals-studio,JmsFactory,AbstractFactory 71 | petals-studio,Filetransfer2xFactory,AbstractFactory 72 | petals-studio,Filetransfer2xFactoryImpl,AbstractFactory 73 | petals-studio,MailFactory,AbstractFactory 74 | petals-studio,MailFactoryImpl,AbstractFactory 75 | petals-studio,Filetransfer3Factory,AbstractFactory 76 | petals-studio,Filetransfer3FactoryImpl,AbstractFactory 77 | petals-studio,Cdk5Factory,AbstractFactory 78 | petals-studio,Cdk5FactoryImpl,AbstractFactory 79 | petals-studio,JbiFactoryImpl,AbstractFactory 80 | petals-studio,JbiFactory,AbstractFactory 81 | zk,IDOMFactory,AbstractFactory 82 | zk,DefaultIDOMFactory,AbstractFactory 83 | zk,UiFactory,AbstractFactory 84 | zk,AbstractUiFactory,AbstractFactory 85 | ocl,AbapmappingFactory,AbstractFactory 86 | ocl,AbapmappingFactoryImpl,AbstractFactory 87 | ocl,CompleteOCLCSTFactory,AbstractFactory 88 | ocl,CompleteOCLCSTFactoryImpl,AbstractFactory 89 | ocl,XsdFactory,AbstractFactory 90 | ocl,XsdFactoryImpl,AbstractFactory 91 | ocl,UnresolvedFactory,AbstractFactory 92 | ocl,UnresolvedFactoryImpl,AbstractFactory 93 | ocl,AbapdictionaryFactory,AbstractFactory 94 | ocl,AbapdictionaryFactoryImpl,AbstractFactory 95 | ocl,OCLinEcoreCSTFactory,AbstractFactory 96 | ocl,OCLinEcoreCSTFactoryImpl,AbstractFactory 97 | ocl,ExpressionsFactory,AbstractFactory 98 | ocl,ExpressionsFactoryImpl,AbstractFactory 99 | ocl,ConstraintsFactory,AbstractFactory 100 | ocl,QuantitystructureFactory,AbstractFactory 101 | ocl,QuantitystructureFactoryImpl,AbstractFactory 102 | ChenSun,ReflectiveStatementInterceptorAdapter,Adapter 103 | ChenSun,V1toV2StatementInterceptorAdapter,Adapter 104 | accent,ChannelListenerAdapter,Adapter 105 | ccw,ClojureLineBreakpointAdapter,Adapter 106 | HunApkNotifier,HunApkListAdapter,Adapter 107 | pcgen-svn,PopupMouseAdapter,Adapter 108 | pcgen-svn,ListDataAdapter,Adapter 109 | pcgen-svn,TreeTableModelAdapter,Adapter 110 | cw-omnibus,ContentsAdapter,Adapter 111 | basiclti-portlet,AbstractAdapter,Adapter 112 | basiclti-portlet,ChemvantageAdapter,Adapter 113 | basiclti-portlet,IBasicLTIAdapter,Adapter 114 | basiclti-portlet,NoteflightAdapter,Adapter 115 | basiclti-portlet,PeoplesoftAdapter,Adapter 116 | basiclti-portlet,SakaiAdapter,Adapter 117 | basiclti-portlet,StandardAdapter,Adapter 118 | basiclti-portlet,WikispacesAdapter,Adapter 119 | basiclti-portlet,WimbaAdapter,Adapter 120 | Dual-Battery-Widget,IntentReceiver,Adapter 121 | Dual-Battery-Widget,BatteryLevelAdapter,Adapter 122 | WhartonEventScheduler,EventListCursorAdapter,Adapter 123 | WhartonEventScheduler,PeopleCursorAdapter,Adapter 124 | archaius,ExpandedConfigurationListenerAdapter,Adapter 125 | DownloadProvider,DateSortedDownloadAdapter,Adapter 126 | DownloadProvider,DateSortedExpandableListAdapter,Adapter 127 | DownloadProvider,DownloadAdapter,Adapter 128 | cdo,CDOLazyContentAdapter,Adapter 129 | cdo,CDOLegacyAdapter,Adapter 130 | cdo,CDOCommonEventAdapter,Adapter 131 | cdo,DawngenmodelItemProviderAdapterFactory,Adapter 132 | cdo,CDOItemProviderAdapter,Adapter 133 | cdo,CDODefsAdapterFactory,Adapter 134 | cdo,EresourceItemProviderAdapterFactory,Adapter 135 | cdo,EmbeddedDerbyAdapter,Adapter 136 | cdo,H2Adapter,Adapter 137 | cdo,HSQLDBAdapter,Adapter 138 | cdo,PostgreSQLAdapter,Adapter 139 | cdo,ContainerEventAdapter,Adapter 140 | cdo,DNDDropAdapter,Adapter 141 | SWE12-Drone,PrototypeBrickAdapter,Adapter 142 | gson,ProtoTypeAdapter,Adapter 143 | Catroid,PrototypeBrickAdapter,Adapter 144 | platform_frameworks_base,AnimatorListenerAdapter,Adapter 145 | spring-batch,ItemWriterAdapter,Adapter 146 | spring-batch,ItemReaderAdapter,Adapter 147 | cdk,RendererAdapter,Adapter 148 | cdk,NormalizedStringAdapter,Adapter 149 | cdk,AdapterBase,Adapter 150 | cdk,AttributeAdapter,Adapter 151 | cdk,BehaviorAdapter,Adapter 152 | cdk,BehaviorRendererAdapter,Adapter 153 | cdk,ClassAdapter,Adapter 154 | cdk,ComponentAdapter,Adapter 155 | cdk,ConverterAdapter,Adapter 156 | cdk,ElementAdapterBase,Adapter 157 | cdk,EventAdapter,Adapter 158 | cdk,FacesConfigAdapter,Adapter 159 | cdk,FacetAdapter,Adapter 160 | cdk,PropertyAdapter,Adapter 161 | cdk,RendererAdapter,Adapter 162 | cdk,ValidatorAdapter,Adapter 163 | HunApkNotifier,HunApkListAdapter,Adapter 164 | Mobile-Tour-Guide,BookmarkAdapter,Adapter 165 | ant,TypeAdapter,Adapter 166 | ant,RmicAdapter,Adapter 167 | ant,DefaultRmicAdapter,Adapter 168 | ant,Native2AsciiAdapter,Adapter 169 | ant,JspCompilerAdapter,Adapter 170 | ant,ExtensionAdapter,Adapter 171 | ant,TaskAdapter,Adapter 172 | teiid-designer,SearchRuntimeAdapter,Adapter 173 | teiid-designer,CustomDiagramActionAdapter,Adapter 174 | cdt,CDTViewerDropAdapter,Adapter 175 | cdt,TextViewerDragAdapter,Adapter 176 | cdt,DelegatingDropAdapter,Adapter 177 | cdt,LocationAdapter,Adapter 178 | cdt,CodeReaderAdapter,Adapter 179 | cdt,PDOMASTAdapter,Adapter 180 | cdt,ProjectIndexerInputAdapter,Adapter 181 | cdt,IndexerInputAdapter,Adapter 182 | cdt,LocationAdapter,Adapter 183 | cdt,BinaryObjectAdapter,Adapter 184 | cdt,WorkbenchRunnableAdapter,Adapter 185 | cdt,MultiBuildConsoleAdapter,Adapter 186 | cdt,CWorkbenchAdapter,Adapter 187 | cdt,DeferredCWorkbenchAdapter,Adapter 188 | cdt,BasicSelectionTransferDragAdapter,Adapter 189 | cdt,CDTViewerDragAdapter,Adapter 190 | cdt,CDTViewerDropAdapter,Adapter 191 | cdt,DelegatingDragAdapter,Adapter 192 | cdt,DocumentAdapter,Adapter 193 | cdt,MITTYAdapter,Adapter 194 | cdt,IListAdapter,Adapter 195 | Lord-of-Ultima-Manager,CityAdapter,Adapter 196 | Lord-of-Ultima-Manager,SessionAdapter,Adapter 197 | Lord-of-Ultima-Manager,TradeAdapter,Adapter 198 | Lord-of-Ultima-Manager,TradeRequestAdapter,Adapter 199 | Lord-of-Ultima-Manager,TroopAdapter,Adapter 200 | java-design-patterns,FishingBoatAdapter,Adapter 201 | java-design-patterns-master,FishingBoatAdapter,Adapter 202 | jbehave-core,AuthenticationPolicyBuilder,Builder 203 | jbehave-core,UserBuilder,Builder 204 | jbehave-core,AnnotationBuilder,Builder 205 | jbehave-core,StoryReporterBuilder,Builder 206 | jbehave-core,PatternVariantBuilder,Builder 207 | jbehave-core,GroovyAnnotationBuilder,Builder 208 | jbehave-core,GroovyAnnotationBuilderBehaviour,Builder 209 | jbehave-core,GuiceAnnotationBuilder,Builder 210 | jbehave-core,PicoAnnotationBuilder,Builder 211 | jbehave-core,PicoAnnotationBuilderBehaviour,Builder 212 | jbehave-core,SpringAnnotationBuilder,Builder 213 | jbehave-core,SpringStoryReporterBuilder,Builder 214 | jbehave-core,SpringStoryReporterBuilderBehaviour,Builder 215 | jbehave-core,WeldAnnotationBuilder,Builder 216 | ccw,ClojureBuilder,Builder 217 | ccw,LeiningenBuilder,Builder 218 | pcgen-svn,TermEvaluatorBuilder,Builder 219 | pcgen-svn,TermEvaluatorBuilderEQVar,Builder 220 | pcgen-svn,TermEvaluatorBuilderPCStat,Builder 221 | pcgen-svn,TermEvaluatorBuilderPCVar,Builder 222 | pcgen-svn,EqBuilder,Builder 223 | dozer,DozerBuilder,Builder 224 | dozer,TypeMappingBuilder,Builder 225 | dozer,BeanMappingBuilder,Builder 226 | dozer,ClassMapBuilder,Builder 227 | cdt,AutotoolsConfigurationBuilder,Builder 228 | cdt,AsmModelBuilder,Builder 229 | cruisecontrol,Builder,Builder 230 | cruisecontrol,PhingBuilder,Builder 231 | cruisecontrol,RakeBuilder,Builder 232 | cruisecontrol,ExecBuilder,Builder 233 | cruisecontrol,NantBuilder,Builder 234 | cruisecontrol,CompositeBuilder,Builder 235 | cruisecontrol,XcodeBuilder,Builder 236 | cruisecontrol,Maven2Builder,Builder 237 | cxf,JAXWSDefinitionBuilder,Builder 238 | cxf,ServiceWSDLBuilder,Builder 239 | cxf,StaxBuilder,Builder 240 | cxf,MTOMAssertionBuilder,Builder 241 | cxf,EndpointReferenceDomainExpressionBuilder,Builder 242 | cxf,JaxbAssertionBuilder,Builder 243 | cxf,AddressingAssertionBuilder,Builder 244 | cxf,RM11AssertionBuilder,Builder 245 | cdo,VersionBuilder,Builder 246 | fafdtibb,FastNodeBuilderFactory,Builder 247 | fafdtibb,FatNodeBuilderFactory,Builder 248 | fafdtibb,FuriousNodeBuilderFactory,Builder 249 | fafdtibb,MapperTreeBuilder,Builder 250 | fafdtibb,LimitModeTreeBuilderFactory,Builder 251 | pellet,ELTaxonomyBuilder,Builder 252 | pellet,OntBuilder,Builder 253 | teiid-designer,VdbModelBuilder,Builder 254 | geotoolkit-pending,RandomStyleBuilder,Builder 255 | mongkie,EnrichmentBuilder,Builder 256 | cdk,AptBuilder,Builder 257 | cdk,LibraryBuilder,Builder 258 | cdk,ModelBuilder,Builder 259 | coala,PdqMessageBuilderImpl,Builder 260 | coala,CDABuilder,Builder 261 | coala,DocumentEntryBuilder,Builder 262 | coala,PdqMessageBuilderImpl,Builder 263 | coala,PdqRouteBuilder,Builder 264 | cdt,CElementDeltaBuilder,Builder 265 | cdt,CModelBuilder2,Builder 266 | cdt,ACBuilder,Builder 267 | cdt,CodanBuilder,Builder 268 | cdt,ControlFlowGraphBuilder,Builder 269 | jamendo-android,DownloadJobBuilder,Builder 270 | jamendo-android,ReviewBuilder,Builder 271 | jamendo-android,AlbumBuilder,Builder 272 | jamendo-android,PlaylistBuilder,Builder 273 | jamendo-android,TrackBuilder,Builder 274 | jamendo-android,ArtistBuilder,Builder 275 | jamendo-android,LicenseBuilder,Builder 276 | jamendo-android,RadioBuilder,Builder 277 | jamendo-android,RadioDatabaseBuilder,Builder 278 | jamendo-android,AlbumDatabaseBuilder,Builder 279 | jamendo-android,TrackDatabaseBuilder,Builder 280 | pellet,FSMBuilder,Builder 281 | pellet,GenericTaxonomyBuilder,Builder 282 | soapui,EmptyPanelBuilder,Builder 283 | soapui,RestRequestPanelBuilder,Builder 284 | soapui,RestMethodPanelBuilder,Builder 285 | hazelcast-cluster-monitor,QueuePageBuilder,Builder 286 | hazelcast-cluster-monitor,MapPageBuilder,Builder 287 | maven-3,DefaultModelBuilder,Builder 288 | maven-3,DefaultSettingsBuilder,Builder 289 | maven-3,LifecycleWeaveBuilder,Builder 290 | maven-3,DefaultToolchainsBuilder,Builder 291 | maven-3,MavenSettingsBuilder,Builder 292 | maven-3,DefaultProjectBuilder,Builder 293 | de-webapp,AbstractContextBuilder,Builder 294 | de-webapp,AnalysisContextBuilder,Builder 295 | biojava-legacy,BioSQLRichObjectBuilder,Builder 296 | biojava-legacy,SearchBuilder,Builder 297 | biojava-legacy,SequenceBuilder,Builder 298 | biojava-legacy,SimpleAssemblyBuilder,Builder 299 | emf.compare,DiffBuilder,Builder 300 | refactoring_guru,Builder,Builder 301 | refactoring_guru,CarBuilder,Builder 302 | jbehave-core,EmbedderMonitorDecorator,Decorator 303 | jbehave-core,StepFailureDecoratorBehaviour,Decorator 304 | spring-stringtemplate,StringTemplateDecoratorServlet,Decorator 305 | pcgen-svn,ModifyChoiceDecorator,Decorator 306 | pcgen-svn,QualifiedDecorator,Decorator 307 | tapestry-bootstrap,BootStrapValidationDecorator,Decorator 308 | orion.server,GitFileDecorator,Decorator 309 | cdt,CElementDecorator,Decorator 310 | cdt,BuildConsoleStreamDecorator,Decorator 311 | cdt,CNavigatorProblemsLabelDecorator,Decorator 312 | cdt,ExcludedFileDecorator,Decorator 313 | cdt,IncludeFolderDecorator,Decorator 314 | cdt,ProblemsLabelDecorator,Decorator 315 | cdt,CElementDecorator,Decorator 316 | cdt,UpdatePolicyDecorator,Decorator 317 | cruisecontrol,LogFileSetupDecorator,Decorator 318 | cfeclipse,URLDecorator,Decorator 319 | cfeclipse,URLDecoratorDescriptor,Decorator 320 | cfeclipse,URLDecoratorImageDescriptor,Decorator 321 | cfeclipse,URLDecoratorManager,Decorator 322 | cfeclipse,ConfigFileDecorator,Decorator 323 | cfeclipse,ImageDecorator,Decorator 324 | frostwire-desktop,Decorator,Decorator 325 | frostwire-desktop,Decorator,Decorator 326 | fuzzydb,IDecorator,Decorator 327 | fuzzydb,Decorator,Decorator 328 | fuzzydb,DateDecorator,Decorator 329 | fuzzydb,AgeDecorator,Decorator 330 | fuzzydb,BooleanDecorator,Decorator 331 | ant,ResourceDecorator,Decorator 332 | teiid-designer,MappingLabelDecorator,Decorator 333 | fest-reflect,DecoratorInvocationHandler,Decorator 334 | fest-reflect,PostDecorator,Decorator 335 | fest-reflect,PreDecorator,Decorator 336 | mongkie,DecoratorItem,Decorator 337 | mongkie,TableDecoratorItem,Decorator 338 | mongkie,SimpleDefaultDecorator,Decorator 339 | mongkie,DecoratorLayout,Decorator 340 | mongkie,DecoratorLabelRenderer,Decorator 341 | freemind,ConditionNotSatisfiedDecorator,Decorator 342 | freemind,ExtendedAttributeTableModelDecorator,Decorator 343 | freemind,ReducedAttributeTableModelDecorator,Decorator 344 | molgenis_apps,BiobankDecorator,Decorator 345 | molgenis_apps,DBIndexUpdateDecorator,Decorator 346 | molgenis_apps,MeasurementDecorator,Decorator 347 | molgenis_apps,MeasurementDecorator,Decorator 348 | molgenis_apps,FlowcellDecorator,Decorator 349 | molgenis_apps,LibraryLaneDecorator,Decorator 350 | molgenis_apps,IdentifiableDecorator,Decorator 351 | molgenis_apps,MolgenisFileDecorator,Decorator 352 | molgenis_apps,NameableDecorator,Decorator 353 | molgenis_apps,TaskDecorator,Decorator 354 | molgenis_apps,EditableTableDecorator,Decorator 355 | molgenis_apps,AuthorizableDecorator,Decorator 356 | molgenis_apps,MolgenisUserDecorator,Decorator 357 | molgenis_apps,MolgenisFileDecorator,Decorator 358 | molgenis_apps,NameableDecorator,Decorator 359 | molgenis_apps,DataDecorator,Decorator 360 | molgenis_apps,MeasurementDecorator,Decorator 361 | molgenis_apps,DataDecorator,Decorator 362 | molgenis_apps,MeasurementDecorator,Decorator 363 | molgenis_apps,MolgenisFileDecorator,Decorator 364 | molgenis_apps,NameableDecorator,Decorator 365 | flume_1,DigestDecorator,Decorator 366 | flume_1,EventSinkDecorator,Decorator 367 | flume_1,FormatterDecorator,Decorator 368 | flume_1,MaskDecorator,Decorator 369 | flume_1,SelectDecorator,Decorator 370 | flume_1,BatchingDecorator,Decorator 371 | flume_1,GunzipDecorator,Decorator 372 | flume_1,GzipDecorator,Decorator 373 | flume_1,UnbatchingDecorator,Decorator 374 | flume_1,BenchmarkInjectDecorator,Decorator 375 | flume_1,BenchmarkReportDecorator,Decorator 376 | flume_1,BloomCheckDecorator,Decorator 377 | flume_1,ChokeDecorator,Decorator 378 | flume_1,DelayDecorator,Decorator 379 | flume_1,InMemoryDecorator,Decorator 380 | flume_1,InsistentAppendDecorator,Decorator 381 | flume_1,InsistentOpenDecorator,Decorator 382 | flume_1,LatchedDecorator,Decorator 383 | flume_1,LazyOpenDecorator,Decorator 384 | flume_1,MultiplierDecorator,Decorator 385 | flume_1,ReorderDecorator,Decorator 386 | flume_1,ValueDecorator,Decorator 387 | flume_1,ExceptionTwiddleDecorator,Decorator 388 | flume_1,HelloWorldDecorator,Decorator 389 | wayback,MementoReplayRendererDecorator,Decorator 390 | wayback,ReplayRendererDecorator,Decorator 391 | wayback,MementoReplayRendererDecorator,Decorator 392 | Get-Another-Label,DatumDecorator,Decorator 393 | Get-Another-Label,DawidSkeneDecorator,Decorator 394 | Get-Another-Label,Decorator,Decorator 395 | Get-Another-Label,WorkerDecorator,Decorator 396 | magic-config,DoubleTagDecorator,Decorator 397 | magic-config,SingleTagDecorator,Decorator 398 | magic-config,TagDecorator,Decorator 399 | magic-config,TripleTagDecorator,Decorator 400 | magic-config,DecoratorFactoryImpl,Decorator 401 | sitemesh2,AbstractDecoratorMapper,Decorator 402 | jbehave-core,User,Facade 403 | jbehave-core,Embedder,Facade 404 | jbehave-core,ParameterConverters,Facade 405 | ccw,ClojureCore,Facade 406 | pcgen-svn,InfoFactory,Facade 407 | pcgen-svn,KitFacade,Facade 408 | pcgen-svn,LanguageChooserFacade,Facade 409 | pcgen-svn,LanguageFacade,Facade 410 | pcgen-svn,LoadableFacade,Facade 411 | pcgen-svn,PartyFacade,Facade 412 | pcgen-svn,RaceFacade,Facade 413 | pcgen-svn,ReferenceFacade,Facade 414 | pcgen-svn,SizeFacade,Facade 415 | pcgen-svn,SkillFacade,Facade 416 | pcgen-svn,SourceSelectionFacade,Facade 417 | pcgen-svn,SpellFacade,Facade 418 | pcgen-svn,SpellSupportFacade,Facade 419 | pcgen-svn,StatFacade,Facade 420 | pcgen-svn,TempBonusFacade,Facade 421 | pcgen-svn,TemplateFacade,Facade 422 | pcgen-svn,TodoFacade,Facade 423 | pcgen-svn,UIDelegate,Facade 424 | pcgen-svn,AbstractListFacade,Facade 425 | pcgen-svn,DefaultListFacade,Facade 426 | pcgen-svn,DelegatingListFacade,Facade 427 | pcgen-svn,ListFacade,Facade 428 | pcgen-svn,ListFacades,Facade 429 | pcgen-svn,SortedListFacade,Facade 430 | pcgen-svn,XPTableFacade,Facade 431 | pcgen-svn,SimpleFacadeImpl,Facade 432 | pcgen-svn,CharacterLevelFacadeImpl,Facade 433 | pcgen-svn,DescriptionFacadeImpl,Facade 434 | pcgen-svn,DomainFacadeImpl,Facade 435 | pcgen-svn,EquipmentListFacadeImpl,Facade 436 | pcgen-svn,EquipmentSetFacadeImpl,Facade 437 | pcgen-svn,FacadeFactory,Facade 438 | pcgen-svn,LanguageChooserFacadeImpl,Facade 439 | pcgen-svn,CharacterFacadeImpl,Facade 440 | pcgen-svn,PartyFacadeImpl,Facade 441 | pcgen-svn,SpellSupportFacadeImpl,Facade 442 | pcgen-svn,GeneralChooserFacadeBase,Facade 443 | pcgen-svn,SpellFacadeImplem,Facade 444 | pcgen-svn,CharacterLevelsFacadeImpl,Facade 445 | pcgen-svn,TodoFacadeImpl,Facade 446 | intellij-community,FacetEditorFacade,Facade 447 | intellij-community,JavaCodeStyleSettingsFacade,Facade 448 | intellij-community,JavaPsiFacade,Facade 449 | intellij-community,FileIndexFacade,Facade 450 | intellij-community,MockFileIndexFacade,Facade 451 | intellij-community,CodeFormatterFacade,Facade 452 | intellij-community,CodeStyleFacade,Facade 453 | DownloadProvider,RealSystemFacade,Facade 454 | DownloadProvider,SystemFacade,Facade 455 | swp1-teamhub,AbstractFacade,Facade 456 | swp1-teamhub,AufgabeFacade,Facade 457 | swp1-teamhub,BenutzerFacade,Facade 458 | swp1-teamhub,KommentarFacade,Facade 459 | swp1-teamhub,ProjektFacade,Facade 460 | swp1-teamhub,TeamleiterFacade,Facade 461 | jogetworkflow,FormFacade,Facade 462 | jogetworkflow,WorkflowFacade,Facade 463 | activemq,JobSchedulerFacade,Facade 464 | activemq,DataManagerFacade,Facade 465 | activemq,JournalFacade,Facade 466 | activemq,BrokerFacade,Facade 467 | activemq,BrokerFacadeSupport,Facade 468 | activemq,DestinationFacade,Facade 469 | activemq,DurableSubscriberFacade,Facade 470 | activemq,JobFacade,Facade 471 | activemq,LocalBrokerFacade,Facade 472 | activemq,RemoteJMXBrokerFacade,Facade 473 | activemq,SingletonBrokerFacade,Facade 474 | maven-cuke4duke-jump-start,WebDriverFacade,Facade 475 | m2eclipse-extras,P2Facade,Facade 476 | m2eclipse-extras,P2FacadeImpl,Facade 477 | infinitest,EclipseFacade,Facade 478 | infinitest,ProjectFacade,Facade 479 | infinitest,WorkspaceFacade,Facade 480 | de-webapp,AnalysisServiceFacade,Facade 481 | de-webapp,DiskResourceServiceFacade,Facade 482 | de-webapp,FileEditorServiceFacade,Facade 483 | de-webapp,MessageServiceFacade,Facade 484 | de-webapp,TemplateServiceFacade,Facade 485 | de-webapp,UserSessionServiceFacade,Facade 486 | bio_quiz,AbstractFacade,Facade 487 | bio_quiz,PlayerFacade,Facade 488 | bio_quiz,QuestionFacade,Facade 489 | bio_quiz,QuizFacade,Facade 490 | betterFORM,FluxFacade,Facade 491 | po-mindstorms,FacadeSector,Facade 492 | hivedb,DirectoryFacade,Facade 493 | hivedb,DirectoryFacadeProvider,Facade 494 | Cours-3eme-ann-e,AbstractFacade,Facade 495 | Cours-3eme-ann-e,AeroportFacadeREST,Facade 496 | Cours-3eme-ann-e,VolFacadeREST,Facade 497 | faban,RunFacade,Facade 498 | LoL-Chat,IXmppFacade,Facade 499 | LoL-Chat,XmppFacade,Facade 500 | pmd,DumpFacade,Facade 501 | java-design-patterns,DwarvenGoldmineFacade,Facade 502 | pcgen-svn,InfoFactory,Facade 503 | pcgen-svn,FacadeFactory,Facade 504 | ecf,IIDFactory,FactoryMethod 505 | ecf,IDFactory,FactoryMethod 506 | Android_1,IClientSocketFactory,FactoryMethod 507 | jbehave-core,ExecutorServiceFactory,FactoryMethod 508 | jbehave-core,FixedThreadExecutors,FactoryMethod 509 | jbehave-core,SameThreadExecutors,FactoryMethod 510 | jbehave-core,FilePrintStreamFactory,FactoryMethod 511 | jbehave-core,PrintStreamFactory,FactoryMethod 512 | jbehave-core,SpringApplicationContextFactory,FactoryMethod 513 | mitfahrzentraleClient,ObjectFactory,FactoryMethod 514 | ccw,BreakpointAdapterFactory,FactoryMethod 515 | pcgen-svn,LevelCommandFactory,FactoryMethod 516 | pcgen-svn,CDOMFactory,FactoryMethod 517 | pcgen-svn,ManufacturableFactory,FactoryMethod 518 | pcgen-svn,CampaignInfoFactory,FactoryMethod 519 | tapestry-bootstrap,SessionBindingFactory,FactoryMethod 520 | tapestry-bootstrap,EnvironmentBindingFactory,FactoryMethod 521 | basiclti-portlet,BasicLTIAdapterFactory,FactoryMethod 522 | Dual-Battery-Widget,ChartFactory,FactoryMethod 523 | orion.server,OSGiConsoleFactory,FactoryMethod 524 | orion.server,GitSshSessionFactory,FactoryMethod 525 | orion.server,ResourceShapeFactory,FactoryMethod 526 | SamyGo-Android-Remote,SenderFactory,FactoryMethod 527 | SamyGo-Android-Remote,CSeriesKeyCodeSenderFactory,FactoryMethod 528 | SamyGo-Android-Remote,BSeriesKeyCodeSenderFactory,FactoryMethod 529 | dozer,UserBeanFactory,FactoryMethod 530 | dozer,SampleDefaultBeanFactory,FactoryMethod 531 | dozer,BaseSampleBeanFactory,FactoryMethod 532 | dozer,CacheKeyFactory,FactoryMethod 533 | dozer,JAXBBeanFactory,FactoryMethod 534 | iPage,IndexFactory,FactoryMethod 535 | cdt,ExternalEditorInputFactory,FactoryMethod 536 | java-game-server,TCPPipelineFactory,FactoryMethod 537 | java-game-server,UDPPipelineFactory,FactoryMethod 538 | fafdtibb,LimitModeTreeBuilderFactory,FactoryMethod 539 | cucumber-jvm,ResourceIteratorFactory,FactoryMethod 540 | cucumber-jvm,FileResourceIteratorFactory,FactoryMethod 541 | cucumber-jvm,ZipResourceIteratorFactory,FactoryMethod 542 | emergency-service-drools-app,ProcedureServiceFactory,FactoryMethod 543 | ant,ResourceFactory,FactoryMethod 544 | teiid-designer,CoreMatcherFactory,FactoryMethod 545 | santuario-java,SecurityTokenFactory,FactoryMethod 546 | santuario-java,SignatureAlgorithmFactory,FactoryMethod 547 | wayback,ReplayRendererDecoratorFactory,FactoryMethod 548 | wayback,ArchivalUrlResultURIConverterFactory,FactoryMethod 549 | wayback,QueryCaptureFilterGroupFactory,FactoryMethod 550 | magic-config,DecoratorFactory,FactoryMethod 551 | magic-config,DecoratorFactoryImpl,FactoryMethod 552 | faban,AboveTimedSSLSocketFactory,FactoryMethod 553 | faban,SocketFactory,FactoryMethod 554 | emf.compare,DefaultComparisonFactory,FactoryMethod 555 | refactoring_guru,HtmlDialog,FactoryMethod 556 | refactoring_guru,WindowsDialog,FactoryMethod 557 | Java-Design-Patterns,FactoryMethod,FactoryMethod 558 | jpatterns,FactoryMethodPattern,FactoryMethod 559 | tomcat70,EjbFactory,FactoryMethod 560 | tomcat70,ResourceFactory,FactoryMethod 561 | milton,ResourceFactory,FactoryMethod 562 | milton,HrResourceFactory,FactoryMethod 563 | soapui,ResponseEditorViewFactory,FactoryMethod 564 | soapui,EditorViewFactory,FactoryMethod 565 | soapui,ResponseInspectorFactory,FactoryMethod 566 | soapui,InspectorFactory,FactoryMethod 567 | soapui,RestServiceFactory,FactoryMethod 568 | api,ResourceReferenceFactory,FactoryMethod 569 | api,MockResourceFactory,FactoryMethod 570 | biomixer,ResourceSetAvatarDropCommandFactory,FactoryMethod 571 | biomixer,ResourceSetPresenterDropCommandFactory,FactoryMethod 572 | biomixer,ResourceSetAvatarFactory,FactoryMethod 573 | biomixer,ResourceSetFactory,FactoryMethod 574 | biomixer,SvgElementFactory,FactoryMethod 575 | biomixer,TextSvgElementFactory,FactoryMethod 576 | biomixer,JsDomSvgElementFactory,FactoryMethod 577 | biomixer,UpdateResourceSetAvatarLabelFactory,FactoryMethod 578 | biomixer,DisableIfEmptyResourceSetAvatarFactory,FactoryMethod 579 | biomixer,FixedLabelResourceSetAvatarFactory,FactoryMethod 580 | biomixer,HideIfEmptyResourceSetAvatarFactory,FactoryMethod 581 | biomixer,HighlightingResourceSetAvatarFactory,FactoryMethod 582 | biomixer,UpdateResourceSetAvatarLabelFactory,FactoryMethod 583 | biomixer,NcboRestUrlBuilderFactory,FactoryMethod 584 | biomixer,NcboJsonpRestUrlBuilderFactory,FactoryMethod 585 | biojava-legacy,SequenceBuilderFactory,FactoryMethod 586 | biojava-legacy,URLFactory,FactoryMethod 587 | ecf,ServiceResourceFactory,FactoryMethod 588 | cayenne,TextPaneViewFactory,FactoryMethod 589 | cayenne,ViewFactory,FactoryMethod 590 | javassist,ScopedClassPoolFactory,FactoryMethod 591 | javassist,ScopedClassPoolFactoryImpl,FactoryMethod 592 | hbase,ThriftServerMetricsSourceFactory,FactoryMethod 593 | hbase,ThriftServerMetricsSourceFactoryImpl,FactoryMethod 594 | maven-3,ToolchainFactory,FactoryMethod 595 | maven-3,DefaultJavaToolchainFactory,FactoryMethod 596 | maven-3,ArtifactRepositoryFactory,FactoryMethod 597 | maven-3,DefaultJavaToolchainFactory,FactoryMethod 598 | maven-3,ArtifactFactory,FactoryMethod 599 | maven-3,DefaultArtifactFactory,FactoryMethod 600 | smsc-server,UserManagerFactory,FactoryMethod 601 | smsc-server,DbUserManagerFactory,FactoryMethod 602 | smsc-server,PropertiesUserManagerFactory,FactoryMethod 603 | smsc-server,MessageManagerFactory,FactoryMethod 604 | dawn-ui,XYRegionMemento,Memento 605 | udig-platform,UdigMemento,Memento 606 | eclipse.platform.debug,ExpressionManagerMementoProvider,Memento 607 | eclipse.platform.debug,MemoryViewElementMementoProvider,Memento 608 | eclipse.platform.debug,ElementMementoProvider,Memento 609 | eclipse.platform.debug,BreakpointMementoProvider,Memento 610 | eclipse.platform.debug,ExpressionMementoProvider,Memento 611 | eclipse.platform.debug,IElementMementoRequest,Memento 612 | eclipse.platform.debug,IElementMementoProvider,Memento 613 | eclipse.platform.debug,XMLMemento,Memento 614 | eclipse.platform.debug,ControlsMementoProvider,Memento 615 | prevayler,MementoTransaction,Memento 616 | prevayler,Memento,Memento 617 | prevayler,MementoManagerCommand,Memento 618 | studio2,XMLMemento,Memento 619 | studio2,IMemento,Memento 620 | birt,MementoBuilder,Memento 621 | birt,Memento,Memento 622 | birt,MementoElement,Memento 623 | MPS,MappingsMemento,Memento 624 | MPS,MementoPersistence,Memento 625 | Generic-Graph-View,ColorMemento,Memento 626 | rap,MementoStateManager,Memento 627 | rap,XMLMemento,Memento 628 | rap,ConfigurationElementMemento,Memento 629 | eclipse.jdt.core,MementoTokenizer,Memento 630 | carrot2,SimpleXmlMemento,Memento 631 | LimeWire-Pirate-Edition,BTMetaInfoMementoImpl,Memento 632 | LimeWire-Pirate-Edition,BTDownloadMementoImpl,Memento 633 | LimeWire-Pirate-Edition,TorrentFileSystemMementoImpl,Memento 634 | LimeWire-Pirate-Edition,BTDiskManagerMementoImpl,Memento 635 | LimeWire-Pirate-Edition,MagnetDownloadMementoImpl,Memento 636 | LimeWire-Pirate-Edition,LibTorrentBTDownloadMementoImpl,Memento 637 | LimeWire-Pirate-Edition,InNetworkDownloadMementoImpl,Memento 638 | LimeWire-Pirate-Edition,InNetworkDownloadMemento,Memento 639 | LimeWire-Pirate-Edition,GnutellaDownloadMementoImpl,Memento 640 | LimeWire-Pirate-Edition,GnutellaDownloadMemento,Memento 641 | LimeWire-Pirate-Edition,VirusDefinitionDownloadMemento,Memento 642 | LimeWire-Pirate-Edition,DownloadMemento,Memento 643 | wayback,MementoReplayRendererDecorator,Memento 644 | drools,Memento,Memento 645 | HMS,AppointmentMemento,Memento 646 | Promasi-V2,CalculatedEquationMemento,Memento 647 | Promasi-V2,FlowSdObjectMemento,Memento 648 | Promasi-V2,OutputSdObjectMemento,Memento 649 | Promasi-V2,StockSdObjectMemento,Memento 650 | Promasi-V2,SdSystemMemento,Memento 651 | Promasi-V2,ProjectMemento,Memento 652 | Promasi-V2,ProjectTaskMemento,Memento 653 | Promasi-V2,TaskBridgeMemento,Memento 654 | Promasi-V2,GameModelMemento,Memento 655 | Promasi-V2,MarketPlaceMemento,Memento 656 | Promasi-V2,CompanyMemento,Memento 657 | Promasi-V2,EmployeeMemento,Memento 658 | Promasi-V2,EmployeeTaskMemento,Memento 659 | Promasi-V2,DepartmentMemento,Memento 660 | eclipse.platform.debug,RegisterGroupMementoProvider,Memento 661 | eclipse.platform.debug,DebugElementMementoProvider,Memento 662 | eclipse.platform.debug,StackFrameMementoProvider,Memento 663 | eclipse.platform.debug,MementoUpdate,Memento 664 | sherlog,SimpleLogEventFilterMemento,Memento 665 | studio3,XMLMemento,Memento 666 | Client,AddEntityMemento,Memento 667 | MPS,Memento,Memento 668 | jabylon,BasicMementoImpl,Memento 669 | jabylon,Memento,Memento 670 | JavaDesignPatternExercises,Memento,Memento 671 | JavaDesignPatternExercises,IMemento,Memento 672 | JavaDesignPatternExercises,Memento,Memento 673 | JavaDesignPatternExercises,IMemento,Memento 674 | geronimo,CORBAEJBMemento,Memento 675 | biojava-legacy,ExceptionMemento,Memento 676 | agetac-ng,AddEntityMemento,Memento 677 | eclipse.jdt.ui,Mementos,Memento 678 | eclipse.platform.ui,IMementoAware,Memento 679 | eclipse.platform.ui,IMemento,Memento 680 | eclipse.platform.ui,ConfigurationElementMemento,Memento 681 | eclipse.platform.ui,XMLMemento,Memento 682 | rt.equinox.p2,Memento,Memento 683 | Pydev,DialogMemento,Memento 684 | dawn-third,AnnotationMemento,Memento 685 | dawn-third,AxisMemento,Memento 686 | dawn-third,TraceMemento,Memento 687 | dawn-third,XYGraphMemento,Memento 688 | nuxeo-tycho-osgi,Memento,Memento 689 | nuxeo-tycho-osgi,XMLMemento,Memento 690 | rap,MementoStateManager,Memento 691 | rap,IMemento,Memento 692 | rap,ConfigurationElementMemento,Memento 693 | rap,XMLMemento,Memento 694 | MPS,MappingsMemento,Memento 695 | biomixer,Memento,Memento 696 | biomixer,Memento,Memento 697 | birt,Memento,Memento 698 | birt,MementoBuilder,Memento 699 | java-design-patterns,StarMemento,Memento 700 | prevayler,Memento,Memento 701 | drools,Memento,Memento 702 | refactoring_guru,Memento,Memento 703 | ChenSun,Statement,None 704 | ChenSun,AssertionFailedException,None 705 | ChenSun,BestResponseTimeBalanceStrategy,None 706 | ChenSun,Blob,None 707 | ChenSun,BlobFromLocator,None 708 | ChenSun,CachedResultSetMetaData,None 709 | ChenSun,CallableStatement,None 710 | ChenSun,CharsetMapping,None 711 | ChenSun,Clob,None 712 | ChenSun,CommunicationsException,None 713 | ChenSun,CompressedInputStream,None 714 | ChenSun,ConnectionFeatureNotAvailableException,None 715 | ChenSun,ConnectionGroup,None 716 | ChenSun,ConnectionGroupManager,None 717 | ChenSun,ConnectionImpl,None 718 | ChenSun,ConnectionProperties,None 719 | ChenSun,ConnectionPropertiesImpl,None 720 | ChenSun,ConnectionPropertiesTransform,None 721 | ChenSun,DatabaseMetaData,None 722 | ChenSun,DatabaseMetaDataUsingInfoSchema,None 723 | ChenSun,DocsConnectionPropsHelper,None 724 | ChenSun,EscapeProcessor,None 725 | ChenSun,ExportControlled,None 726 | ChenSun,Field,None 727 | ChenSun,ExtendedMysqlExceptionSorter,None 728 | ChenSun,MysqlValidConnectionChecker,None 729 | ChenSun,IterateBlock,None 730 | ChenSun,JDBC4MysqlPooledConnection,None 731 | ChenSun,JDBC4MysqlXAConnection,None 732 | ChenSun,JDBC4SuspendableXAConnection,None 733 | ChenSun,MysqlConnectionPoolDataSource,None 734 | ChenSun,MysqlDataSource,None 735 | ChenSun,MysqlXAConnection,None 736 | ChenSun,MysqlXADataSource,None 737 | ChenSun,SocialNetworkDBAThread,None 738 | ChenSun,SocialNetworkNavigation,None 739 | jbehave-core,AuthenticationSteps,None 740 | jbehave-core,DbUnitSteps,None 741 | jbehave-core,OrganizationSteps,None 742 | jbehave-core,ThreadsSteps,None 743 | jbehave-core,ThreadsStories,None 744 | jbehave-core,CalendarConverter,None 745 | jbehave-core,TraderConverter,None 746 | jbehave-core,FailureCorrelationStories,None 747 | jbehave-core,Stock,None 748 | jbehave-core,Trader,None 749 | jbehave-core,TraderPersister,None 750 | jbehave-core,TradingService,None 751 | jbehave-core,AbstractSteps,None 752 | jbehave-core,BeforeAfterSteps,None 753 | jbehave-core,CalendarSteps,None 754 | jbehave-core,CompositeNestedSteps,None 755 | jbehave-core,CompositeSteps,None 756 | jbehave-core,FailingBeforeAfterSteps,None 757 | jbehave-core,MetaParametrisationSteps,None 758 | jbehave-core,NamedParametersSteps,None 759 | jbehave-core,ParameterDelimitersSteps,None 760 | jbehave-core,ParametrisationByDelimitedNameSteps,None 761 | jbehave-core,ParametrisedSteps,None 762 | jbehave-core,PendingSteps,None 763 | jbehave-core,PriorityMatchingSteps,None 764 | jbehave-core,SandpitSteps,None 765 | jbehave-core,SearchSteps,None 766 | jbehave-core,TraderSteps,None 767 | jbehave-core,FailingAfterStories,None 768 | jbehave-core,FailingBeforeStories,None 769 | jbehave-core,ParameterDelimiters,None 770 | jbehave-core,ParametrisationByDelimitedName,None 771 | jbehave-core,SkipBeforeAndAfterScenarioStepsIfGivenStory,None 772 | jbehave-core,SkipScenariosAfterFailure,None 773 | jbehave-core,AnnotatedEmbedderUsingGuice,None 774 | jbehave-core,AnnotatedEmbedderUsingGuiceAndSteps,None 775 | jbehave-core,InheritingAnnotatedEmbedderUsingSteps,None 776 | jbehave-core,AnnotatedEmbedderUsingPico,None 777 | jbehave-core,AnnotatedEmbedderUsingPicoAndSteps,None 778 | jbehave-core,InheritingAnnotatedEmbedderUsingSteps,None 779 | jbehave-core,ParentAnnotatedEmbedderUsingPico,None 780 | jbehave-core,AnnotatedEmbedderUsingSpring,None 781 | jbehave-core,AnnotatedEmbedderUsingSpringAndSteps,None 782 | jbehave-core,AnnotatedEmbedderUsingSpringNamespace,None 783 | jbehave-core,SilentSuccessFilter,None 784 | jbehave-core,StackTraceFormatter,None 785 | jbehave-core,StepdocReporter,None 786 | 3taps-Java-Client,GeocoderRequest,None 787 | 3taps-Java-Client,GeocoderResponse,None 788 | 3taps-Java-Client,CreateResponse,None 789 | 3taps-Java-Client,DeleteResponse,None 790 | 3taps-Java-Client,UpdateResponse,None 791 | 3taps-Java-Client,BestMatchResponse,None 792 | 3taps-Java-Client,SearchRequest,None 793 | 3taps-Java-Client,SearchResponse,None 794 | 3taps-Java-Client,SummaryRequest,None 795 | 3taps-Java-Client,SummaryResponse,None 796 | 3taps-Java-Client,Annotation,None 797 | 3taps-Java-Client,AnnotationOption,None 798 | 3taps-Java-Client,Category,None 799 | 3taps-Java-Client,Posting,None 800 | 3taps-Java-Client,PostingHistory,None 801 | 3taps-Java-Client,Source,None 802 | 3taps-Java-Client,Utils,None 803 | jbehave-core,GameObserver,Observer 804 | jbehave-core,GameFrame,Observer 805 | jbehave-core,GameObserver,Observer 806 | pcgen-svn,ShowMessageConsoleObserver,Observer 807 | pcgen-svn,PersistenceObserver,Observer 808 | pcgen-svn,ShowMessageGuiObserver,Observer 809 | Dual-Battery-Widget,BillingObserver,Observer 810 | cxf,ColocMessageObserver,Observer 811 | cxf,MessageReplayObserver,Observer 812 | cxf,ClientMessageObserver,Observer 813 | cxf,MultipleEndpointObserver,Observer 814 | cxf,ChainInitiationObserver,Observer 815 | cxf,AbstractFaultChainInitiatorObserver,Observer 816 | cxf,ClientOutFaultObserver,Observer 817 | Cream,LoggingObserver,Observer 818 | brightroom,AppHistoryObserver,Observer 819 | CS230-Software-Project,Observable,Observer 820 | CS230-Software-Project,Observer,Observer 821 | harmony-classlib,Observable,Observer 822 | frostwire-desktop,TreeMouseObserver,Observer 823 | frostwire-desktop,MouseObserver,Observer 824 | frostwire-desktop,HeaderMouseObserver,Observer 825 | milton,ImageTableObserver,Observer 826 | jackrabbit,AccessControlObserver,Observer 827 | swing-mvc-demo,MainModelObserver,Observer 828 | arquillian-extension-persistence,EventObserver,Observer 829 | jge3d,Observer,Observer 830 | stratosphere,ExecutionObserver,Observer 831 | AndroidBillingLibrary,MockBillingObserver,Observer 832 | TurtlePlayer,PreferencesObserver,Observer 833 | softwaremill-common,TransactionExceptionObserver,Observer 834 | ju4pa,ConcurrentModificationObserver,Observer 835 | com.happyprog.tdgotchi,RefactoringObserver,Observer 836 | com.happyprog.tdgotchi,TamagotchiObserver,Observer 837 | jackrabbit,AccessControlObserver,Observer 838 | swing-mvc-demo,GroupModelObserver,Observer 839 | swing-mvc-demo,MainModelObserver,Observer 840 | swing-mvc-demo,UserModelObserver,Observer 841 | smsc-server,MessageObserver,Observer 842 | smsc-server,StatisticsObserver,Observer 843 | BMach,IObserver,Observer 844 | BMach,ISubject,Observer 845 | OneSwarm,DHTRouterObserver,Observer 846 | fop,ElementListObserver,Observer 847 | fop,LoggingElementListObserver,Observer 848 | UK-Ejemplos,Observer,Observer 849 | UK-Ejemplos,ObserverBuilder,Observer 850 | UK-Ejemplos,EventObserver,Observer 851 | arquillian_deprecated,ObserverImpl,Observer 852 | Android-Simple-Social-Sharing,FacebookEventObserver,Observer 853 | Android-Simple-Social-Sharing,TwitterEventObserver,Observer 854 | platform_frameworks_base,SyncStatusObserver,Observer 855 | ant,TimeoutObserver,Observer 856 | platform,Observers,Observer 857 | platform,RestAPIObserver,Observer 858 | platform,HiveAxis2ConfigObserver,Observer 859 | platform,ActivityMediationStatisticsObserver,Observer 860 | platform,BAMMediationStatisticsObserver,Observer 861 | platform,Axis2ConfigurationContextObserverImpl,Observer 862 | platform,Axis2ConfigurationContextObserverImpl,Observer 863 | platform,ConfigurationContextObserverImpl,Observer 864 | platform,Axis2ConfigurationContextObserverImpl,Observer 865 | platform,CassandraAxis2ConfigurationContextObserver,Observer 866 | platform,Axis2ConfigurationContextObserverImpl,Observer 867 | platform,CSGAgentObserver,Observer 868 | platform,CSGAgentObserverImpl,Observer 869 | platform,CSGServiceObserver,Observer 870 | platform,ActivityMediationStatisticsObserver,Observer 871 | platform,MediationStatsAxis2ConfigurationContextObserver,Observer 872 | platform,BAMMediationStatisticsObserver,Observer 873 | platform,ServiceStatisticsAxis2ConfigurationContextObserver,Observer 874 | platform,DSAxis2ConfigurationContextObserver,Observer 875 | platform,DeploymentSyncAxis2ConfigurationContextObserver,Observer 876 | platform,EventAxis2ConfigurationContextObserver,Observer 877 | platform,STSObserver,Observer 878 | platform,JAXWSAxis2ConfigurationObserver,Observer 879 | platform,JMXObserver,Observer 880 | platform,MediationStatisticsObserver,Observer 881 | platform,PersistingStatisticsObserver,Observer 882 | platform,Axis2ConfigurationContextObserverImpl,Observer 883 | platform,TaskAxis2ConfigurationContextObserver,Observer 884 | platform,ProxyServiceParameterObserver,Observer 885 | platform,RSSManagerAxis2ConfigContextObserver,Observer 886 | platform,SecurityAxis2ConfigurationContextObserver,Observer 887 | platform,Axis2ConfigurationContextObserverImpl,Observer 888 | platform,StatisticsAxis2ConfigurationContextObserver,Observer 889 | platform,ThrottlingAxis2ConfigurationContextObserver,Observer 890 | platform,TransactionManagerAxis2ConfigurationContextObserver,Observer 891 | platform,DiscoveryAxis2ConfigurationContextObserver,Observer 892 | platform,TargetServiceObserver,Observer 893 | platform,DiscoveryProxyObserver,Observer 894 | platform,AbstractSynapseObserver,Observer 895 | platform,SynapseObserver,Observer 896 | platform,MessageStoreObserver,Observer 897 | JavaDesignPatternExercises,IObserver,Observer 898 | JavaDesignPatternExercises,ISubject,Observer 899 | vogella,ElementObserver,Observer 900 | vogella,TotalObserver,Observer 901 | java-design-patterns-master,WeatherObserver,Observer 902 | vogella,MyObserver,Observer 903 | cdt,AutoconfPrototype,Prototype 904 | cdt,FunctionPrototypeSummary,Prototype 905 | OneSwarm,ExternalTextResourcePrototype,Prototype 906 | OneSwarm,ImageResourcePrototype,Prototype 907 | OneSwarm,ResourcePrototype,Prototype 908 | SmartBIPrototype,SmartBIPrototype,Prototype 909 | protogrid,GridPrototype,Prototype 910 | protogrid,BaseDataPrototype,Prototype 911 | kahlua2,Prototype,Prototype 912 | onebusaway-application-modules,ResourcePrototypeImpl,Prototype 913 | s4,PrototypeRequest,Prototype 914 | s4,PrototypeWrapper,Prototype 915 | s4,PrototypeRequest,Prototype 916 | Android-RTMP,FFMPEGPrototype,Prototype 917 | AxonFramework,SpringPrototypeAggregateFactory,Prototype 918 | spring-social-twitter,PlacePrototype,Prototype 919 | modapi,Prototype,Prototype 920 | helma,Prototype,Prototype 921 | gansenbang,PrototypeWrapper,Prototype 922 | Alice,ElementPrototype,Prototype 923 | Alice,QuestionPrototype,Prototype 924 | Alice,ResponsePrototype,Prototype 925 | Alice,CallToUserDefinedQuestionPrototype,Prototype 926 | Alice,CallToUserDefinedResponsePrototype,Prototype 927 | SWE12-Drone,PrototypeBrickAdapter,Prototype 928 | OneSwarm,ExternalTextResourcePrototype,Prototype 929 | OneSwarm,ImageResourcePrototype,Prototype 930 | OneSwarm,ResourcePrototype,Prototype 931 | movsim,VehiclePrototype,Prototype 932 | thredds,Nc4prototypes,Prototype 933 | xdi2,Prototype,Prototype 934 | AxonFramework,SpringPrototypeAggregateFactory,Prototype 935 | spring-social-twitter,PlacePrototype,Prototype 936 | IDV,PrototypeManager,Prototype 937 | modapi,Prototype,Prototype 938 | helma,Prototype,Prototype 939 | liferay-portal,LayoutSetPrototypeWrapper,Prototype 940 | liferay-portal,LayoutPrototypeWrapper,Prototype 941 | liferay-portal,LayoutPrototypeLocalService,Prototype 942 | liferay-portal,LayoutPrototypeLocalServiceWrapper,Prototype 943 | liferay-portal,LayoutPrototypePermission,Prototype 944 | liferay-portal,LayoutPrototypeBaseImpl,Prototype 945 | liferay-portal,LayoutPrototypeImpl,Prototype 946 | liferay-portal,LayoutPrototype,Prototype 947 | protoj,Prototype,Prototype 948 | Catroid,PrototypeBrickAdapter,Prototype 949 | crunch,JobPrototype,Prototype 950 | sablecc,MParamPrototype,Prototype 951 | sablecc,MMacroCreatorPrototype,Prototype 952 | sablecc,MParamRefPrototype,Prototype 953 | wolips,EOPrototypeListContentProvider,Prototype 954 | wolips,EOPrototypeListLabelProvider,Prototype 955 | osate2-core,ComponentPrototype,Prototype 956 | osate2-core,ComponentPrototypeActual,Prototype 957 | osate2-core,ComponentPrototypeBinding,Prototype 958 | osate2-core,FeatureGroupPrototype,Prototype 959 | osate2-core,FeaturePrototype,Prototype 960 | osate2-core,AbstractPrototypeImpl,Prototype 961 | osate2-core,BusPrototypeImpl,Prototype 962 | osate2-core,ComponentPrototypeActualImpl,Prototype 963 | osate2-core,ComponentPrototypeImpl,Prototype 964 | osate2-core,ComponentPrototypeImpl,Prototype 965 | osate2-core,DataPrototypeImpl,Prototype 966 | osate2-core,DevicePrototypeImpl,Prototype 967 | osate2-core,FeatureGroupPrototypeActualImpl,Prototype 968 | osate2-core,FeatureGroupPrototypeBindingImpl,Prototype 969 | osate2-core,FeatureGroupPrototypeImpl,Prototype 970 | osate2-core,FeaturePrototypeActualImpl,Prototype 971 | osate2-core,FeaturePrototypeImpl,Prototype 972 | osate2-core,FeaturePrototypeReferenceImpl,Prototype 973 | osate2-core,MemoryPrototypeImpl,Prototype 974 | osate2-core,ProcessorPrototypeImpl,Prototype 975 | osate2-core,ProcessPrototypeImpl,Prototype 976 | osate2-core,PrototypeBindingImpl,Prototype 977 | osate2-core,PrototypeImpl,Prototype 978 | osate2-core,SubprogramGroupPrototypeImpl,Prototype 979 | osate2-core,SubprogramPrototypeImpl,Prototype 980 | osate2-core,SystemPrototypeImpl,Prototype 981 | osate2-core,ThreadGroupPrototypeImpl,Prototype 982 | osate2-core,ThreadPrototypeImpl,Prototype 983 | osate2-core,VirtualBusPrototypeImpl,Prototype 984 | osate2-core,VirtualProcessorPrototypeImpl,Prototype 985 | osate2-core,Prototype,Prototype 986 | osate2-core,PrototypeBinding,Prototype 987 | lcmc,PrototypeFactory,Prototype 988 | social_1,PlacePrototype,Prototype 989 | Android-RTMP,FFMPEGPrototype,Prototype 990 | wonder,ERPrototypes,Prototype 991 | TapIt-Android-SDK-Source,AlertAdProxyPrototype,Prototype 992 | TapIt-Android-SDK-Source,BannerViewProxyPrototype,Prototype 993 | TapIt-Android-SDK-Source,InterstitialAdProxyPrototype,Prototype 994 | TapIt-Android-SDK-Source,TapitandroidModulePrototype,Prototype 995 | computercraft-spout,Prototype,Prototype 996 | JagTrack,Prototype,Prototype 997 | java-design-patterns,Prototype,Prototype 998 | computercraft-spout,Prototype,Prototype 999 | suite,Prototype,Prototype 1000 | protoj,Prototype,Prototype 1001 | java-design-patterns-master,Prototype,Prototype 1002 | ChenSun,FailoverConnectionProxy,Proxy 1003 | ChenSun,LoadBalancingConnectionProxy,Proxy 1004 | accent,ControlledConnectionProxy,Proxy 1005 | cdt,PathEntryStoreProxy,Proxy 1006 | cdt,AbstractCExtensionProxy,Proxy 1007 | cdt,CDataProxy,Proxy 1008 | cdt,CDataProxyContainer,Proxy 1009 | cdt,CfgProxyCache,Proxy 1010 | cdt,PDOMProxy,Proxy 1011 | cdt,IncludeReferenceProxy,Proxy 1012 | cdt,CEditorTextHoverProxy,Proxy 1013 | cdt,ModulesViewModelProxy,Proxy 1014 | cdt,SignalsViewModelProxy,Proxy 1015 | cdt,BreakpointVMModelProxyStrategy,Proxy 1016 | cdt,ExpressionVMProviderModelProxyStrategy,Proxy 1017 | cdt,DefaultVMModelProxyStrategy,Proxy 1018 | playorm,IterProxy,Proxy 1019 | playorm,CursorProxy,Proxy 1020 | playorm,ListProxy,Proxy 1021 | playorm,NoSqlProxy,Proxy 1022 | playorm,NoSqlProxyImpl,Proxy 1023 | playorm,IterLogProxy,Proxy 1024 | playorm,IterableProxy,Proxy 1025 | cdo,CDOElementProxy,Proxy 1026 | cdo,CDOElementProxyImpl,Proxy 1027 | cdo,ObjyProxy,Proxy 1028 | harmony-classlib,Proxy,Proxy 1029 | harmony-classlib,DataProxy,Proxy 1030 | harmony-classlib,AWTEventListenerProxy,Proxy 1031 | harmony-classlib,DragSourceEventProxy,Proxy 1032 | harmony-classlib,BeanContextChildComponentProxy,Proxy 1033 | harmony-classlib,BeanContextContainerProxy,Proxy 1034 | harmony-classlib,BeanContextProxy,Proxy 1035 | harmony-classlib,PropertyChangeListenerProxy,Proxy 1036 | harmony-classlib,VetoableChangeListenerProxy,Proxy 1037 | harmony-classlib,MockBeanContextProxy,Proxy 1038 | harmony-classlib,MockBeanContextProxyS,Proxy 1039 | harmony-classlib,Proxy,Proxy 1040 | harmony-classlib,Proxy,Proxy 1041 | harmony-classlib,ProxySelector,Proxy 1042 | harmony-classlib,ProxySelectorImpl,Proxy 1043 | harmony-classlib,EventListenerProxy,Proxy 1044 | harmony-classlib,ActionProxy,Proxy 1045 | frostwire-desktop,NetworkAdminHTTPProxyImpl,Proxy 1046 | frostwire-desktop,ProxyDefintion,Proxy 1047 | frostwire-desktop,FrmProxy,Proxy 1048 | frostwire-desktop,ProxyBlock,Proxy 1049 | frostwire-desktop,ProxyController,Proxy 1050 | frostwire-desktop,ProxyData,Proxy 1051 | frostwire-desktop,ElementalReverseProxy,Proxy 1052 | frostwire-desktop,DnDCellRendererProxy,Proxy 1053 | frostwire-desktop,MRJ23EventProxy,Proxy 1054 | frostwire-desktop,MRJ4EventProxy,Proxy 1055 | frostwire-desktop,MRJEventProxy,Proxy 1056 | javassist,ProxyObject,Proxy 1057 | javassist,Proxy,Proxy 1058 | javassist,Proxy,Proxy 1059 | geotoolkit-pending,GeometryProxy,Proxy 1060 | santuario-java,ElementProxy,Proxy 1061 | santuario-java,EncryptionElementProxy,Proxy 1062 | santuario-java,SignatureElementProxy,Proxy 1063 | james,MimeMessageCopyOnWriteProxy,Proxy 1064 | wayback,ARCRecordingProxy,Proxy 1065 | wayback,ARCUnwrappingProxy,Proxy 1066 | platform,AbstractProxy,Proxy 1067 | platform,PaypalNVPProxy,Proxy 1068 | platform,PaypalSOAPProxy,Proxy 1069 | platform,SalesforceProxyImpl,Proxy 1070 | platform,SalesforceProxy,Proxy 1071 | platform,AbstractPDPProxy,Proxy 1072 | platform,PDPProxy,Proxy 1073 | OpenSIG,ComercialProxy,Proxy 1074 | OpenSIG,ExportacaoProxy,Proxy 1075 | OpenSIG,ImportacaoProxy,Proxy 1076 | DimSim,ObjectProxy,Proxy 1077 | DimSim,DebugProxyHandler,Proxy 1078 | DimSim,EventsJsonProxy,Proxy 1079 | DimSim,PopoutPanelProxy,Proxy 1080 | DimSim,PopoutWindowProxy,Proxy 1081 | BuildCraft,BuilderProxy,Proxy 1082 | BuildCraft,BuilderProxyClient,Proxy 1083 | BuildCraft,BuildersProxy,Proxy 1084 | BuildCraft,CoreProxy,Proxy 1085 | BuildCraft,CoreProxyClient,Proxy 1086 | BuildCraft,EnergyProxy,Proxy 1087 | BuildCraft,EnergyProxyClient,Proxy 1088 | BuildCraft,FactoryProxy,Proxy 1089 | BuildCraft,FactoryProxyClient,Proxy 1090 | BuildCraft,SiliconProxy,Proxy 1091 | BuildCraft,SiliconProxyClient,Proxy 1092 | BuildCraft,TransportProxy,Proxy 1093 | ecf,SmartProxy,Proxy 1094 | ecf,Proxy,Proxy 1095 | TapIt-Android-SDK-Source,AlertAdProxyPrototype,Proxy 1096 | TapIt-Android-SDK-Source,BannerViewProxyPrototype,Proxy 1097 | TapIt-Android-SDK-Source,InterstitialAdProxyPrototype,Proxy 1098 | TapIt-Android-SDK-Source,AlertAdProxy,Proxy 1099 | Alitheia-Core,ProxyServlet,Proxy 1100 | BeeQueue,ProxyFactory,Proxy 1101 | java-design-patterns,WizardTowerProxy,Proxy 1102 | jbehave-core,WeldStepsFactory,Singleton 1103 | sshj,SingletonRandomFactory,Singleton 1104 | playorm,FactorySingleton,Singleton 1105 | jackrabbit,SingletonRepositoryFactory,Singleton 1106 | cruisecontrol,ServerNameSingleton,Singleton 1107 | java-game-server,ExecutionHandlerSingleton,Singleton 1108 | iBatisWorkShop,NoXmlSingletonConnectionManager,Singleton 1109 | iBatisWorkShop,SingletonConnectionManager,Singleton 1110 | sshj,SingletonRandomFactory,Singleton 1111 | jboss-aejb,SingletonAEjbHandler,Singleton 1112 | playorm,FactorySingleton,Singleton 1113 | kodejava,Singleton,Singleton 1114 | kodejava,SingletonDemo,Singleton 1115 | kodejava,Singleton,Singleton 1116 | intellij-community,CachedSingletonsRegistry,Singleton 1117 | intellij-community,NewInstanceOfSingletonInspection,Singleton 1118 | intellij-community,SingletonInspection,Singleton 1119 | intellij-community,Singleton,Singleton 1120 | intellij-community,SingletonMap,Singleton 1121 | AllBinary-Platform,UploadMediaSingleton,Singleton 1122 | AllBinary-Platform,LicenseInterfaceSingleton,Singleton 1123 | AllBinary-Platform,InputAutomationModuleConfigurationsSingletonFactory,Singleton 1124 | AllBinary-Platform,ImageComparisonResultCacheSingleton,Singleton 1125 | AllBinary-Platform,ConsolidatedMotionRectanglesResultsCacheSingleton,Singleton 1126 | AllBinary-Platform,AllMotionRectanglesResultsCacheSingleton,Singleton 1127 | AllBinary-Platform,ProcessPaintableSingletonFactory,Singleton 1128 | AllBinary-Platform,NoGameNotificationHudSingleton,Singleton 1129 | AllBinary-Platform,GameConfigurationSingleton,Singleton 1130 | AllBinary-Platform,KeySingletonFactory,Singleton 1131 | AllBinary-Platform,StoreAdminUserEmailEventHandlerSingletons,Singleton 1132 | AllBinary-Platform,AdminUserEmailEventHandlerSingletons,Singleton 1133 | AllBinary-Platform,UserEmailEventHandlerSingletons,Singleton 1134 | AllBinary-Platform,CurrentlyPressedTouchButtonSingleton,Singleton 1135 | AllBinary-Platform,TestingInputSingleton,Singleton 1136 | AllBinary-Platform,MakeCountedPartsSingletonArrayFactory,Singleton 1137 | AllBinary-Platform,HighScoreNamePersistanceSingleton,Singleton 1138 | AllBinary-Platform,GameConfigurationPersistanceSingleton,Singleton 1139 | AllBinary-Platform,GamePersistanceSingleton,Singleton 1140 | AllBinary-Platform,NullHighScoresSingletonFactory,Singleton 1141 | AllBinary-Platform,RemoteErrorHighScoresSingletonFactory,Singleton 1142 | AllBinary-Platform,PrimitiveLongSingleton,Singleton 1143 | AllBinary-Platform,SmallIntegerSingletonFactory,Singleton 1144 | AllBinary-Platform,DisplayInfoSingleton,Singleton 1145 | AllBinary-Platform,ConstrainedMotionRectanglesResultsCacheSingleton,Singleton 1146 | AllBinary-Platform,BufferedImagePoolSingleton,Singleton 1147 | android-rackspacecloud,ApacheHCHttpCommandExecutorServiceModule,Singleton 1148 | android-rackspacecloud,NioTransformingHttpCommandExecutorServiceModule,Singleton 1149 | android-rackspacecloud,ConnectionPoolCommandExecutorServiceModule,Singleton 1150 | cucumber-jvm,SingletonFactory,Singleton 1151 | small-team-km-android-client,ActivitiesStackSingleton,Singleton 1152 | small-team-km-android-client,ImageCacheSoftRefSingleton,Singleton 1153 | jackrabbit,SingletonRepositoryFactory,Singleton 1154 | zen-project,SingletonSolrAware,Singleton 1155 | cytoscape-plugins,ObjectFactorySingleton,Singleton 1156 | alfresco,TransactionAwareSingleton,Singleton 1157 | XobotOS,Singleton,Singleton 1158 | cayenne,SingletonFaultFactory,Singleton 1159 | CIDE,ScreenSingleton,Singleton 1160 | CIDE,ScreenSingleton,Singleton 1161 | hypergraphdb,CacheActionQueueSingleton,Singleton 1162 | lyo.rio,ServiceProviderSingleton,Singleton 1163 | lyo.rio,ServiceProviderSingleton,Singleton 1164 | emergency-service-drools-app,MessageServerSingleton,Singleton 1165 | platform_frameworks_base,Singleton,Singleton 1166 | LimeWire-Pirate-Edition,AbstractLazySingletonProvider,Singleton 1167 | geotoolkit-pending,SingletonIterator,Singleton 1168 | activemq,SingletonBrokerFacade,Singleton 1169 | hivedb,SingletonHiveSessionFactoryBuilder,Singleton 1170 | api,IsolatedStaticSingletonProvider,Singleton 1171 | api,TCCLSingletonProvider,Singleton 1172 | api,Singleton,Singleton 1173 | api,SingletonProvider,Singleton 1174 | cogroo4,CogrooSingleton,Singleton 1175 | openejb,ThreadSingletonService,Singleton 1176 | openejb,ThreadSingletonServiceImpl,Singleton 1177 | openejb,SingletonContainerBuilder,Singleton 1178 | openejb,SingletonContainer,Singleton 1179 | openejb,SingletonContext,Singleton 1180 | openejb,SingletonEjbHomeHandler,Singleton 1181 | openejb,SingletonEjbObjectHandler,Singleton 1182 | openejb,SingletonInstanceManager,Singleton 1183 | openejb,SingletonCalculatorClient,Singleton 1184 | openejb,BasicSingletonBean,Singleton 1185 | directory-server,AvlTreeSingleton,Singleton 1186 | clusterbench,LocalSingletonEjbServlet,Singleton 1187 | robo-remote,EmSingleton,Singleton 1188 | robo-remote,SoloSingleton,Singleton 1189 | console_1,AggregatedConsoleSingleton,Singleton 1190 | console_1,GinjectorSingleton,Singleton 1191 | console_1,CoreUISingleton,Singleton 1192 | pizzaapp,ConfigurationSingleton,Singleton 1193 | pizzaapp,ConfigurationSingleton,Singleton 1194 | chute-android-components,HeartsSingleton,Singleton 1195 | hbase,CompatibilitySingletonFactory,Singleton 1196 | Akka-JavaEE6-Integracia,SumSingleton,Singleton 1197 | abdera,Singleton,Singleton 1198 | platform_frameworks_base,Singleton,Singleton 1199 | api,Singleton,Singleton 1200 | com.idega.core,Singleton,Singleton 1201 | vogella,MyEnumSingleton,Singleton 1202 | ccw,ClojureVisitor,Visitor 1203 | cdt,ICElementVisitor,Visitor 1204 | cdt,IPathSettingsContainerVisitor,Visitor 1205 | cdt,ICPPASTVisitor,Visitor 1206 | cdt,ASTGenericVisitor,Visitor 1207 | cdt,IndexerASTVisitor,Visitor 1208 | cdt,CVisitor,Visitor 1209 | cdt,ASTCommenterVisitor,Visitor 1210 | cdt,ChangeGeneratorWriterVisitor,Visitor 1211 | cdt,CodeFormatterVisitor,Visitor 1212 | cdt,CPPASTAllVisitor,Visitor 1213 | cdt,CStructureCreatorVisitor,Visitor 1214 | cdt,ReferenceVisitor,Visitor 1215 | cdt,IModelVisitor,Visitor 1216 | cdk,Visitor,Visitor 1217 | cdk,SimpleVisitor,Visitor 1218 | cdk,TemplateVisitor,Visitor 1219 | cdk,ELVisitor,Visitor 1220 | cdk,RendererClassVisitor,Visitor 1221 | cdk,TagHandlerGeneratorVisitor,Visitor 1222 | cdk,TaglibGeneratorVisitor,Visitor 1223 | cdk,EmptyAnnotationValueVisitor,Visitor 1224 | cdo,CDOFeatureDeltaVisitor,Visitor 1225 | cdo,CDOFeatureDeltaVisitorImpl,Visitor 1226 | cdo,IOVisitor,Visitor 1227 | pellet,EntailmentQueryVisitor,Visitor 1228 | pellet,PelletVisitor,Visitor 1229 | pellet,ATermBaseVisitor,Visitor 1230 | pellet,ATermVisitor,Visitor 1231 | pellet,AtomObjectVisitor,Visitor 1232 | pellet,RuleAtomVisitor,Visitor 1233 | pellet,NumberToLiteralVisitor,Visitor 1234 | pellet,NumericVisitor,Visitor 1235 | pellet,FunctionApplicationVisitor,Visitor 1236 | pellet,NumericComparisonVisitor,Visitor 1237 | pellet,NumericComparisonVisitor,Visitor 1238 | pellet,NumericComparisonVisitor,Visitor 1239 | spring-migration-analyzer,EjbDetectingClassVisitor,Visitor 1240 | spring-migration-analyzer,ApiUsageDetectingAsmVisitor,Visitor 1241 | spring-migration-analyzer,DelegatingClassVisitor,Visitor 1242 | spring-migration-analyzer,DelegatingMethodVisitor,Visitor 1243 | spring-migration-analyzer,DelegatingAnnotationVisitor,Visitor 1244 | spring-migration-analyzer,DelegatingFieldVisitor,Visitor 1245 | spring-migration-analyzer,StubResultGatheringAnnotationVisitor,Visitor 1246 | spring-migration-analyzer,StubResultGatheringClassVisitor,Visitor 1247 | spring-migration-analyzer,StubResultGatheringClassVisitorFactory,Visitor 1248 | spring-migration-analyzer,StubResultGatheringFieldVisitor,Visitor 1249 | spring-migration-analyzer,StubResultGatheringMethodVisitor,Visitor 1250 | pellet,DefaultAtomObjectVisitor,Visitor 1251 | pellet,DefaultRuleAtomVisitor,Visitor 1252 | cxf,ModuleVisitor,Visitor 1253 | cxf,ExceptionVisitor,Visitor 1254 | cxf,OperationVisitor,Visitor 1255 | cxf,ConstrTypeSpecVisitor,Visitor 1256 | cxf,ParamDclVisitor,Visitor 1257 | cxf,TypesVisitor,Visitor 1258 | cxf,SimpleTypeSpecVisitor,Visitor 1259 | cxf,FixedVisitor,Visitor 1260 | cxf,PortTypeVisitor,Visitor 1261 | cxf,SequenceVisitor,Visitor 1262 | cxf,ArrayVisitor,Visitor 1263 | cxf,PrimitiveTypesVisitor,Visitor 1264 | cxf,TemplateTypeSpecVisitor,Visitor 1265 | cxf,ConstVisitor,Visitor 1266 | cxf,TypedefVisitor,Visitor 1267 | cxf,ScopedNameVisitor,Visitor 1268 | cxf,ParamTypeSpecVisitor,Visitor 1269 | cxf,StringVisitor,Visitor 1270 | cxf,DefinitionVisitor,Visitor 1271 | cxf,VisitorBase,Visitor 1272 | wayback,ReplayParseEventDelegatorVisitor,Visitor 1273 | wayback,ParseEventDelegatorVisitor,Visitor 1274 | wayback,ReplayParseEventDelegatorVisitor,Visitor 1275 | sample-projects,Visitor,Visitor 1276 | sample-projects,Visitor,Visitor 1277 | OpenSIG,Visitor,Visitor 1278 | graph-collections,SpatialIndexVisitor,Visitor 1279 | TwelveMonkeys,Visitor,Visitor 1280 | sslr,AstAndTokenVisitor,Visitor 1281 | sslr,ExecutionFlowVisitor,Visitor 1282 | sslr,EmptyAlternativeVisitor,Visitor 1283 | sslr,EmptyRepetitionVisitor,Visitor 1284 | sslr,EmptyVisitor,Visitor 1285 | sslr,FirstVisitor,Visitor 1286 | sslr,MatcherVisitor,Visitor 1287 | sslr,RuleMatchersVisitor,Visitor 1288 | sslr,SymbolTableBuilderVisitor,Visitor 1289 | Emma,InstrVisitor,Visitor 1290 | Emma,AbstractItemVisitor,Visitor 1291 | Emma,IItemVisitor,Visitor 1292 | Emma,AbstractClassDefVisitor,Visitor 1293 | Emma,IAttributeVisitor,Visitor 1294 | Emma,ICONSTANTVisitor,Visitor 1295 | Emma,IClassDefVisitor,Visitor 1296 | Emma,IOpcodeVisitor,Visitor 1297 | java-design-patterns,SoldierVisitor,Visitor 1298 | java-design-patterns,SergeantVisitor,Visitor 1299 | java-design-patterns,CommanderVisitor,Visitor 1300 | refactoring_guru,Visitor,Visitor 1301 | refactoring_guru,XMLExportVisitor,Visitor --------------------------------------------------------------------------------