001    /*
002     * Copyright 2010-2013 JetBrains s.r.o.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    package org.jetbrains.jet.cli.common.modules;
018    
019    import com.intellij.util.SmartList;
020    import org.jetbrains.annotations.NotNull;
021    
022    import java.util.List;
023    
024    /**
025     * This interface duplicates {@link jet.modules.Module}, because cli-common should not depend on kotlin-runtime.jar
026     */
027    public interface ModuleDescription {
028    
029        @NotNull
030        String getModuleName();
031    
032        @NotNull
033        String getOutputDir();
034    
035        @NotNull
036        List<String> getSourceFiles();
037    
038        @NotNull
039        List<String> getClasspathRoots();
040    
041        @NotNull
042        List<String> getAnnotationsRoots();
043    
044        class Impl implements ModuleDescription {
045    
046            private String name;
047            private String outputDir;
048            private final List<String> sources = new SmartList<String>();
049            private final List<String> classpath = new SmartList<String>();
050            private final List<String> annotations = new SmartList<String>();
051    
052            public void setName(String name) {
053                this.name = name;
054            }
055    
056            public void setOutputDir(String outputDir) {
057                this.outputDir = outputDir;
058            }
059    
060            public void addSourcePath(String path) {
061                sources.add(path);
062            }
063    
064            public void addClassPath(String path) {
065                classpath.add(path);
066            }
067    
068            public void addAnnotationPath(String path) {
069                annotations.add(path);
070            }
071    
072            @NotNull
073            @Override
074            public String getModuleName() {
075                return name;
076            }
077    
078            @NotNull
079            @Override
080            public String getOutputDir() {
081                return outputDir;
082            }
083    
084            @NotNull
085            @Override
086            public List<String> getSourceFiles() {
087                return sources;
088            }
089    
090            @NotNull
091            @Override
092            public List<String> getClasspathRoots() {
093                return classpath;
094            }
095    
096            @NotNull
097            @Override
098            public List<String> getAnnotationsRoots() {
099                return annotations;
100            }
101    
102            @Override
103            public String toString() {
104                return name +
105                       "\n\toutputDir=" + outputDir +
106                       "\n\tsources=" + sources +
107                       "\n\tclasspath=" + classpath +
108                       "\n\tannotations=" + annotations;
109            }
110        }
111    }