blob: 5de5c5f8905801e26f28135dd0060d06de50db8b [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* User: anna
* Date: 19-Dec-2006
*/
package com.intellij.compiler.ant;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NonNls;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public abstract class BuildProperties extends CompositeGenerator {
public static final @NonNls String TARGET_ALL = "all";
public static final @NonNls String TARGET_BUILD_MODULES = "build.modules";
public static final @NonNls String TARGET_CLEAN = "clean";
public static final @NonNls String TARGET_INIT = "init";
public static final @NonNls String TARGET_REGISTER_CUSTOM_COMPILERS = "register.custom.compilers";
public static final @NonNls String DEFAULT_TARGET = TARGET_ALL;
public static final @NonNls String PROPERTY_COMPILER_NAME = "compiler.name";
public static final @NonNls String PROPERTY_COMPILER_ADDITIONAL_ARGS = "compiler.args";
public static final @NonNls String PROPERTY_COMPILER_MAX_MEMORY = "compiler.max.memory";
public static final @NonNls String PROPERTY_COMPILER_EXCLUDES = "compiler.excluded";
public static final @NonNls String PROPERTY_COMPILER_RESOURCE_PATTERNS = "compiler.resources";
public static final @NonNls String PROPERTY_IGNORED_FILES = "ignored.files";
public static final @NonNls String PROPERTY_COMPILER_GENERATE_DEBUG_INFO = "compiler.debug";
public static final @NonNls String PROPERTY_COMPILER_GENERATE_NO_WARNINGS = "compiler.generate.no.warnings";
public static final @NonNls String PROPERTY_PROJECT_JDK_HOME = "project.jdk.home";
public static final @NonNls String PROPERTY_PROJECT_JDK_BIN = "project.jdk.bin";
public static final @NonNls String PROPERTY_PROJECT_JDK_CLASSPATH = "project.jdk.classpath";
public static final @NonNls String PROPERTY_SKIP_TESTS = "skip.tests";
public static final @NonNls String PROPERTY_LIBRARIES_PATTERNS = "library.patterns";
public static final @NonNls String PROPERTY_IDEA_HOME = "idea.home";
public static final @NonNls String PROPERTY_JAVAC2_HOME = "javac2.home";
public static final @NonNls String PROPERTY_JAVAC2_CLASSPATH_ID = "javac2.classpath";
public static final @NonNls String PROPERTY_INCLUDE_JAVA_RUNTIME_FOR_INSTRUMENTATION = "javac2.instrumentation.includeJavaRuntime";
protected abstract void createJdkGenerators(Project project);
public static Sdk[] getUsedJdks(Project project) {
final Set<Sdk> jdks = new HashSet<Sdk>();
Module[] modules = ModuleManager.getInstance(project).getModules();
for (Module module : modules) {
Sdk jdk = ModuleRootManager.getInstance(module).getSdk();
if (jdk != null) {
jdks.add(jdk);
}
}
return jdks.toArray(new Sdk[jdks.size()]);
}
@NonNls
public static String getJdkPathId(@NonNls final String jdkName) {
return "jdk.classpath." + convertName(jdkName);
}
@NonNls
public static String getModuleChunkJdkClasspathProperty(@NonNls final String moduleChunkName) {
return "module.jdk.classpath." + convertName(moduleChunkName);
}
@NonNls
public static String getModuleChunkJdkHomeProperty(@NonNls final String moduleChunkName) {
return "module.jdk.home." + convertName(moduleChunkName);
}
@NonNls
public static String getModuleChunkJdkBinProperty(@NonNls final String moduleChunkName) {
return "module.jdk.bin." + convertName(moduleChunkName);
}
@NonNls
public static String getModuleChunkCompilerArgsProperty(@NonNls final String moduleName) {
return "compiler.args." + convertName(moduleName);
}
@NonNls
public static String getLibraryPathId(@NonNls final String libraryName) {
return "library." + convertName(libraryName) + ".classpath";
}
@NonNls
public static String getJdkHomeProperty(@NonNls final String jdkName) {
return "jdk.home." + convertName(jdkName);
}
@NonNls
public static String getJdkBinProperty(@NonNls final String jdkName) {
return "jdk.bin." + convertName(jdkName);
}
@NonNls
public static String getCompileTargetName(@NonNls String moduleName) {
return "compile.module." + convertName(moduleName);
}
@NonNls
public static String getOutputPathProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".output.dir";
}
@NonNls
public static String getOutputPathForTestsProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".testoutput.dir";
}
@NonNls
public static String getClasspathProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".module.production.classpath";
}
@NonNls
public static String getTestClasspathProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".module.classpath";
}
@NonNls
public static String getRuntimeClasspathProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".runtime.production.module.classpath";
}
@NonNls
public static String getTestRuntimeClasspathProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".runtime.module.classpath";
}
@NonNls
public static String getBootClasspathProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".module.bootclasspath";
}
@NonNls
public static String getSourcepathProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".module.sourcepath";
}
@NonNls
public static String getTestSourcepathProperty(@NonNls String moduleName) {
return convertName(moduleName) + ".module.test.sourcepath";
}
@NonNls
public static String getExcludedFromModuleProperty(@NonNls String moduleName) {
return "excluded.from.module." + convertName(moduleName);
}
@NonNls
public static String getExcludedFromCompilationProperty(@NonNls String moduleName) {
return "excluded.from.compilation." + convertName(moduleName);
}
@NonNls
public static String getProjectBuildFileName(Project project) {
return convertName(project.getName());
}
@NonNls
public static String getModuleChunkBuildFileName(final ModuleChunk chunk) {
return "module_" + convertName(chunk.getName());
}
@NonNls
public static String getModuleCleanTargetName(@NonNls String moduleName) {
return "clean.module." + convertName(moduleName);
}
@NonNls
public static String getModuleChunkBasedirProperty(ModuleChunk chunk) {
return "module." + convertName(chunk.getName()) + ".basedir";
}
/**
* left for compatibility
*
* @param module the module to get property for
* @return name of the property
*/
@NonNls
public static String getModuleBasedirProperty(Module module) {
return "module." + convertName(module.getName()) + ".basedir";
}
@NonNls
public static String getProjectBaseDirProperty() {
return "basedir";
}
public static File getModuleChunkBaseDir(ModuleChunk chunk) {
return chunk.getBaseDir();
}
public static File getProjectBaseDir(final Project project) {
final VirtualFile baseDir = project.getBaseDir();
assert baseDir != null;
return VfsUtil.virtualToIoFile(baseDir);
}
/**
* Convert name. All double quotes are removed and spaces are replaced with underscore.
*
* @param name a name to convert
* @return a converted name
*/
@NonNls
public static String convertName(@NonNls final String name) {
//noinspection HardCodedStringLiteral
return name.replaceAll("\"", "").replaceAll("\\s+", "_").toLowerCase();
}
@NonNls
public static String getPathMacroProperty(@NonNls String pathMacro) {
return "path.variable." + convertName(pathMacro);
}
@NonNls
public static String propertyRef(@NonNls String propertyName) {
return "${" + propertyName + "}";
}
/**
* Construct path relative to the specified property
*
* @param propertyName the property name
* @param relativePath the relative path
* @return the path relative to the property
*/
@NonNls
public static String propertyRelativePath(@NonNls String propertyName, @NonNls String relativePath) {
return "${" + propertyName + "}/" + relativePath;
}
public static File toCanonicalFile(final File file) {
File canonicalFile;
try {
canonicalFile = file.getCanonicalFile();
}
catch (IOException e) {
canonicalFile = file;
}
return canonicalFile;
}
@NonNls
public static String getTempDirForModuleProperty(@NonNls String moduleName) {
return "tmp.dir." + convertName(moduleName);
}
}