remove obsolete dialog
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / incremental / ChunkBuildOutputConsumerImpl.java
1 /*
2  * Copyright 2000-2012 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.jetbrains.jps.incremental;
17
18 import gnu.trove.THashMap;
19 import org.jetbrains.annotations.NotNull;
20 import org.jetbrains.annotations.Nullable;
21 import org.jetbrains.jps.builders.BuildTarget;
22 import org.jetbrains.jps.builders.impl.BuildOutputConsumerImpl;
23
24 import java.io.File;
25 import java.io.IOException;
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.Collections;
29 import java.util.Map;
30
31 /**
32 * @author Eugene Zhuravlev
33 *         Date: 11/16/12
34 */
35 class ChunkBuildOutputConsumerImpl implements ModuleLevelBuilder.OutputConsumer {
36   private final CompileContext myContext;
37   private Map<BuildTarget<?>, BuildOutputConsumerImpl> myTarget2Consumer = new THashMap<BuildTarget<?>, BuildOutputConsumerImpl>();
38   private Map<String, CompiledClass> myClasses = new THashMap<String, CompiledClass>();
39   private Map<BuildTarget<?>, Collection<CompiledClass>> myTargetToClassesMap = new THashMap<BuildTarget<?>, Collection<CompiledClass>>();
40
41   public ChunkBuildOutputConsumerImpl(CompileContext context) {
42     myContext = context;
43   }
44
45   @Override
46   public Collection<CompiledClass> getTargetCompiledClasses(@NotNull BuildTarget<?> target) {
47     final Collection<CompiledClass> classes = myTargetToClassesMap.get(target);
48     if (classes != null) {
49       return Collections.unmodifiableCollection(classes);
50     }
51     return Collections.emptyList();
52   }
53
54   @NotNull
55   @Override
56   public Map<String, CompiledClass> getCompiledClasses() {
57     return Collections.unmodifiableMap(myClasses);
58   }
59
60   @Override
61   @Nullable
62   public BinaryContent lookupClassBytes(String className) {
63     final CompiledClass object = myClasses.get(className);
64     return object != null ? object.getContent() : null;
65   }
66
67   @Override
68   public void registerCompiledClass(@Nullable BuildTarget<?> target, CompiledClass compiled) throws IOException {
69     if (compiled.getClassName() != null) {
70       myClasses.put(compiled.getClassName(), compiled);
71       if (target != null) {
72         Collection<CompiledClass> classes = myTargetToClassesMap.get(target);
73         if (classes == null) {
74           classes = new ArrayList<CompiledClass>();
75           myTargetToClassesMap.put(target, classes);
76         }
77         classes.add(compiled);
78       }
79     }
80     if (target != null) {
81       registerOutputFile(target, compiled.getOutputFile(), Collections.<String>singleton(compiled.getSourceFile().getPath()));
82     }
83   }
84
85   @Override
86   public void registerOutputFile(@NotNull BuildTarget<?> target, File outputFile, Collection<String> sourcePaths) throws IOException {
87     BuildOutputConsumerImpl consumer = myTarget2Consumer.get(target);
88     if (consumer == null) {
89       consumer = new BuildOutputConsumerImpl(target, myContext);
90       myTarget2Consumer.put(target, consumer);
91     }
92     consumer.registerOutputFile(outputFile, sourcePaths);
93   }
94
95   public void fireFileGeneratedEvents() {
96     for (BuildOutputConsumerImpl consumer : myTarget2Consumer.values()) {
97       consumer.fireFileGeneratedEvent();
98     }
99   }
100
101   public int getNumberOfProcessedSources() {
102     int total = 0;
103     for (BuildOutputConsumerImpl consumer : myTarget2Consumer.values()) {
104       total += consumer.getNumberOfProcessedSources();
105     }
106     return total;
107   }
108
109   public void clear() {
110     myTarget2Consumer.clear();
111     myClasses.clear();
112     myTargetToClassesMap.clear();
113   }
114 }