jps: CompiledClass accepts multiple source files
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / incremental / CompiledClass.java
index 94339cd78cbd77b17b73118361e098220a6d5afa..edd7ae3fb90f35755af236bfdd7640e38f467ecf 100644 (file)
  */
 package org.jetbrains.jps.incremental;
 
+import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.util.UserDataHolderBase;
 import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
 
 /**
  * @author Eugene Zhuravlev
  *         Date: 11/18/12
  */
 public class CompiledClass extends UserDataHolderBase{
+  private final static Logger LOG = Logger.getInstance(CompiledClass.class);
+
   @NotNull
   private final File myOutputFile;
   @NotNull
-  private final File mySourceFile;
+  private final Collection<File> mySourceFiles;
   @Nullable
   private final String myClassName;
   @NotNull
@@ -39,11 +46,16 @@ public class CompiledClass extends UserDataHolderBase{
 
   private boolean myIsDirty = false;
 
-  public CompiledClass(@NotNull File outputFile, @NotNull File sourceFile, @Nullable String className, @NotNull BinaryContent content) {
+  public CompiledClass(@NotNull File outputFile, @NotNull Collection<File> sourceFiles, @Nullable String className, @NotNull BinaryContent content) {
     myOutputFile = outputFile;
-    mySourceFile = sourceFile;
+    mySourceFiles = sourceFiles;
     myClassName = className;
     myContent = content;
+    LOG.assertTrue(!mySourceFiles.isEmpty());
+  }
+
+  public CompiledClass(@NotNull File outputFile, @NotNull File sourceFile, @Nullable String className, @NotNull BinaryContent content) {
+    this(outputFile, Collections.singleton(sourceFile), className, content);
   }
 
   public  void save() throws IOException {
@@ -56,9 +68,29 @@ public class CompiledClass extends UserDataHolderBase{
     return myOutputFile;
   }
 
+  @NotNull
+  public Collection<File> getSourceFiles() {
+    return mySourceFiles;
+  }
+
+  @NotNull
+  public Collection<String> getSourceFilesPaths() {
+    return ContainerUtil.map(mySourceFiles, new Function<File, String>() {
+      @Override
+      public String fun(File file) {
+        return file.getPath();
+      }
+    });
+  }
+
+  /**
+   * @deprecated use {@link CompiledClass#getSourceFiles()} or {{@link CompiledClass#getSourceFilesPaths()}
+   */
+  @Deprecated
   @NotNull
   public File getSourceFile() {
-    return mySourceFile;
+    //noinspection ConstantConditions
+    return ContainerUtil.getFirstItem(getSourceFiles());
   }
 
   @Nullable
@@ -101,7 +133,7 @@ public class CompiledClass extends UserDataHolderBase{
   public String toString() {
     return "CompiledClass{" +
            "myOutputFile=" + myOutputFile +
-           ", mySourceFile=" + mySourceFile +
+           ", mySourceFiles=" + mySourceFiles +
            ", myIsDirty=" + myIsDirty +
            '}';
   }