Skip to content

Commit 0935fb4

Browse files
committed
PHP 8.4 Support: Property hooks (Part 3)
- 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
1 parent 05703f8 commit 0935fb4

File tree

35 files changed

+2456
-131
lines changed

35 files changed

+2456
-131
lines changed

php/php.editor/src/org/netbeans/modules/php/editor/actions/IconsUtils.java

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,24 @@ public final class IconsUtils {
3232

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

3839
private IconsUtils() {
3940
}
4041

4142
public static ImageIcon getElementIcon(PhpElementKind elementKind, Collection<Modifier> modifiers) {
42-
ImageIcon imageIcon;
43-
switch (elementKind) {
44-
case CLASS:
45-
imageIcon = loadClassIcon();
46-
break;
47-
case IFACE:
48-
imageIcon = loadInterfaceIcon();
49-
break;
50-
case TRAIT:
51-
imageIcon = loadTraitIcon();
52-
break;
53-
case ENUM:
54-
imageIcon = loadEnumIcon();
55-
break;
56-
case CONSTANT:
57-
imageIcon = loadConstantIcon();
58-
break;
59-
case FUNCTION:
60-
imageIcon = loadFunctionIcon();
61-
break;
62-
default:
63-
imageIcon = ImageUtilities.loadImageIcon(EMPTY_FILE_ICON_BASE + PNG_EXTENSION, false);
64-
break;
65-
}
66-
return imageIcon;
43+
return switch (elementKind) {
44+
case CLASS -> loadClassIcon();
45+
case IFACE -> loadInterfaceIcon();
46+
case TRAIT -> loadTraitIcon();
47+
case ENUM -> loadEnumIcon();
48+
case CONSTANT -> loadConstantIcon();
49+
case FUNCTION -> loadFunctionIcon();
50+
case PROPERTY_HOOK -> loadPropertyHookIcon();
51+
default -> ImageUtilities.loadImageIcon(EMPTY_FILE_ICON_BASE + PNG_EXTENSION, false);
52+
};
6753
}
6854

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

83+
public static ImageIcon loadPropertyHookIcon() {
84+
return ImageUtilities.loadImageIcon(ICON_BASE + "hook" + SVG_EXTENSION, false); // NOI18N
85+
}
86+
9787
public static ImageIcon loadConstantIcon() {
9888
return ImageUtilities.loadImageIcon(ICON_BASE + "constant" + PNG_EXTENSION, false); // NOI18N
9989
}

php/php.editor/src/org/netbeans/modules/php/editor/csl/NavigatorScanner.java

Lines changed: 134 additions & 90 deletions
Large diffs are not rendered by default.

php/php.editor/src/org/netbeans/modules/php/editor/csl/OccurrencesFinderImpl.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121

2222
import java.util.Collection;
2323
import java.util.Collections;
24-
import java.util.Comparator;
2524
import java.util.EnumSet;
2625
import java.util.HashMap;
26+
import java.util.List;
2727
import java.util.Map;
2828
import java.util.Set;
2929
import java.util.TreeSet;
@@ -112,16 +112,11 @@ public void run(Result result, SchedulerEvent event) {
112112

113113
private Collection<OffsetRange> compute(final ParserResult parameter, final int offset) {
114114
final PHPParseResult parseResult = (PHPParseResult) parameter;
115-
Set<OffsetRange> result = new TreeSet<>(new Comparator<OffsetRange>() {
116-
@Override
117-
public int compare(OffsetRange o1, OffsetRange o2) {
118-
return o1.compareTo(o2);
119-
}
120-
});
115+
Set<OffsetRange> result = new TreeSet<>((OffsetRange o1, OffsetRange o2) -> o1.compareTo(o2));
121116
final TokenHierarchy<?> tokenHierarchy = parseResult.getSnapshot().getTokenHierarchy();
122117
TokenSequence<PHPTokenId> tokenSequence = tokenHierarchy != null ? LexUtilities.getPHPTokenSequence(tokenHierarchy, offset) : null;
123118
if (cancelled) {
124-
return Collections.EMPTY_LIST;
119+
return List.of();
125120
}
126121
OffsetRange referenceSpan = tokenSequence != null ? DeclarationFinderImpl.getReferenceSpan(tokenSequence, offset, parseResult.getModel()) : OffsetRange.NONE;
127122
if (!referenceSpan.equals(OffsetRange.NONE)) {
@@ -141,11 +136,11 @@ private Collection<OffsetRange> getOccurrences(Model model, OffsetRange referenc
141136
Collection<OffsetRange> result = new TreeSet<>();
142137
OccurencesSupport occurencesSupport = model.getOccurencesSupport(referenceSpan);
143138
if (cancelled) {
144-
return Collections.EMPTY_LIST;
139+
return List.of();
145140
}
146141
Occurence caretOccurence = occurencesSupport.getOccurence();
147142
if (cancelled) {
148-
return Collections.EMPTY_LIST;
143+
return List.of();
149144
}
150145
if (caretOccurence != null) {
151146
final EnumSet<Accuracy> handledAccuracyFlags = EnumSet.<Occurence.Accuracy>of(

php/php.editor/src/org/netbeans/modules/php/editor/csl/PhpStructureScanner.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ public class PhpStructureScanner implements StructureScanner {
3838
@Override
3939
public List<? extends StructureItem> scan(final ParserResult info) {
4040
List<? extends StructureItem> result = Collections.<StructureItem>emptyList();
41-
if (info instanceof PHPParseResult) {
42-
PHPParseResult phpParseResult = (PHPParseResult) info;
41+
if (info instanceof PHPParseResult phpParseResult) {
4342
result = NavigatorScanner.create(phpParseResult.getModel(Model.Type.COMMON), isResolveDeprecatedElements()).scan();
4443
}
4544
return result;
Lines changed: 39 additions & 0 deletions
Loading
Lines changed: 31 additions & 0 deletions
Loading
Lines changed: 47 additions & 0 deletions
Loading

php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/csl/NavigatorNb3362Test/structure/nb3362/traitedTrait_01.pass

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
11
|-Test [17, 920] : ESCAPED{Test}
22
|--FooBarTrait [30, 920] : ESCAPED{FooBarTrait}<font color="#999999">#ESCAPED{BarTrait}ESCAPED{, }ESCAPED{FooTrait}</font>
3+
|---(Inherited) $publicBarTraitField [58, 78] : <font color="#7D694A">ESCAPED{$publicBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
4+
|---(Inherited) $privateBarTraitField [96, 117] : <font color="#7D694A">ESCAPED{$privateBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
5+
|---(Inherited) $protectedBarTraitField [137, 160] : <font color="#7D694A">ESCAPED{$protectedBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
6+
|---(Inherited) $publicStaticBarTraitField [185, 211] : <font color="#7D694A">ESCAPED{$publicStaticBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
7+
|---(Inherited) $privateStaticBarTraitField [236, 263] : <font color="#7D694A">ESCAPED{$privateStaticBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
8+
|---(Inherited) $protectedStaticBarTraitField [290, 319] : <font color="#7D694A">ESCAPED{$protectedStaticBarTraitField}</font><font color="#999999">:ESCAPED{int}</font>
39
|---(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>
410
|---(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>
511
|---(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>
612
|---(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>
713
|---(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>
814
|---(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>
15+
|---(Inherited) $publicFooTraitField [58, 78] : <font color="#7D694A">ESCAPED{$publicFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
16+
|---(Inherited) $privateFooTraitField [96, 117] : <font color="#7D694A">ESCAPED{$privateFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
17+
|---(Inherited) $protectedFooTraitField [137, 160] : <font color="#7D694A">ESCAPED{$protectedFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
18+
|---(Inherited) $publicStaticFooTraitField [185, 211] : <font color="#7D694A">ESCAPED{$publicStaticFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
19+
|---(Inherited) $privateStaticFooTraitField [236, 263] : <font color="#7D694A">ESCAPED{$privateStaticFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
20+
|---(Inherited) $protectedStaticFooTraitField [290, 319] : <font color="#7D694A">ESCAPED{$protectedStaticFooTraitField}</font><font color="#999999">:ESCAPED{int}</font>
921
|---(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>
1022
|---(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>
1123
|---(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>

0 commit comments

Comments
 (0)