├── 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
--------------------------------------------------------------------------------