mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-79615 LineMarker for 'java.awt.Color'
This commit is contained in:
@@ -51,19 +51,61 @@ public class JavaColorProvider implements ElementColorProvider {
|
||||
@Nullable
|
||||
private static Color getColor(PsiExpressionList list) {
|
||||
try {
|
||||
final PsiExpression[] args = list.getExpressions();
|
||||
final PsiType[] types = list.getExpressionTypes();
|
||||
if (types.length == 1 && types[0].equals(PsiType.INT)) {
|
||||
final Object num = JavaConstantExpressionEvaluator.computeConstantExpression(args[0], true);
|
||||
if (num instanceof Integer) {
|
||||
return new Color(((Integer)num).intValue());
|
||||
final PsiExpression[] args = list.getExpressions();
|
||||
final PsiType[] types = list.getExpressionTypes();
|
||||
ColorConstructors type = getConstructorType(types);
|
||||
if (type != null) {
|
||||
switch (type) {
|
||||
case INT: return new Color( getInt(args[0]));
|
||||
case INT_BOOL: return new Color( getInt(args[0]), getBoolean(args[1]));
|
||||
case INT_x3: return new Color( getInt(args[0]), getInt(args[1]), getInt(args[2]));
|
||||
case INT_x4: return new Color( getInt(args[0]), getInt(args[1]), getInt(args[2]), getInt(args[3]));
|
||||
case FLOAT_x3: return new Color(getFloat(args[0]), getFloat(args[1]), getFloat(args[2]));
|
||||
case FLOAT_x4: return new Color(getFloat(args[0]), getFloat(args[1]), getFloat(args[2]), getFloat(args[3]));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ignore) {}
|
||||
catch (Exception ignore) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static ColorConstructors getConstructorType(PsiType[] types) {
|
||||
int len = types.length;
|
||||
if (len == 0) return null;
|
||||
|
||||
switch (len) {
|
||||
case 1: return ColorConstructors.INT;
|
||||
case 2: return ColorConstructors.INT_BOOL;
|
||||
case 3: return PsiType.INT.equals(types[0]) ? ColorConstructors.INT_x3 : ColorConstructors.FLOAT_x3;
|
||||
case 4: return PsiType.INT.equals(types[0]) ? ColorConstructors.INT_x4 : ColorConstructors.FLOAT_x4;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int getInt(PsiExpression expr) {
|
||||
return ((Integer)getObject(expr)).intValue();
|
||||
}
|
||||
|
||||
public static float getFloat(PsiExpression expr) {
|
||||
return ((Float)getObject(expr)).floatValue();
|
||||
}
|
||||
|
||||
public static boolean getBoolean(PsiExpression expr) {
|
||||
return ((Boolean)getObject(expr)).booleanValue();
|
||||
}
|
||||
|
||||
private static Object getObject(PsiExpression expr) {
|
||||
return JavaConstantExpressionEvaluator.computeConstantExpression(expr, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColorTo(@NotNull PsiElement element, @NotNull Color color) {
|
||||
}
|
||||
|
||||
private enum ColorConstructors {
|
||||
INT, INT_BOOL, INT_x3, INT_x4, FLOAT_x3, FLOAT_x4
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,12 +57,14 @@ public class ColorLineMarkerProvider implements LineMarkerProvider {
|
||||
public MyInfo(@NotNull final PsiElement element, final Color color, final ElementColorProvider colorProvider) {
|
||||
super(element,
|
||||
element.getTextRange(),
|
||||
new ColorIcon(12, color),
|
||||
new ColorIcon(10, color),
|
||||
Pass.UPDATE_ALL,
|
||||
FunctionUtil.<Object, String>nullConstant(),
|
||||
new GutterIconNavigationHandler<PsiElement>() {
|
||||
@Override
|
||||
public void navigate(MouseEvent e, PsiElement elt) {
|
||||
if (!elt.isWritable()) return;
|
||||
|
||||
final Editor editor = PsiUtilBase.findEditor(element);
|
||||
assert editor != null;
|
||||
final Color c = ColorChooser.chooseColor(editor.getComponent(), "Choose color", color, true);
|
||||
|
||||
@@ -38,8 +38,6 @@
|
||||
<postStartupActivity implementation="com.intellij.platform.FilesystemToolwindowOpener"/>
|
||||
|
||||
<projectOpenProcessor implementation="com.intellij.platform.PlatformProjectOpenProcessor"/>
|
||||
|
||||
<!--<codeInsight.lineMarkerProvider language="*" implementationClass="com.intellij.ui.ColorLineMarkerProvider"/>-->
|
||||
</extensions>
|
||||
|
||||
</idea-plugin>
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
<expressionConverter implementationClass="com.intellij.refactoring.introduceParameter.JavaExpressionConverter" language="JAVA"/>
|
||||
|
||||
|
||||
<codeInsight.lineMarkerProvider language="*" implementationClass="com.intellij.ui.ColorLineMarkerProvider"/>
|
||||
<!--<expectedTypesProvider implementation="com.intellij.codeInsight.JavaExpectedTypesProvider"/>-->
|
||||
|
||||
<referencesSearch implementation="com.intellij.psi.impl.search.PsiAnnotationMethodReferencesSearcher"/>
|
||||
|
||||
Reference in New Issue
Block a user