diff options
author | Jay Arthanareeswaran | 2020-09-16 03:59:22 +0000 |
---|---|---|
committer | Jay Arthanareeswaran | 2020-09-16 03:59:22 +0000 |
commit | 27b53ca171a19db4794ec310f4e339e876ea495f (patch) | |
tree | 3b12fd95b0afb9a5401d836d115751d13588c5c0 /org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java | |
parent | a8b03f929def2f6a9f479a198856e34e6cd4af34 (diff) | |
parent | 0a27063a3e6012ba850fd756f98be50be0375dc3 (diff) | |
download | eclipse.jdt.core-27b53ca171a19db4794ec310f4e339e876ea495f.tar.gz eclipse.jdt.core-27b53ca171a19db4794ec310f4e339e876ea495f.tar.xz eclipse.jdt.core-27b53ca171a19db4794ec310f4e339e876ea495f.zip |
Merge remote-tracking branch 'origin/BETA_JAVA15'
Diffstat (limited to 'org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java')
-rw-r--r-- | org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java | 139 |
1 files changed, 124 insertions, 15 deletions
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java index 68aea7e2c3..ca4d6b58f7 100644 --- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java +++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java @@ -31,16 +31,100 @@ package org.eclipse.jdt.internal.codeassist.complete; import java.util.HashSet; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.internal.compiler.*; +import org.eclipse.jdt.core.compiler.CharOperation; +import org.eclipse.jdt.internal.codeassist.impl.AssistParser; +import org.eclipse.jdt.internal.codeassist.impl.Keywords; +import org.eclipse.jdt.internal.codeassist.impl.RestrictedIdentifiers; +import org.eclipse.jdt.internal.compiler.CompilationResult; +import org.eclipse.jdt.internal.compiler.ast.AND_AND_Expression; +import org.eclipse.jdt.internal.compiler.ast.ASTNode; +import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration; +import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration; +import org.eclipse.jdt.internal.compiler.ast.AllocationExpression; +import org.eclipse.jdt.internal.compiler.ast.Annotation; +import org.eclipse.jdt.internal.compiler.ast.Argument; +import org.eclipse.jdt.internal.compiler.ast.ArrayAllocationExpression; +import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer; +import org.eclipse.jdt.internal.compiler.ast.ArrayReference; +import org.eclipse.jdt.internal.compiler.ast.AssertStatement; +import org.eclipse.jdt.internal.compiler.ast.Assignment; +import org.eclipse.jdt.internal.compiler.ast.BinaryExpression; +import org.eclipse.jdt.internal.compiler.ast.Block; +import org.eclipse.jdt.internal.compiler.ast.CaseStatement; +import org.eclipse.jdt.internal.compiler.ast.CastExpression; +import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration; +import org.eclipse.jdt.internal.compiler.ast.CompoundAssignment; +import org.eclipse.jdt.internal.compiler.ast.ConditionalExpression; +import org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration; +import org.eclipse.jdt.internal.compiler.ast.EmptyStatement; +import org.eclipse.jdt.internal.compiler.ast.EqualExpression; +import org.eclipse.jdt.internal.compiler.ast.ExplicitConstructorCall; +import org.eclipse.jdt.internal.compiler.ast.Expression; +import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration; +import org.eclipse.jdt.internal.compiler.ast.ForStatement; +import org.eclipse.jdt.internal.compiler.ast.IfStatement; +import org.eclipse.jdt.internal.compiler.ast.ImportReference; +import org.eclipse.jdt.internal.compiler.ast.Initializer; +import org.eclipse.jdt.internal.compiler.ast.InstanceOfExpression; +import org.eclipse.jdt.internal.compiler.ast.IntLiteral; +import org.eclipse.jdt.internal.compiler.ast.LocalDeclaration; +import org.eclipse.jdt.internal.compiler.ast.MarkerAnnotation; +import org.eclipse.jdt.internal.compiler.ast.MemberValuePair; +import org.eclipse.jdt.internal.compiler.ast.MessageSend; +import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration; +import org.eclipse.jdt.internal.compiler.ast.ModuleDeclaration; +import org.eclipse.jdt.internal.compiler.ast.ModuleReference; +import org.eclipse.jdt.internal.compiler.ast.NameReference; +import org.eclipse.jdt.internal.compiler.ast.NormalAnnotation; +import org.eclipse.jdt.internal.compiler.ast.OR_OR_Expression; +import org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference; +import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference; +import org.eclipse.jdt.internal.compiler.ast.PrefixExpression; +import org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression; +import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference; +import org.eclipse.jdt.internal.compiler.ast.ReferenceExpression; +import org.eclipse.jdt.internal.compiler.ast.ReturnStatement; +import org.eclipse.jdt.internal.compiler.ast.SingleNameReference; +import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference; +import org.eclipse.jdt.internal.compiler.ast.Statement; +import org.eclipse.jdt.internal.compiler.ast.StringLiteral; +import org.eclipse.jdt.internal.compiler.ast.SuperReference; +import org.eclipse.jdt.internal.compiler.ast.SwitchExpression; +import org.eclipse.jdt.internal.compiler.ast.SwitchStatement; +import org.eclipse.jdt.internal.compiler.ast.SynchronizedStatement; +import org.eclipse.jdt.internal.compiler.ast.ThisReference; +import org.eclipse.jdt.internal.compiler.ast.ThrowStatement; +import org.eclipse.jdt.internal.compiler.ast.TrueLiteral; +import org.eclipse.jdt.internal.compiler.ast.TryStatement; +import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration; +import org.eclipse.jdt.internal.compiler.ast.TypeParameter; +import org.eclipse.jdt.internal.compiler.ast.TypeReference; +import org.eclipse.jdt.internal.compiler.ast.UnaryExpression; +import org.eclipse.jdt.internal.compiler.ast.UnionTypeReference; +import org.eclipse.jdt.internal.compiler.ast.WhileStatement; +import org.eclipse.jdt.internal.compiler.ast.Wildcard; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; -import org.eclipse.jdt.internal.compiler.env.*; -import org.eclipse.jdt.internal.compiler.ast.*; -import org.eclipse.jdt.internal.compiler.parser.*; -import org.eclipse.jdt.internal.compiler.problem.*; +import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; +import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers; +import org.eclipse.jdt.internal.compiler.parser.JavadocParser; +import org.eclipse.jdt.internal.compiler.parser.Parser; +import org.eclipse.jdt.internal.compiler.parser.RecoveredAnnotation; +import org.eclipse.jdt.internal.compiler.parser.RecoveredBlock; +import org.eclipse.jdt.internal.compiler.parser.RecoveredElement; +import org.eclipse.jdt.internal.compiler.parser.RecoveredField; +import org.eclipse.jdt.internal.compiler.parser.RecoveredInitializer; +import org.eclipse.jdt.internal.compiler.parser.RecoveredLocalVariable; +import org.eclipse.jdt.internal.compiler.parser.RecoveredMethod; +import org.eclipse.jdt.internal.compiler.parser.RecoveredModule; +import org.eclipse.jdt.internal.compiler.parser.RecoveredPackageVisibilityStatement; +import org.eclipse.jdt.internal.compiler.parser.RecoveredProvidesStatement; +import org.eclipse.jdt.internal.compiler.parser.RecoveredType; +import org.eclipse.jdt.internal.compiler.parser.RecoveredUnit; +import org.eclipse.jdt.internal.compiler.parser.TerminalTokens; +import org.eclipse.jdt.internal.compiler.problem.AbortCompilation; +import org.eclipse.jdt.internal.compiler.problem.ProblemReporter; import org.eclipse.jdt.internal.compiler.util.HashtableOfObjectToInt; import org.eclipse.jdt.internal.compiler.util.Util; -import org.eclipse.jdt.core.compiler.CharOperation; -import org.eclipse.jdt.internal.codeassist.impl.*; public class CompletionParser extends AssistParser { // OWNER @@ -1567,12 +1651,21 @@ private boolean checkKeywordAndRestrictedIdentifiers() { if((this.lastModifiers & ClassFileConstants.AccFinal) == 0) { keywordsAndRestrictedIndentifiers[count++] = Keywords.INTERFACE; } - if (this.options.complianceLevel >= ClassFileConstants.JDK14 && this.options.enablePreviewFeatures == true) { + if (this.options.complianceLevel >= ClassFileConstants.JDK14 + && this.options.enablePreviewFeatures == true) { keywordsAndRestrictedIndentifiers[count++] = RestrictedIdentifiers.RECORD; } - + if (this.options.complianceLevel >= ClassFileConstants.JDK15 + && this.options.enablePreviewFeatures == true) { + boolean nonSeal = (this.lastModifiers & ExtraCompilerModifiers.AccNonSealed) != 0; + boolean seal = (this.lastModifiers & ExtraCompilerModifiers.AccSealed) != 0; + if (!nonSeal && !seal) { + keywordsAndRestrictedIndentifiers[count++] = RestrictedIdentifiers.SEALED; + keywordsAndRestrictedIndentifiers[count++] = RestrictedIdentifiers.NON_SEALED; + } + } } - if(count != 0) { + if (count != 0) { System.arraycopy(keywordsAndRestrictedIndentifiers, 0, keywordsAndRestrictedIndentifiers = new char[count][], 0, count); this.assistNode = new CompletionOnKeyword2(ident, pos, keywordsAndRestrictedIndentifiers); @@ -2146,6 +2239,11 @@ private void classHeaderExtendsOrImplements(boolean isInterface, boolean isRecor } keywords[count++] = Keywords.IMPLEMENTS; } + if (this.options.enablePreviewFeatures) { + boolean sealed = (type.modifiers & ExtraCompilerModifiers.AccSealed) != 0; + if (sealed) + keywords[count++] = RestrictedIdentifiers.PERMITS; + } System.arraycopy(keywords, 0, keywords = new char[count][], 0, count); @@ -2476,15 +2574,27 @@ protected void consumeClassHeaderExtends() { RecoveredType recoveredType = (RecoveredType)this.currentElement; /* filter out cases where scanner is still inside type header */ if (!recoveredType.foundOpeningBrace) { + char[][] keywords = new char[2][]; + int count = 0; TypeDeclaration type = recoveredType.typeDeclaration; if(type.superInterfaces == null) { - type.superclass = new CompletionOnKeyword1( + keywords[count++] = Keywords.IMPLEMENTS; + } + if (this.options.enablePreviewFeatures) { + boolean sealed = (type.modifiers & ExtraCompilerModifiers.AccSealed) != 0; + if (sealed) + keywords[count++] = RestrictedIdentifiers.PERMITS; + } + System.arraycopy(keywords, 0, keywords = new char[count][], 0, count); + if(count > 0) { + CompletionOnKeyword1 completionOnKeyword = new CompletionOnKeyword1( this.identifierStack[ptr], this.identifierPositionStack[ptr], - Keywords.IMPLEMENTS); + keywords); + type.superclass = completionOnKeyword; type.superclass.bits |= ASTNode.IsSuperType; - this.assistNode = type.superclass; - this.lastCheckPoint = type.superclass.sourceEnd + 1; + this.assistNode = completionOnKeyword; + this.lastCheckPoint = completionOnKeyword.sourceEnd + 1; } } } @@ -2518,7 +2628,6 @@ protected void consumeClassTypeElt() { super.consumeClassTypeElt(); popElement(K_NEXT_TYPEREF_IS_EXCEPTION); } - @Override protected void consumeCompilationUnit() { this.javadoc = null; |