blob: d231a07e0f1815be72e4dcab1dd6897e24693557 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package com.intellij.compilerOutputIndex.impl.bigram;
import com.intellij.compilerOutputIndex.impl.MethodIncompleteSignature;
import com.intellij.compilerOutputIndex.impl.MethodIncompleteSignatureChain;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
/**
* @author Dmitry Batkovich
*/
class SimpleBigramsExtractor {
private final Map<String, MethodIncompleteSignature> myHolder = new HashMap<String, MethodIncompleteSignature>();
private final BigramMethodIncompleteSignatureProcessor myProcessor;
public SimpleBigramsExtractor(final BigramMethodIncompleteSignatureProcessor processor) {
myProcessor = processor;
}
public void addChain(final MethodIncompleteSignatureChain chain) {
if (chain.isEmpty()) {
return;
}
final MethodIncompleteSignature firstInvocation = chain.getFirstInvocation();
assert firstInvocation != null;
final MethodIncompleteSignature head = firstInvocation.isStatic() ? null : myHolder.get(firstInvocation.getOwner());
for (final Bigram<MethodIncompleteSignature> bigram : toBigrams(head, chain)) {
myProcessor.process(bigram);
}
final MethodIncompleteSignature lastInvocation = chain.getLastInvocation();
assert lastInvocation != null;
myHolder.put(lastInvocation.getReturnType(), lastInvocation);
}
private static Collection<Bigram<MethodIncompleteSignature>> toBigrams(final @Nullable MethodIncompleteSignature head,
final @NotNull MethodIncompleteSignatureChain chain) {
MethodIncompleteSignature currentLast = null;
if (head != null) {
currentLast = head;
}
final List<Bigram<MethodIncompleteSignature>> bigrams = new ArrayList<Bigram<MethodIncompleteSignature>>(chain.size());
for (final MethodIncompleteSignature current : chain.list()) {
if (currentLast != null) {
bigrams.add(new Bigram<MethodIncompleteSignature>(currentLast, current));
}
currentLast = current;
}
return bigrams;
}
public interface BigramMethodIncompleteSignatureProcessor {
void process(Bigram<MethodIncompleteSignature> bigram);
}
}
|