From 69ee62bf7f53335fe6dfa56aa824b0ea3488d413 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Sat, 19 Feb 2005 00:37:07 +0300 Subject: [PATCH] 1. idea.properties enchanced. Allows to use ${idea.home} and any other defined properties. Path to idea.properties is configurable via $IDEA_PROPERTIES environment and -Didea.properties.file property. 2. Configurable editor gutter color. --- bin/idea.bat | 4 +- bin/idea.sh | 6 +- bin/inspect.bat | 4 +- bin/inspect.sh | 6 +- .../openapi/application/PathManager.java | 107 ++++++------------ .../openapi/editor/colors/EditorColors.java | 1 + .../intellij/ide/plugins/PluginManager.java | 3 + .../impl/EditorGutterComponentImpl.java | 24 ++-- .../openapi/editor/impl/EditorImpl.java | 2 + .../colors/pages/GeneralColorsPage.java | 4 +- 10 files changed, 78 insertions(+), 83 deletions(-) diff --git a/bin/idea.bat b/bin/idea.bat index bb9fadb929f5..be29a7b9230f 100644 --- a/bin/idea.bat +++ b/bin/idea.bat @@ -28,10 +28,12 @@ SET MAIN_CLASS_NAME=com.intellij.idea.Main :: --------------------------------------------------------------------- SET IDEA_POPUP_WEIGHT=heavy +IF NOT "%IDEA_PROPERTIES%" == "" set IDEA_PROPERTIES_PROPERTY=-Didea.properties.file=%IDEA_PROPERTIES% + :: --------------------------------------------------------------------- :: You may specify your own JVM arguments in IDEA_JVM_ARGS variable. :: --------------------------------------------------------------------- -IF "%IDEA_JVM_ARGS%" == "" set IDEA_JVM_ARGS=-Xms32m -Xmx192m -Xbootclasspath/p:%IDEA_HOME%/lib/boot.jar -Dsun.java2d.noddraw=true -Didea.popup.weight=%IDEA_POPUP_WEIGHT% -Djavasvn.delta.disabled=true +IF "%IDEA_JVM_ARGS%" == "" set IDEA_JVM_ARGS=-Xms32m -Xmx192m -Xbootclasspath/p:%IDEA_HOME%/lib/boot.jar %IDEA_PROPERTIES_PROPERTY% -Dsun.java2d.noddraw=true -Didea.popup.weight=%IDEA_POPUP_WEIGHT% -Djavasvn.delta.disabled=true SET JVM_ARGS= %IDEA_JVM_ARGS% -ea -Xrunyjpagent:port=10100 diff --git a/bin/idea.sh b/bin/idea.sh index 6fd6074e828e..670dfec2202f 100644 --- a/bin/idea.sh +++ b/bin/idea.sh @@ -15,6 +15,10 @@ IDEA_BIN_HOME=`dirname "$0"` export JAVA_HOME export IDEA_HOME +if [ -n $IDEA_PROPERTIES ]; then + IDEA_PROPERTIES_PROPERTY=-Didea.properties.file=$IDEA_PROPERTIES +fi + # --------------------------------------------------------------------- # There are two possible values of IDEA_POPUP_WEIGHT property: "heavy" and "medium". # If you have WM configured as "Focus follows mouse with Auto Raise" then you have to @@ -25,7 +29,7 @@ IDEA_POPUP_WEIGHT=heavy export IDEA_POPUP_WEIGHT MAIN_CLASS_NAME="com.intellij.idea.Main" -JVM_ARGS="-ea -Xms32m -Xmx200m -Xbootclasspath/p:../lib/boot.jar -Dsun.java2d.noddraw=true -Didea.popup.weight=$IDEA_POPUP_WEIGHT -Djavasvn.delta.disabled=true" +JVM_ARGS="-ea -Xms32m -Xmx200m -Xbootclasspath/p:../lib/boot.jar $IDEA_PROPERTIES_PROPERTY -Dsun.java2d.noddraw=true -Didea.popup.weight=$IDEA_POPUP_WEIGHT -Djavasvn.delta.disabled=true" while [ $# -gt 0 ]; do args="$args $1" diff --git a/bin/inspect.bat b/bin/inspect.bat index 6dd941b00075..91cd70a8ca6f 100644 --- a/bin/inspect.bat +++ b/bin/inspect.bat @@ -27,10 +27,12 @@ SET MAIN_CLASS_NAME=com.intellij.codeInspection.InspectionMain :: --------------------------------------------------------------------- SET IDEA_POPUP_WEIGHT=heavy +IF NOT "%IDEA_PROPERTIES%" == "" set IDEA_PROPERTIES_PROPERTY=-Didea.properties.file=%IDEA_PROPERTIES% + :: --------------------------------------------------------------------- :: You may specify your own JVM arguments in IDEA_JVM_ARGS variable. :: --------------------------------------------------------------------- -IF "%IDEA_JVM_ARGS%" == "" set IDEA_JVM_ARGS=-Xms16m -Xmx152m -Xbootclasspath/p:%IDEA_HOME%/lib/boot.jar -Dsun.java2d.noddraw=true -Didea.popup.weight=%IDEA_POPUP_WEIGHT% +IF "%IDEA_JVM_ARGS%" == "" set IDEA_JVM_ARGS=-Xms16m -Xmx152m -Xbootclasspath/p:%IDEA_HOME%/lib/boot.jar %IDEA_PROPERTIES_PROPERTY% -Dsun.java2d.noddraw=true -Didea.popup.weight=%IDEA_POPUP_WEIGHT% SET JVM_ARGS= %IDEA_JVM_ARGS% diff --git a/bin/inspect.sh b/bin/inspect.sh index f3f79e5dd0bb..91d173e15d8f 100644 --- a/bin/inspect.sh +++ b/bin/inspect.sh @@ -15,6 +15,10 @@ IDEA_BIN_HOME=`dirname "$0"` export JAVA_HOME export IDEA_HOME +if [ -n $IDEA_PROPERTIES ]; then + IDEA_PROPERTIES_PROPERTY=-Didea.properties.file=$IDEA_PROPERTIES +fi + # --------------------------------------------------------------------- # There are two possible values of IDEA_POPUP_WEIGHT property: "heavy" and "medium". # If you have WM configured as "Focus follows mouse with Auto Raise" then you have to @@ -25,7 +29,7 @@ IDEA_POPUP_WEIGHT=heavy export IDEA_POPUP_WEIGHT MAIN_CLASS_NAME="com.intellij.codeInspection.InspectionMain" -JVM_ARGS="-Xms16m -Xmx152m -Xbootclasspath/p:../lib/boot.jar -Dsun.java2d.noddraw=true -Didea.popup.weight=$IDEA_POPUP_WEIGHT" +JVM_ARGS="-Xms16m -Xmx152m -Xbootclasspath/p:../lib/boot.jar $IDEA_PROPERTIES_PROPERTY -Dsun.java2d.noddraw=true -Didea.popup.weight=$IDEA_POPUP_WEIGHT" while [ $# -gt 0 ]; do args="$args $1" diff --git a/openapi/src/com/intellij/openapi/application/PathManager.java b/openapi/src/com/intellij/openapi/application/PathManager.java index 41ac44523fa4..b3afb7578b70 100644 --- a/openapi/src/com/intellij/openapi/application/PathManager.java +++ b/openapi/src/com/intellij/openapi/application/PathManager.java @@ -11,12 +11,10 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; -import java.util.ResourceBundle; -import java.util.PropertyResourceBundle; -import java.util.StringTokenizer; -import java.util.MissingResourceException; +import java.util.*; public class PathManager { + private static final String PROPERTIES_FILE = "idea.properties.file"; private static final String PROPERTY_SYSTEM_PATH = "idea.system.path"; private static final String PROPERTY_CONFIG_PATH = "idea.config.path"; private static final String PROPERTY_PLUGINS_PATH = "idea.plugins.path"; @@ -84,10 +82,7 @@ public class PathManager { ourSystemPath = getAbsolutePath(trimPathQuotes(System.getProperty(PROPERTY_SYSTEM_PATH))); } else { - if (PropertyLoader.getProperty(PROPERTY_SYSTEM_PATH) != null) - ourSystemPath = getAbsolutePath(trimPathQuotes(PropertyLoader.getProperty(PROPERTY_SYSTEM_PATH))); - else - ourSystemPath = getHomePath() + File.separator + "system"; + ourSystemPath = getHomePath() + File.separator + "system"; } try { @@ -125,9 +120,6 @@ public class PathManager { ourConfigPath = getAbsolutePath(trimPathQuotes(System.getProperty(PROPERTY_CONFIG_PATH))); } else { - if (PropertyLoader.getProperty(PROPERTY_CONFIG_PATH) != null) - ourConfigPath = getAbsolutePath(trimPathQuotes(PropertyLoader.getProperty(PROPERTY_CONFIG_PATH))); - else ourConfigPath = getHomePath() + File.separator + "config"; } return ourConfigPath; @@ -170,9 +162,6 @@ public class PathManager { if (System.getProperty(PROPERTY_PLUGINS_PATH) != null) { ourPluginsPath = getAbsolutePath(trimPathQuotes(System.getProperty(PROPERTY_PLUGINS_PATH))); } else { - if (PropertyLoader.getProperty(PROPERTY_PLUGINS_PATH) != null) - ourPluginsPath = getAbsolutePath(trimPathQuotes(PropertyLoader.getProperty(PROPERTY_PLUGINS_PATH))); - else ourPluginsPath = getConfigPath() + File.separatorChar + "plugins"; } } @@ -253,70 +242,48 @@ public class PathManager { return new File(getOptionsPath(),DEFAULT_OPTIONS_FILE_NAME+".xml"); } - private static class PropertyLoader { - private static final String IDEA_PROPERTIES = "idea.properties"; - private static ResourceBundle ourBundle; - - private static final String LOAD_THIS_PROPERTIES = "load.this.properties"; - - private PropertyLoader() { + public static void loadProperties() { + String propFilePath = System.getProperty(PROPERTIES_FILE); + if (propFilePath == null || !new File(propFilePath).exists()) { + propFilePath = getBinPath() + File.separator + "idea.properties"; } - - static { - String loadThis = getProperty(LOAD_THIS_PROPERTIES); - if (loadThis != null) { - for (StringTokenizer stringTokenizer = new StringTokenizer(loadThis, ";"); stringTokenizer.hasMoreTokens();) { - String property = stringTokenizer.nextToken(); - StringTokenizer tokenizer = new StringTokenizer(property, "="); - - String propertyName = null; - String propertyValue = null; - - if (tokenizer.hasMoreTokens()) { - propertyName = tokenizer.nextToken(); - if (tokenizer.hasMoreTokens()) { - propertyValue = tokenizer.nextToken(); - } - } - - if (propertyName != null && propertyValue != null) { - System.setProperty(propertyName, propertyValue); - } - } - } - } - - public static String getProperty (String key) { - if (ourBundle == null) { - init(); - } - + File propFile = new File(propFilePath); + if (propFile.exists()) { try { - if (ourBundle == null) - return null; - else - return ourBundle.getString(key); + final FileInputStream fis = new FileInputStream(propFile); + final PropertyResourceBundle bundle = new PropertyResourceBundle(fis); + fis.close(); + final Enumeration keys = bundle.getKeys(); + while (keys.hasMoreElements()) { + String key = (String)keys.nextElement(); + final String value = substitueVars(bundle.getString(key)); + System.getProperties().setProperty(key, value); + } } - catch (MissingResourceException e) { - // it's not a problem. - return null; + catch (IOException e) { + System.out.println("Problem reading from property file: " + propFilePath); } } - private static void init() { - File ideaPropertiesFile = new File(IDEA_PROPERTIES); - if (ideaPropertiesFile.exists()) { - try { - FileInputStream fis = new FileInputStream(IDEA_PROPERTIES); - ourBundle = new PropertyResourceBundle (fis); - fis.close(); - } - catch (IOException e) { - e.printStackTrace(); - } - } + final Properties props = System.getProperties(); + final Set keys = props.keySet(); + for (Iterator iterator = keys.iterator(); iterator.hasNext();) { + String key = (String)iterator.next(); + String value = props.getProperty(key); + System.out.println(key + "="+value); } } + private static String substitueVars(String s) { + s = StringUtil.replace(s, "${idea.home}", PathManager.getHomePath()); + final Properties props = System.getProperties(); + final Set keys = props.keySet(); + for (Iterator iterator = keys.iterator(); iterator.hasNext();) { + String key = (String)iterator.next(); + String value = props.getProperty(key); + s = StringUtil.replace(s, "${" + key + "}", value); + } + return s; + } } diff --git a/openapi/src/com/intellij/openapi/editor/colors/EditorColors.java b/openapi/src/com/intellij/openapi/editor/colors/EditorColors.java index e9af9554fb8b..d40335c6390f 100644 --- a/openapi/src/com/intellij/openapi/editor/colors/EditorColors.java +++ b/openapi/src/com/intellij/openapi/editor/colors/EditorColors.java @@ -27,4 +27,5 @@ public interface EditorColors { ColorKey ADDED_LINES_COLOR = ColorKey.createColorKey("ADDED_LINES_COLOR"); ColorKey MODIFIED_LINES_COLOR = ColorKey.createColorKey("MODIFIED_LINES_COLOR"); + ColorKey LEFT_GUTTER_BACKGROUND = ColorKey.createColorKey("LEFT_GUTTER_BACKGROUND"); } diff --git a/source/com/intellij/ide/plugins/PluginManager.java b/source/com/intellij/ide/plugins/PluginManager.java index 01c057d55c6e..60d3ad2e19e0 100644 --- a/source/com/intellij/ide/plugins/PluginManager.java +++ b/source/com/intellij/ide/plugins/PluginManager.java @@ -72,6 +72,9 @@ public class PluginManager { ourMainClass = mainClass; ourMethodName = methodName; + PathManager.loadProperties(); + + final PluginManager pluginManager = new PluginManager(); pluginManager.bootstrap(classpathElements); } diff --git a/source/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/source/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index 54d9ffed9c5e..ea27acdbeb6b 100644 --- a/source/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/source/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -15,6 +15,7 @@ import com.intellij.ide.ui.LafManager; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.impl.ApplicationImpl; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.FoldRegion; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.TextAnnotationGutterProvider; @@ -27,9 +28,7 @@ import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.EditorGutterComponentEx; import com.intellij.openapi.editor.ex.FoldingModelEx; import com.intellij.openapi.editor.markup.*; -import com.intellij.openapi.util.Key; import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.diagnostic.Logger; import gnu.trove.TIntArrayList; import gnu.trove.TIntObjectHashMap; import gnu.trove.TIntProcedure; @@ -86,12 +85,17 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse protected void setUI(ComponentUI newUI) { super.setUI(newUI); - myBackgroundColor = null; + reinitSettings(); } public void updateUI() { super.updateUI(); + reinitSettings(); + } + + public void reinitSettings() { myBackgroundColor = null; + repaint(); } public void paint(Graphics g) { @@ -200,12 +204,18 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse public Color getBackground() { if (myBackgroundColor == null) { - LafManager lafManager = LafManager.getInstance(); - if (lafManager != null && lafManager.isUnderAquaLookAndFeel()) { - myBackgroundColor = new Color(0xF0F0F0); + final Color userDefinedColor = myEditor.getColorsScheme().getColor(EditorColors.LEFT_GUTTER_BACKGROUND); + if (userDefinedColor != null) { + myBackgroundColor = userDefinedColor; } else { - myBackgroundColor = super.getBackground(); + LafManager lafManager = LafManager.getInstance(); + if (lafManager != null && lafManager.isUnderAquaLookAndFeel()) { + myBackgroundColor = new Color(0xF0F0F0); + } + else { + myBackgroundColor = super.getBackground(); + } } } return myBackgroundColor; diff --git a/source/com/intellij/openapi/editor/impl/EditorImpl.java b/source/com/intellij/openapi/editor/impl/EditorImpl.java index e3d9af46def7..36d51327d7d8 100644 --- a/source/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/source/com/intellij/openapi/editor/impl/EditorImpl.java @@ -326,7 +326,9 @@ public class EditorImpl implements EditorEx { myHighlighter.setColorScheme(myScheme); + myGutterComponent.reinitSettings(); myGutterComponent.revalidate(); + myEditorComponent.repaint(); updateCaretCursor(); diff --git a/source/com/intellij/openapi/options/colors/pages/GeneralColorsPage.java b/source/com/intellij/openapi/options/colors/pages/GeneralColorsPage.java index 34a980b9a78d..fdecb37a0f9c 100644 --- a/source/com/intellij/openapi/options/colors/pages/GeneralColorsPage.java +++ b/source/com/intellij/openapi/options/colors/pages/GeneralColorsPage.java @@ -35,9 +35,9 @@ import com.intellij.codeInsight.template.impl.TemplateColors; import com.intellij.openapi.editor.HighlighterColors; import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.colors.TextAttributesKey; -import com.intellij.openapi.fileTypes.SyntaxHighlighter; import com.intellij.openapi.fileTypes.PlainSyntaxHighlighter; import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.openapi.fileTypes.SyntaxHighlighter; import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; @@ -61,7 +61,7 @@ public class GeneralColorsPage implements ColorSettingsPage { new ColorDescriptor("Background", EditorColors.BACKGROUND_COLOR, ColorDescriptor.Kind.BACKGROUND), new ColorDescriptor("Background in readonly files", EditorColors.READONLY_BACKGROUND_COLOR, ColorDescriptor.Kind.BACKGROUND), new ColorDescriptor("Readonly fragment background", EditorColors.READONLY_FRAGMENT_BACKGROUND_COLOR, ColorDescriptor.Kind.BACKGROUND), - + new ColorDescriptor("Annotation editor gutter background", EditorColors.LEFT_GUTTER_BACKGROUND, ColorDescriptor.Kind.BACKGROUND), new ColorDescriptor("Selection Background", EditorColors.SELECTION_BACKGROUND_COLOR, ColorDescriptor.Kind.BACKGROUND), new ColorDescriptor("Selection Foreground", EditorColors.SELECTION_FOREGROUND_COLOR, ColorDescriptor.Kind.FOREGROUND),