Skip to content

Commit

Permalink
PHP 8.4 Support: Property hooks (Part 3)
Browse files Browse the repository at this point in the history
- apache#8035
- https://wiki.php.net/rfc#php_84
- https://wiki.php.net/rfc/property-hooks

- Fix the navigator
- Fix/Add unit tests
- Add SVG icons for a property hook, a trait, and an enum case
  • Loading branch information
junichi11 committed Feb 13, 2025
1 parent 05703f8 commit 0935fb4
Show file tree
Hide file tree
Showing 35 changed files with 2,456 additions and 131 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,38 +32,24 @@ public final class IconsUtils {

private static final String PNG_EXTENSION = ".png"; //NOI18N
private static final String GIF_EXTENSION = ".gif"; //NOI18N
private static final String SVG_EXTENSION = ".svg"; //NOI18N
private static final String ICON_BASE = "org/netbeans/modules/php/editor/resources/"; //NOI18N
private static final String EMPTY_FILE_ICON_BASE = "org/netbeans/modules/csl/source/resources/icons/emptyfile-icon"; //NOI18N

private IconsUtils() {
}

public static ImageIcon getElementIcon(PhpElementKind elementKind, Collection<Modifier> modifiers) {
ImageIcon imageIcon;
switch (elementKind) {
case CLASS:
imageIcon = loadClassIcon();
break;
case IFACE:
imageIcon = loadInterfaceIcon();
break;
case TRAIT:
imageIcon = loadTraitIcon();
break;
case ENUM:
imageIcon = loadEnumIcon();
break;
case CONSTANT:
imageIcon = loadConstantIcon();
break;
case FUNCTION:
imageIcon = loadFunctionIcon();
break;
default:
imageIcon = ImageUtilities.loadImageIcon(EMPTY_FILE_ICON_BASE + PNG_EXTENSION, false);
break;
}
return imageIcon;
return switch (elementKind) {
case CLASS -> loadClassIcon();
case IFACE -> loadInterfaceIcon();
case TRAIT -> loadTraitIcon();
case ENUM -> loadEnumIcon();
case CONSTANT -> loadConstantIcon();
case FUNCTION -> loadFunctionIcon();
case PROPERTY_HOOK -> loadPropertyHookIcon();
default -> ImageUtilities.loadImageIcon(EMPTY_FILE_ICON_BASE + PNG_EXTENSION, false);
};
}

public static ImageIcon getElementIcon(PhpElementKind elementKind) {
Expand Down Expand Up @@ -94,6 +80,10 @@ public static ImageIcon loadFunctionIcon() {
return ImageUtilities.loadImageIcon(ICON_BASE + "function" + PNG_EXTENSION, false); // NOI18N
}

public static ImageIcon loadPropertyHookIcon() {
return ImageUtilities.loadImageIcon(ICON_BASE + "hook" + SVG_EXTENSION, false); // NOI18N
}

public static ImageIcon loadConstantIcon() {
return ImageUtilities.loadImageIcon(ICON_BASE + "constant" + PNG_EXTENSION, false); // NOI18N
}
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@

import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
Expand Down Expand Up @@ -112,16 +112,11 @@ public void run(Result result, SchedulerEvent event) {

private Collection<OffsetRange> compute(final ParserResult parameter, final int offset) {
final PHPParseResult parseResult = (PHPParseResult) parameter;
Set<OffsetRange> result = new TreeSet<>(new Comparator<OffsetRange>() {
@Override
public int compare(OffsetRange o1, OffsetRange o2) {
return o1.compareTo(o2);
}
});
Set<OffsetRange> result = new TreeSet<>((OffsetRange o1, OffsetRange o2) -> o1.compareTo(o2));
final TokenHierarchy<?> tokenHierarchy = parseResult.getSnapshot().getTokenHierarchy();
TokenSequence<PHPTokenId> tokenSequence = tokenHierarchy != null ? LexUtilities.getPHPTokenSequence(tokenHierarchy, offset) : null;
if (cancelled) {
return Collections.EMPTY_LIST;
return List.of();
}
OffsetRange referenceSpan = tokenSequence != null ? DeclarationFinderImpl.getReferenceSpan(tokenSequence, offset, parseResult.getModel()) : OffsetRange.NONE;
if (!referenceSpan.equals(OffsetRange.NONE)) {
Expand All @@ -141,11 +136,11 @@ private Collection<OffsetRange> getOccurrences(Model model, OffsetRange referenc
Collection<OffsetRange> result = new TreeSet<>();
OccurencesSupport occurencesSupport = model.getOccurencesSupport(referenceSpan);
if (cancelled) {
return Collections.EMPTY_LIST;
return List.of();
}
Occurence caretOccurence = occurencesSupport.getOccurence();
if (cancelled) {
return Collections.EMPTY_LIST;
return List.of();
}
if (caretOccurence != null) {
final EnumSet<Accuracy> handledAccuracyFlags = EnumSet.<Occurence.Accuracy>of(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@ public class PhpStructureScanner implements StructureScanner {
@Override
public List<? extends StructureItem> scan(final ParserResult info) {
List<? extends StructureItem> result = Collections.<StructureItem>emptyList();
if (info instanceof PHPParseResult) {
PHPParseResult phpParseResult = (PHPParseResult) info;
if (info instanceof PHPParseResult phpParseResult) {
result = NavigatorScanner.create(phpParseResult.getModel(Model.Type.COMMON), isResolveDeprecatedElements()).scan();
}
return result;
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
|-Test [17, 920] : ESCAPED{Test}
|--FooBarTrait [30, 920] : ESCAPED{FooBarTrait}<font color="#999999">#ESCAPED{BarTrait}ESCAPED{, }ESCAPED{FooTrait}</font>
|---(Inherited) $publicBarTraitField [58, 78] : <font color="#7D694A">ESCAPED{$publicBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $privateBarTraitField [96, 117] : <font color="#7D694A">ESCAPED{$privateBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $protectedBarTraitField [137, 160] : <font color="#7D694A">ESCAPED{$protectedBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $publicStaticBarTraitField [185, 211] : <font color="#7D694A">ESCAPED{$publicStaticBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $privateStaticBarTraitField [236, 263] : <font color="#7D694A">ESCAPED{$privateStaticBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $protectedStaticBarTraitField [290, 319] : <font color="#7D694A">ESCAPED{$protectedStaticBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) publicBarTraitMethod [341, 361] : <font color="#7D694A">ESCAPED{publicBarTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
|---(Inherited) privateBarTraitMethod [410, 431] : <font color="#7D694A">ESCAPED{privateBarTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param1}ESCAPED{, }<font color="#999999">ESCAPED{string}ESCAPED{ }</font>ESCAPED{$param2}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
|---(Inherited) protectedBarTraitMethod [499, 522] : <font color="#7D694A">ESCAPED{protectedBarTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param1}ESCAPED{, }<font color="#999999">ESCAPED{string}ESCAPED{ }</font>ESCAPED{$param2}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
|---(Inherited) publicStaticBarTraitMethod [594, 620] : <font color="#7D694A">ESCAPED{publicStaticBarTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
|---(Inherited) privateStaticBarTraitMethod [676, 703] : <font color="#7D694A">ESCAPED{privateStaticBarTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param1}ESCAPED{, }<font color="#999999">ESCAPED{string}ESCAPED{ }</font>ESCAPED{$param2}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
|---(Inherited) protectedStaticBarTraitMethod [778, 807] : <font color="#7D694A">ESCAPED{protectedStaticBarTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param1}ESCAPED{, }<font color="#999999">ESCAPED{string}ESCAPED{ }</font>ESCAPED{$param2}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
|---(Inherited) $publicFooTraitField [58, 78] : <font color="#7D694A">ESCAPED{$publicFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $privateFooTraitField [96, 117] : <font color="#7D694A">ESCAPED{$privateFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $protectedFooTraitField [137, 160] : <font color="#7D694A">ESCAPED{$protectedFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $publicStaticFooTraitField [185, 211] : <font color="#7D694A">ESCAPED{$publicStaticFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $privateStaticFooTraitField [236, 263] : <font color="#7D694A">ESCAPED{$privateStaticFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) $protectedStaticFooTraitField [290, 319] : <font color="#7D694A">ESCAPED{$protectedStaticFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
|---(Inherited) publicFooTraitMethod [341, 361] : <font color="#7D694A">ESCAPED{publicFooTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
|---(Inherited) privateFooTraitMethod [410, 431] : <font color="#7D694A">ESCAPED{privateFooTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param1}ESCAPED{, }<font color="#999999">ESCAPED{string}ESCAPED{ }</font>ESCAPED{$param2}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
|---(Inherited) protectedFooTraitMethod [499, 522] : <font color="#7D694A">ESCAPED{protectedFooTraitMethod}ESCAPED{(}<font color="#999999">ESCAPED{int}ESCAPED{ }</font>ESCAPED{$param1}ESCAPED{, }<font color="#999999">ESCAPED{string}ESCAPED{ }</font>ESCAPED{$param2}ESCAPED{)}</font><font color="#999999">:ESCAPED{void}</font>
Expand Down
Loading

0 comments on commit 0935fb4

Please sign in to comment.