Bug 565846 - [15] Syntax coloring for permits
Change-Id: Ie5b33136bd9da211658af48f111ddaec17ab8af9
Signed-off-by: Kalyan Prasad Tatavarthi <kalyan_prasad@in.ibm.com>
diff --git a/org.eclipse.jdt.ui/.settings/.api_filters b/org.eclipse.jdt.ui/.settings/.api_filters
index 40607c3..2036274 100644
--- a/org.eclipse.jdt.ui/.settings/.api_filters
+++ b/org.eclipse.jdt.ui/.settings/.api_filters
@@ -168,6 +168,13 @@
<message_argument value="getRestrictedIdentifierStartPosition()"/>
</message_arguments>
</filter>
+ <filter comment="This is a Java 15 preview feature" id="640712815">
+ <message_arguments>
+ <message_argument value="TypeDeclaration"/>
+ <message_argument value="PositionCollector"/>
+ <message_argument value="getRestrictedIdentifierStartPosition()"/>
+ </message_arguments>
+ </filter>
</resource>
<resource path="ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java" type="org.eclipse.jdt.internal.ui.text.JavaOutlineInformationControl$OutlineTreeViewer">
<filter id="571473929">
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
index ff8aeb3..fd41f21 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
@@ -50,6 +50,7 @@
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SimpleType;
import org.eclipse.jdt.core.dom.SuperConstructorInvocation;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
import org.eclipse.jdt.core.dom.YieldStatement;
import org.eclipse.jdt.core.manipulation.SharedASTProviderCore;
@@ -57,6 +58,7 @@
import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightingManager.HighlightedPosition;
import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightingManager.Highlighting;
import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightings.DeprecatedMemberHighlighting;
+import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightings.PermitsKeywordHighlighting;
import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightings.RecordKeywordHighlighting;
import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightings.SealedKeywordsHighlighting;
import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightings.VarKeywordHighlighting;
@@ -192,6 +194,28 @@
}
@Override
+ public boolean visit(TypeDeclaration node) {
+ try {
+ if (node.permittedTypes().size() > 0) {
+ int offset= node.getRestrictedIdentifierStartPosition();
+ int length= 7; // length of 'record'
+ if (offset > -1) {
+ for (int i= 0; i < fJobSemanticHighlightings.length; i++) {
+ SemanticHighlighting semanticHighlighting= fJobSemanticHighlightings[i];
+ if (semanticHighlighting instanceof PermitsKeywordHighlighting) {
+ addPosition(offset, length, fJobHighlightings[i]);
+ return true;
+ }
+ }
+ }
+ }
+ } catch (UnsupportedOperationException e) {
+ // do nothing
+ }
+ return true;
+ }
+
+ @Override
public boolean visit(Modifier node) {
AST ast= node.getAST();
if (ASTHelper.isSealedTypeSupportedInAST(ast)) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightings.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightings.java
index 114b84a..c9f9624 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightings.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightings.java
@@ -7,7 +7,7 @@
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
- *
+ *
* This is an implementation of an early-draft specification developed under the Java
* Community Process (JCP) and is made available for testing and evaluation purposes
* only. The code is not compatible with any specification of the JCP.
@@ -2028,6 +2028,47 @@
}
/**
+ * Semantic highlighting for 'permits' keyword.
+ */
+ static final class PermitsKeywordHighlighting extends SemanticHighlighting {
+
+ @Override
+ public String getPreferenceKey() {
+ return RECORD_KEYWORD;
+ }
+
+ @Override
+ public RGB getDefaultDefaultTextColor() {
+ return new RGB(127, 0, 85);
+ }
+
+ @Override
+ public boolean isBoldByDefault() {
+ return true;
+ }
+
+ @Override
+ public boolean isItalicByDefault() {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabledByDefault() {
+ return true;
+ }
+
+ @Override
+ public String getDisplayName() {
+ return PreferencesMessages.JavaEditorPreferencePage_recordKeyword;
+ }
+
+ @Override
+ public boolean consumes(SemanticToken token) {
+ return false;
+ }
+ }
+
+ /**
* Semantic highlighting for 'yield' keyword.
*/
static final class YieldKeywordHighlighting extends SemanticHighlighting {
@@ -2203,7 +2244,8 @@
new VarKeywordHighlighting(),
new YieldKeywordHighlighting(),
new RecordKeywordHighlighting(),
- new SealedKeywordsHighlighting()
+ new SealedKeywordsHighlighting(),
+ new PermitsKeywordHighlighting()
};
return fgSemanticHighlightings;
}