001 // Copyright 2005-2006 Ferdinand Prantl <prantl@users.sourceforge.net> 002 // Copyright 2001-2004 The Apache Software Foundation 003 // All rights reserved. 004 // 005 // Licensed under the Apache License, Version 2.0 (the "License"); 006 // you may not use this file except in compliance with the License. 007 // You may obtain a copy of the License at 008 // 009 // http://www.apache.org/licenses/LICENSE-2.0 010 // 011 // Unless required by applicable law or agreed to in writing, software 012 // distributed under the License is distributed on an "AS IS" BASIS, 013 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 // See the License for the specific language governing permissions and 015 // limitations under the License. 016 // 017 // See http://ant-eclipse.sourceforge.net for the most recent version 018 // and more information. 019 020 package prantl.ant.eclipse; 021 022 import java.util.HashSet; 023 import java.util.Hashtable; 024 025 import org.apache.tools.ant.BuildException; 026 027 /** 028 * Configures the component preferences file <tt>.settings/org.eclipse.jdt.core.prefs</tt> 029 * on the high level using attributes for the typical constellations of variable values. 030 * 031 * @since Ant-Eclipse 1.0 032 * @author Ferdinand Prantl <prantl@users.sourceforge.net> 033 */ 034 public class OrgEclipseJdtCorePreferencesElement extends PreferencesElement { 035 036 private static final String ELEMENT = "jdtcore"; 037 038 private static final String COMPILERCOMPLIANCE_ATTRIBUTE = "compilercompliance"; 039 040 private static final String COMPILERCOMPLIANCE_NAME = "org.eclipse.jdt.core.compiler.compliance"; 041 042 private static final HashSet COMPILERCOMPLIANCE_VALUES = new HashSet(); 043 044 private static final String[] ORGECLIPSEJDTCORE_NAMES = { 045 "org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode", 046 "org.eclipse.jdt.core.compiler.codegen.targetPlatform", 047 "org.eclipse.jdt.core.compiler.codegen.unusedLocal", 048 "org.eclipse.jdt.core.compiler.compliance", 049 "org.eclipse.jdt.core.compiler.debug.lineNumber", 050 "org.eclipse.jdt.core.compiler.debug.localVariable", 051 "org.eclipse.jdt.core.compiler.debug.sourceFile", 052 "org.eclipse.jdt.core.compiler.problem.assertIdentifier", 053 "org.eclipse.jdt.core.compiler.problem.enumIdentifier", 054 "org.eclipse.jdt.core.compiler.source" }; 055 056 private static final Hashtable ORGECLIPSEJDTCORE_DEFAULTS = new Hashtable(); 057 058 /** 059 * Returns the name of the package these preferences belong to. 060 * 061 * @return The name of the package these preferences belong to. 062 */ 063 static final String getPackageName() { 064 return "org.eclipse.jdt.core"; 065 } 066 067 /** 068 * Creates a new instance of the element for the file with preferences for 069 * org.eclipse.jdt.core. 070 * 071 * @param parent 072 * The parent settings element of this preferences one. 073 * @since Ant-Eclipse 1.0 074 */ 075 public OrgEclipseJdtCorePreferencesElement(SettingsElement parent) { 076 super(parent); 077 internalSetName(getPackageName()); 078 COMPILERCOMPLIANCE_VALUES.add("1.3"); 079 COMPILERCOMPLIANCE_VALUES.add("1.4"); 080 COMPILERCOMPLIANCE_VALUES.add("5.0"); 081 COMPILERCOMPLIANCE_VALUES.add("6.0"); 082 ORGECLIPSEJDTCORE_DEFAULTS.put("1.3", new String[] { "enabled", // org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode 083 "1.1", // org.eclipse.jdt.core.compiler.codegen.targetPlatform 084 "preserve", // org.eclipse.jdt.core.compiler.codegen.unusedLocal 085 "1.3", // org.eclipse.jdt.core.compiler.compliance 086 "generate", // org.eclipse.jdt.core.compiler.debug.lineNumber 087 "generate", // org.eclipse.jdt.core.compiler.debug.localVariable 088 "generate", // org.eclipse.jdt.core.compiler.debug.sourceFile 089 "ignore", // org.eclipse.jdt.core.compiler.problem.assertIdentifier 090 "ignore", // org.eclipse.jdt.core.compiler.problem.enumIdentifier 091 "1.3" // org.eclipse.jdt.core.compiler.source 092 }); 093 ORGECLIPSEJDTCORE_DEFAULTS.put("1.4", new String[] { "enabled", // org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode 094 "1.2", // org.eclipse.jdt.core.compiler.codegen.targetPlatform 095 "preserve", // org.eclipse.jdt.core.compiler.codegen.unusedLocal 096 "1.4", // org.eclipse.jdt.core.compiler.compliance 097 "generate", // org.eclipse.jdt.core.compiler.debug.lineNumber 098 "generate", // org.eclipse.jdt.core.compiler.debug.localVariable 099 "generate", // org.eclipse.jdt.core.compiler.debug.sourceFile 100 "warning", // org.eclipse.jdt.core.compiler.problem.assertIdentifier 101 "warning", // org.eclipse.jdt.core.compiler.problem.enumIdentifier 102 "1.3" // org.eclipse.jdt.core.compiler.source 103 }); 104 ORGECLIPSEJDTCORE_DEFAULTS.put("5.0", new String[] { "enabled", // org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode 105 "1.5", // org.eclipse.jdt.core.compiler.codegen.targetPlatform 106 "preserve", // org.eclipse.jdt.core.compiler.codegen.unusedLocal 107 "1.5", // org.eclipse.jdt.core.compiler.compliance 108 "generate", // org.eclipse.jdt.core.compiler.debug.lineNumber 109 "generate", // org.eclipse.jdt.core.compiler.debug.localVariable 110 "generate", // org.eclipse.jdt.core.compiler.debug.sourceFile 111 "error", // org.eclipse.jdt.core.compiler.problem.assertIdentifier 112 "error", // org.eclipse.jdt.core.compiler.problem.enumIdentifier 113 "1.5" // org.eclipse.jdt.core.compiler.source 114 }); 115 ORGECLIPSEJDTCORE_DEFAULTS.put("6.0", new String[] { "enabled", // org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode 116 "1.6", // org.eclipse.jdt.core.compiler.codegen.targetPlatform 117 "preserve", // org.eclipse.jdt.core.compiler.codegen.unusedLocal 118 "1.6", // org.eclipse.jdt.core.compiler.compliance 119 "generate", // org.eclipse.jdt.core.compiler.debug.lineNumber 120 "generate", // org.eclipse.jdt.core.compiler.debug.localVariable 121 "generate", // org.eclipse.jdt.core.compiler.debug.sourceFile 122 "error", // org.eclipse.jdt.core.compiler.problem.assertIdentifier 123 "error", // org.eclipse.jdt.core.compiler.problem.enumIdentifier 124 "1.6" // org.eclipse.jdt.core.compiler.source 125 }); 126 } 127 128 /** 129 * Returns the line separator (default is inherited from the workspace settings and 130 * not set here in the file). 131 * 132 * @return The line separator (default is inherited from the workspace settings and 133 * not set here in the file). 134 */ 135 public String getCompilerCompliance() { 136 VariableElement variable = getVariable(COMPILERCOMPLIANCE_NAME); 137 return variable == null ? null : variable.getValue(); 138 } 139 140 /** 141 * Sets the version of the Eclipse preferences. The default value should be left and 142 * not set explicitely. 143 * 144 * @param value 145 * A valid line separator. 146 * @since Ant-Eclipse 1.0 147 */ 148 public void setCompilerCompliance(String value) { 149 if (!COMPILERCOMPLIANCE_VALUES.contains(value)) 150 throw new BuildException("The attribute \"" + COMPILERCOMPLIANCE_ATTRIBUTE 151 + "\" (variable \"" + COMPILERCOMPLIANCE_NAME 152 + "\") has an invalid value \"" + value + "\". Valid values are " 153 + getValidCompilerComplianceValues() + "."); 154 internalCreateVariable(COMPILERCOMPLIANCE_NAME, value); 155 } 156 157 /** 158 * Returns allowed values for the variable org.eclipse.jdt.core.compiler.compliance. 159 * 160 * @return A new string with allowed values for the variable 161 * org.eclipse.jdt.core.compiler.compliance. 162 * @since Ant-Eclipse 1.0 163 */ 164 String getValidCompilerComplianceValues() { 165 return getValidValues(COMPILERCOMPLIANCE_VALUES); 166 } 167 168 /** 169 * Performs the validation of the element at the time when the whole build file was 170 * parsed checking the content of the element and possibly adding mandatory variables 171 * with default settings. 172 * 173 * @since Ant-Eclipse 1.0 174 */ 175 public void validate() { 176 VariableElement variable = getVariable(COMPILERCOMPLIANCE_NAME); 177 if (variable == null) 178 throw new BuildException("The attribute \"" + COMPILERCOMPLIANCE_ATTRIBUTE 179 + "\" (variable \"" + COMPILERCOMPLIANCE_NAME 180 + "\") was missing in the element \"" + ELEMENT + "\"."); 181 String[] defaults = (String[]) ORGECLIPSEJDTCORE_DEFAULTS 182 .get(variable.getValue()); 183 for (int i = 0; i < ORGECLIPSEJDTCORE_NAMES.length; ++i) 184 internalAddVariable(ORGECLIPSEJDTCORE_NAMES[i], defaults[i]); 185 186 super.validate(); 187 } 188 189 }