Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
package com.intellij.java.language.util;

public class VisibilityIcons {
private VisibilityIcons() {}
private VisibilityIcons() {
}

// public static void setVisibilityIcon(PsiModifierList modifierList, RowIcon baseIcon) {
// if (modifierList != null) {
Expand All @@ -37,12 +38,12 @@ private VisibilityIcons() {}
// setVisibilityIcon(PsiUtil.ACCESS_LEVEL_PACKAGE_LOCAL, baseIcon);
// }
// else {
// Icon emptyIcon = new EmptyIcon(PlatformIcons.PUBLIC_ICON.getIconWidth(), PlatformIcons.PUBLIC_ICON.getIconHeight());
// Icon emptyIcon = new EmptyIcon(PlatformIconGroup.nodesC_public().getIconWidth(), PlatformIconGroup.nodesC_public().getIconHeight());
// baseIcon.setIcon(emptyIcon, 1);
// }
// }
// else if (PlatformIcons.PUBLIC_ICON != null) {
// Icon emptyIcon = new EmptyIcon(PlatformIcons.PUBLIC_ICON.getIconWidth(), PlatformIcons.PUBLIC_ICON.getIconHeight());
// else if (PlatformIconGroup.nodesC_public() != null) {
// Icon emptyIcon = new EmptyIcon(PlatformIconGroup.nodesC_public().getIconWidth(), PlatformIconGroup.nodesC_public().getIconHeight());
// baseIcon.setIcon(emptyIcon, 1);
// }
// }
Expand All @@ -51,20 +52,20 @@ private VisibilityIcons() {}
// Icon icon;
// switch (accessLevel) {
// case PsiUtil.ACCESS_LEVEL_PUBLIC:
// icon = PlatformIcons.PUBLIC_ICON;
// icon = PlatformIconGroup.nodesC_public();
// break;
// case PsiUtil.ACCESS_LEVEL_PROTECTED:
// icon = PlatformIcons.PROTECTED_ICON;
// icon = PlatformIconGroup.nodesC_protected();
// break;
// case PsiUtil.ACCESS_LEVEL_PACKAGE_LOCAL:
// icon = PlatformIcons.PACKAGE_LOCAL_ICON;
// icon = PlatformIconGroup.nodesC_plocal();
// break;
// case PsiUtil.ACCESS_LEVEL_PRIVATE:
// icon = PlatformIcons.PRIVATE_ICON;
// icon = PlatformIconGroup.nodesC_private();
// break;
// default:
// if (PlatformIcons.PUBLIC_ICON != null) {
// icon = new EmptyIcon(PlatformIcons.PUBLIC_ICON.getIconWidth(), PlatformIcons.PUBLIC_ICON.getIconHeight());
// if (PlatformIconGroup.nodesC_public() != null) {
// icon = new EmptyIcon(PlatformIconGroup.nodesC_public().getIconWidth(), PlatformIconGroup.nodesC_public().getIconHeight());
// }
// else {
// return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,39 @@
import jakarta.annotation.Nonnull;

public class LightRecordCanonicalConstructor extends LightMethod implements SyntheticElement {
public LightRecordCanonicalConstructor(@Nonnull PsiMethod method,
@Nonnull PsiClass containingClass) {
super(method.getManager(), method, containingClass);
}
public LightRecordCanonicalConstructor(@Nonnull PsiMethod method, @Nonnull PsiClass containingClass) {
super(method.getManager(), method, containingClass);
}

@Override
public int getTextOffset() {
return getNavigationElement().getTextOffset();
}
@Override
public int getTextOffset() {
return getNavigationElement().getTextOffset();
}

@Nonnull
@Override
public PsiElement getNavigationElement() {
return getContainingClass();
}
@Nonnull
@Override
public PsiElement getNavigationElement() {
return getContainingClass();
}

@Override
public PsiFile getContainingFile() {
PsiClass containingClass = getContainingClass();
return containingClass.getContainingFile();
}
@Override
public PsiFile getContainingFile() {
PsiClass containingClass = getContainingClass();
return containingClass.getContainingFile();
}

// @Override
// public Icon getElementIcon(final int flags)
// {
// public Icon getElementIcon(final int flags) {
// final RowIcon baseIcon =
// IconManager.getInstance().createLayeredIcon(this, PlatformIcons.METHOD_ICON, ElementPresentationUtil.getFlags(this, false));
// if(BitUtil.isSet(flags, ICON_FLAG_VISIBILITY))
// {
// IconManager.getInstance().createLayeredIcon(this, PlatformIconGroup.nodesMethod(), ElementPresentationUtil.getFlags(this, false));
// if(BitUtil.isSet(flags, ICON_FLAG_VISIBILITY)) {
// VisibilityIcons.setVisibilityIcon(getContainingClass().getModifierList(), baseIcon);
// }
// return baseIcon;
// }

@Override
public PsiElement getContext() {
return getContainingClass();
}
@Override
public PsiElement getContext() {
return getContainingClass();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import com.intellij.java.language.codeInsight.AnnotationTargetUtil;
import com.intellij.java.language.psi.*;
import consulo.annotation.access.RequiredReadAction;
import consulo.application.util.CachedValueProvider;
import consulo.content.scope.SearchScope;
import consulo.language.psi.PsiElement;
Expand All @@ -15,139 +16,145 @@

import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;

import java.util.Arrays;
import java.util.Objects;

public class LightRecordField extends LightField implements LightRecordMember {
private final
@Nonnull
PsiRecordComponent myRecordComponent;

public LightRecordField(@Nonnull PsiManager manager,
@Nonnull PsiField field,
@Nonnull PsiClass containingClass,
@Nonnull PsiRecordComponent component) {
super(manager, field, containingClass);
myRecordComponent = component;
}

@Override
@Nonnull
public PsiRecordComponent getRecordComponent() {
return myRecordComponent;
}

@Override
public int getTextOffset() {
return myRecordComponent.getTextOffset();
}

@Nonnull
@Override
public PsiElement getNavigationElement() {
return myRecordComponent.getNavigationElement();
}

@Override
public boolean isWritable() {
return true;
}

@Override
public PsiFile getContainingFile() {
PsiClass containingClass = getContainingClass();
if (containingClass == null) {
return null;
}
return containingClass.getContainingFile();
}

@Override
public
@Nonnull
PsiType getType() {
if (DumbService.isDumb(myRecordComponent.getProject())) {
return myRecordComponent.getType();
}
return LanguageCachedValueUtil.getCachedValue(this, () -> {
PsiType type = myRecordComponent.getType()
.annotate(() -> Arrays.stream(myRecordComponent.getAnnotations())
.filter(LightRecordField::hasApplicableAnnotationTarget)
.toArray(PsiAnnotation[]::new)
);
return CachedValueProvider.Result.create(type, this);
});
}

@Override
@Nonnull
public PsiAnnotation[] getAnnotations() {
return getType().getAnnotations();
}

@Override
public boolean hasAnnotation(@Nonnull String fqn) {
PsiType type = getType();
return type.hasAnnotation(fqn);
}

@Override
@Nullable
public PsiAnnotation getAnnotation(@Nonnull String fqn) {
return getType().findAnnotation(fqn);
}
private final
@Nonnull
PsiRecordComponent myRecordComponent;

public LightRecordField(
@Nonnull PsiManager manager,
@Nonnull PsiField field,
@Nonnull PsiClass containingClass,
@Nonnull PsiRecordComponent component
) {
super(manager, field, containingClass);
myRecordComponent = component;
}

@Override
@Nonnull
public PsiRecordComponent getRecordComponent() {
return myRecordComponent;
}

@Override
public int getTextOffset() {
return myRecordComponent.getTextOffset();
}

@Nonnull
@Override
public PsiElement getNavigationElement() {
return myRecordComponent.getNavigationElement();
}

@Override
public boolean isWritable() {
return true;
}

@Override
public PsiFile getContainingFile() {
PsiClass containingClass = getContainingClass();
if (containingClass == null) {
return null;
}
return containingClass.getContainingFile();
}

@Override
public
@Nonnull
PsiType getType() {
if (DumbService.isDumb(myRecordComponent.getProject())) {
return myRecordComponent.getType();
}
return LanguageCachedValueUtil.getCachedValue(this, () -> {
PsiType type = myRecordComponent.getType()
.annotate(() -> Arrays.stream(myRecordComponent.getAnnotations())
.filter(LightRecordField::hasApplicableAnnotationTarget)
.toArray(PsiAnnotation[]::new)
);
return CachedValueProvider.Result.create(type, this);
});
}

@Override
@Nonnull
public PsiAnnotation[] getAnnotations() {
return getType().getAnnotations();
}

@Override
public boolean hasAnnotation(@Nonnull String fqn) {
PsiType type = getType();
return type.hasAnnotation(fqn);
}

@Override
@Nullable
public PsiAnnotation getAnnotation(@Nonnull String fqn) {
return getType().findAnnotation(fqn);
}

// @Override
// public Icon getElementIcon(final int flags)
// {
// public Icon getElementIcon(final int flags) {
// final RowIcon baseIcon =
// IconManager.getInstance().createLayeredIcon(this, PlatformIcons.FIELD_ICON, ElementPresentationUtil.getFlags(this, false));
// if(BitUtil.isSet(flags, ICON_FLAG_VISIBILITY))
// {
// IconManager.getInstance().createLayeredIcon(this, PlatformIconGroup.nodesField(), ElementPresentationUtil.getFlags(this, false));
// if (BitUtil.isSet(flags, ICON_FLAG_VISIBILITY)) {
// VisibilityIcons.setVisibilityIcon(PsiUtil.ACCESS_LEVEL_PRIVATE, baseIcon);
// }
// return baseIcon;
// }

@Override
public PsiElement getContext() {
return getContainingClass();
}

@Override
public
@Nonnull
SearchScope getUseScope() {
PsiClass aClass = Objects.requireNonNull(getContainingClass());
PsiClass containingClass = aClass.getContainingClass();
while (containingClass != null) {
aClass = containingClass;
containingClass = containingClass.getContainingClass();
}
return new LocalSearchScope(aClass);
}

private static boolean hasApplicableAnnotationTarget(PsiAnnotation annotation) {
return AnnotationTargetUtil.findAnnotationTarget(annotation, PsiAnnotation.TargetType.TYPE_USE, PsiAnnotation.TargetType.FIELD) != null;
}

@Override
public void normalizeDeclaration() throws IncorrectOperationException {
// no-op
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
return o instanceof LightRecordField &&
myRecordComponent.equals(((LightRecordField) o).myRecordComponent);
}

@Override
public int hashCode() {
return Objects.hash(myRecordComponent);
}
@Override
public PsiElement getContext() {
return getContainingClass();
}

@Override
public
@Nonnull
SearchScope getUseScope() {
PsiClass aClass = Objects.requireNonNull(getContainingClass());
PsiClass containingClass = aClass.getContainingClass();
while (containingClass != null) {
aClass = containingClass;
containingClass = containingClass.getContainingClass();
}
return new LocalSearchScope(aClass);
}

@RequiredReadAction
private static boolean hasApplicableAnnotationTarget(PsiAnnotation annotation) {
return AnnotationTargetUtil.findAnnotationTarget(
annotation,
PsiAnnotation.TargetType.TYPE_USE,
PsiAnnotation.TargetType.FIELD
) != null;
}

@Override
public void normalizeDeclaration() throws IncorrectOperationException {
// no-op
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
return o instanceof LightRecordField &&
myRecordComponent.equals(((LightRecordField) o).myRecordComponent);
}

@Override
public int hashCode() {
return Objects.hash(myRecordComponent);
}

}
Loading