mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
IJPL-149829 Fix classloading of Microba UI implementation classes
Since this library is not a part of the IntelliJ platform core, its classes are loaded using separate classloader. But when UIDefaults tries to get the UI class by its FQN, it is using platform classloader and fails to find it. The solution is to specify specific classes right when patching the UIDefaults. But there is a downside: UI classes will be loaded eagerly instead of when a specific class is requested. GitOrigin-RevId: e596f2d594f10bbcf2aa54096eed6006868614f1
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3ca194ef2a
commit
4faea80d0c
@@ -1,6 +1,14 @@
|
||||
package com.michaelbaranov.microba;
|
||||
|
||||
import com.michaelbaranov.microba.calendar.ui.basic.BasicCalendarPaneUI;
|
||||
import com.michaelbaranov.microba.calendar.ui.basic.BasicDatePickerUI;
|
||||
import com.michaelbaranov.microba.common.MicrobaComponent;
|
||||
import com.michaelbaranov.microba.gradient.ui.basic.BasicGradientUI;
|
||||
import com.michaelbaranov.microba.gradienteditor.ui.basic.BasicGradientEditorUI;
|
||||
import com.michaelbaranov.microba.marker.ui.basic.BasicMarkerBarUI;
|
||||
import com.michaelbaranov.microba.marker.ui.metal.MetalMarkerBarUI;
|
||||
import com.michaelbaranov.microba.marker.ui.motif.MotifMarkerBarUI;
|
||||
import com.michaelbaranov.microba.marker.ui.windows.WindowsMarkerBarUI;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.applet.Applet;
|
||||
@@ -45,18 +53,28 @@ public class Microba {
|
||||
|
||||
// all L&F
|
||||
UIManager.put("microba.CalendarPaneUI", packagePrefix + "calendar.ui.basic.BasicCalendarPaneUI");
|
||||
UIManager.put(packagePrefix + "calendar.ui.basic.BasicCalendarPaneUI", BasicCalendarPaneUI.class);
|
||||
UIManager.put("microba.DatePickerUI", packagePrefix + "calendar.ui.basic.BasicDatePickerUI");
|
||||
UIManager.put(packagePrefix + "calendar.ui.basic.BasicDatePickerUI", BasicDatePickerUI.class);
|
||||
UIManager.put("microba.GradientUI", packagePrefix + "gradient.ui.basic.BasicGradientUI");
|
||||
UIManager.put(packagePrefix + "gradient.ui.basic.BasicGradientUI", BasicGradientUI.class);
|
||||
UIManager.put("microba.GradientEditorUI", packagePrefix + "gradienteditor.ui.basic.BasicGradientEditorUI");
|
||||
UIManager.put(packagePrefix + "gradienteditor.ui.basic.BasicGradientEditorUI", BasicGradientEditorUI.class);
|
||||
UIManager.put("microba.MarkerBarUI", packagePrefix + "marker.ui.basic.BasicMarkerBarUI");
|
||||
UIManager.put(packagePrefix + "marker.ui.basic.BasicMarkerBarUI", BasicMarkerBarUI.class);
|
||||
|
||||
// particular L&F
|
||||
if (lookAndFeel.getID().equals("Windows")) {
|
||||
UIManager.put("microba.MarkerBarUI", packagePrefix + "marker.ui.windows.WindowsMarkerBarUI");
|
||||
} else if (lookAndFeel.getID().equals("Metal")) {
|
||||
UIManager.put(packagePrefix + "marker.ui.windows.WindowsMarkerBarUI", WindowsMarkerBarUI.class);
|
||||
}
|
||||
else if (lookAndFeel.getID().equals("Metal")) {
|
||||
UIManager.put("microba.MarkerBarUI", packagePrefix + "marker.ui.metal.MetalMarkerBarUI");
|
||||
} else if (lookAndFeel.getID().equals("Motif")) {
|
||||
UIManager.put(packagePrefix + "marker.ui.metal.MetalMarkerBarUI", MetalMarkerBarUI.class);
|
||||
}
|
||||
else if (lookAndFeel.getID().equals("Motif")) {
|
||||
UIManager.put("microba.MarkerBarUI", packagePrefix + "marker.ui.motif.MotifMarkerBarUI");
|
||||
UIManager.put(packagePrefix + "marker.ui.motif.MotifMarkerBarUI", MotifMarkerBarUI.class);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
package com.michaelbaranov.microba.common;
|
||||
|
||||
import java.awt.Color;
|
||||
import com.michaelbaranov.microba.Microba;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import java.awt.*;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
|
||||
import com.michaelbaranov.microba.Microba;
|
||||
|
||||
/**
|
||||
* Superclass for all Microba GUI components.
|
||||
*
|
||||
@@ -33,16 +31,10 @@ public class MicrobaComponent extends JComponent {
|
||||
/**
|
||||
* Sets the UI delegate of this component to the corresponding UI delegate
|
||||
* taken from UIManager.
|
||||
* <p>
|
||||
* This implementation has a workarount to fix the problem with non-standard
|
||||
* class-loaders.
|
||||
*/
|
||||
public void updateUI() {
|
||||
UIManager.getDefaults().put(UIManager.get(this.getUIClassID()), null);
|
||||
ComponentUI delegate = UIManager.getUI(this);
|
||||
|
||||
setUI(delegate);
|
||||
invalidate();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user