cleanup: remove useless '@author nik' from javadoc comments
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / builders / artifacts / ArtifactBuildTaskProvider.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.builders.artifacts;
17
18 import org.jetbrains.annotations.NotNull;
19 import org.jetbrains.jps.incremental.BuildTask;
20 import org.jetbrains.jps.model.artifact.JpsArtifact;
21
22 import java.util.List;
23
24 /**
25  * Allows to perform additional tasks when artifacts are built. Implementations of this class are registered as Java services, by creating
26  * a file META-INF/services/org.jetbrains.jps.builders.artifacts.ArtifactBuildTaskProvider containing the qualified name of your
27  * implementation class.
28  */
29 public abstract class ArtifactBuildTaskProvider {
30   public enum ArtifactBuildPhase {
31     PRE_PROCESSING("pre-processing"), FINISHING_BUILD("finishing"), POST_PROCESSING("post-processing");
32     private final String myPresentableName;
33
34     ArtifactBuildPhase(String presentableName) {
35       myPresentableName = presentableName;
36     }
37
38     public String getPresentableName() {
39       return myPresentableName;
40     }
41   }
42
43   /**
44    * Returns list of tasks which need to be executed during {@code buildPhase} when {@code artifact} is building. Firstly tasks returned for
45    * {@link ArtifactBuildPhase#PRE_PROCESSING PRE_PROCESSING} are executed, then files specified in the artifact layout are copied to the output directory.
46    * If all files in the artifact output were up to date, i.e. no copying was performed, the build finishes. Otherwise all tasks returned for
47    * {@link ArtifactBuildPhase#FINISHING_BUILD FINISHING_BUILD} are executed and then all tasks returned for
48    * {@link ArtifactBuildPhase#POST_PROCESSING POST_PROCESSING} are executed.
49    */
50   @NotNull
51   public abstract List<? extends BuildTask> createArtifactBuildTasks(@NotNull JpsArtifact artifact, @NotNull ArtifactBuildPhase buildPhase);
52 }