macro playback fixed
[idea/community.git] / platform / util / src / com / intellij / Patches.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij;
17
18 import com.intellij.openapi.util.SystemInfo;
19
20 @SuppressWarnings({"HardCodedStringLiteral"})
21 public class Patches {
22   public static final boolean ALL_FOLDERS_ARE_WRITABLE = SystemInfo.isWindows;
23
24   /**
25    * See sun bug parage.
26    * When JTable loses focus it cancel cell editing. It should stop cell editing instead.
27    * Actually SUN-boys told they have fixed the bug, but they cancel editing instead of stopping it.
28    */
29   public static final boolean SUN_BUG_ID_4503845 = SystemInfo.JAVA_VERSION.indexOf("1.4.") != -1;
30
31   /**
32    * See sun bug parage [http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4620537].
33    * MouseListener on JTabbedPane with SCROLL_TAB_LAYOUT policy doesn't get events. In the related bug
34    * #4499556 Sun advices to reimplement or hack JTabbedPane as workaround :)
35    */
36   public static final boolean SUN_BUG_ID_4620537 = SystemInfo.JAVA_VERSION.indexOf("1.4.") != -1;
37
38   /**
39    * See sun bug parage.
40    * Debugger hangs on any attempt to attach/listen Connector when attach hanged once. 
41    */
42   public static final boolean SUN_BUG_338675 = SystemInfo.JAVA_VERSION.indexOf("1.4.") != -1;
43
44   /**
45    * See sun bug parade.
46    * If you invoke popup menu, then click on a different window (JFrame, JDialog. It doesn't matter),
47    * the JPopupMenu in the previous window still has focus, as does the new window.
48    * Seems like focus in two locations at the same time.
49    *
50    * This bug is fixed in JDK1.5
51    */
52   public static final boolean SUN_BUG_ID_4218084 = SystemInfo.JAVA_VERSION.indexOf("1.4.") != -1;
53
54   /**
55    * JDK 1.3.x and 1.4.x has the following error. When we close dialog and its content pane is being inserted
56    * into another dialog and mouse WAS INSIDE of dialog's content pane then the AWT doesn't change
57    * some internal references on focused component. It cause crash of dispatching of MOUSE_EXIT
58    * event.
59    */
60   public static final boolean SPECIAL_WINPUT_METHOD_PROCESSING = SystemInfo.JAVA_VERSION.indexOf("1.4.") != -1;
61
62   /** BasicMenuUI$MenuKeyHandler.menuKeyPressed() incorrect for dynamic menus. */
63   public static final boolean SUN_BUG_ID_4738042 = SystemInfo.JAVA_VERSION.indexOf("1.4.") != -1 &&
64                                                    SystemInfo.JAVA_VERSION.indexOf("1.4.2") == -1;
65
66   /** BasicTreeUI.FocusHandler doesn't preperly repaint JTree on focus changes */
67   public static final boolean SUN_BUG_ID_4893787 = true;
68
69   public static final boolean FILE_CHANNEL_TRANSFER_BROKEN = SystemInfo.isLinux && SystemInfo.OS_VERSION.startsWith("2.6");
70
71   private static final boolean BELOW_142DP2 = SystemInfo.isMac &&
72                                               (SystemInfo.JAVA_RUNTIME_VERSION.startsWith("1.4.0") ||
73                                                SystemInfo.JAVA_RUNTIME_VERSION.startsWith("1.4.1") ||
74                                                SystemInfo.JAVA_RUNTIME_VERSION.equals("1.4.2_03-117.1"));
75   private static final boolean DP2_OR_DP3 = SystemInfo.isMac && (
76                                                                   SystemInfo.JAVA_RUNTIME_VERSION.startsWith("1.4.2_03") ||
77                                                                   SystemInfo.JAVA_RUNTIME_VERSION.startsWith("1.4.2_04")
78                                                                   );
79
80   /**
81    * Every typing produces InputMethodEvent instead of KeyEvent with keyTyped event code. Fixed in JRE higher than 1.4.2_03-117.1
82    */
83   public static final boolean APPLE_BUG_ID_3337563 = BELOW_142DP2;
84
85   /**
86    * A window that receives focus immediately receives focusLost() event and then focusGained() again.
87    */
88   public static final boolean APPLE_BUG_ID_3716865 = DP2_OR_DP3;
89
90   /**
91    * Incorrect repaint of the components wrapped with JScrollPane.
92    */
93   public static final boolean APPLE_BUG_ID_3716835 = DP2_OR_DP3;
94
95   /**
96    * Use of JDK1.5 ReentrantReadWriteLock API eventually leads to JVM lock-up or core dump crashes.
97    * With this flag true, API is wrapped with alternative implementation via early days Doug Lea's API.
98    * @see com.intellij.util.concurrency.LockFactory
99    */
100   public static final boolean APPLE_BUG_ID_5359442 = SystemInfo.isMac && (!SystemInfo.isMacOSLeopard || !SystemInfo.isJavaVersionAtLeast("1.5.0_16"));
101
102   /**
103    * Index out of bounds at apple.laf.AquaTabbedPaneUI.tabForCoordinate
104    * http://www.jetbrains.net/jira/browse/IDEADEV-15769
105    */
106   public static final boolean MAC_AQUA_TABS_HACK = SystemInfo.isMac;
107
108   /**
109    * it happened on Mac that some thread did not suspended during VM suspend
110    * resiming VM in this case caused com.sun.jdi.InternalException #13
111    */
112   public static final boolean MAC_RESUME_VM_HACK = SystemInfo.isMac;
113   
114   // IBM java machine 1.4.2 craches if debugger uses ObjectReference.disableCollection() and ObjectReference.enableCollection()
115   public static final boolean IBM_JDK_DISABLE_COLLECTION_BUG = "false".equalsIgnoreCase(System.getProperty("idea.debugger.keep.temp.objects"));
116
117   public static final boolean MAC_HIDE_QUIT_HACK = false;
118
119   /**
120    * Causes calling thread to lock up aquiring content of the system clipboard on linux. Being called from the swing thread an
121    * application stops responding.
122    */
123   public static final boolean SUN_BUG_ID_4818143 = SystemInfo.isLinux || SystemInfo.isFreeBSD;
124
125   /**
126    * Java does not recognize the optional BOM which can begin a UTF-8 stream.
127    * It treats the BOM as if it were the initial character of the stream
128    */
129   public static final boolean SUN_BUG_ID_4508058 = true;
130
131   /**
132    * Huge int[] leak through VolatileImages cached in RepaintManager whenever screen configuration changes.
133    * For instance screen saver activates or computer goes hibernate. The problem still exists in 1.6 when two (or more)
134    * monitors exists
135    */
136   public static final boolean SUN_BUG_ID_6209673 = SystemInfo.JAVA_RUNTIME_VERSION.startsWith("1.5") || SystemInfo.JAVA_RUNTIME_VERSION.startsWith("1.6");
137
138   /**
139    * Under Linux (Ubuntu) invoking "requestFocus" may (probably) activate inactive app. To investigate if it's really true. 
140    */
141   public static final boolean REQUEST_FOCUS_MAY_ACTIVATE_APP = SystemInfo.isLinux;
142 }