Merge branch 'master' of github.com:JetBrains/kotlin
This commit is contained in:
@@ -322,6 +322,7 @@ public interface Errors {
|
||||
DiagnosticFactory<JetSimpleNameExpression> AMBIGUOUS_LABEL = DiagnosticFactory.create(ERROR, "Ambiguous label");
|
||||
DiagnosticFactory1<PsiElement, String> UNSUPPORTED = DiagnosticFactory1.create(ERROR, "Unsupported [{0}]");
|
||||
DiagnosticFactory1<PsiElement, JetType> UNNECESSARY_SAFE_CALL = DiagnosticFactory1.create(WARNING, "Unnecessary safe call on a non-null receiver of type {0}");
|
||||
DiagnosticFactory1<PsiElement, JetType> UNNECESSARY_NOT_NULL_ASSERTION = DiagnosticFactory1.create(WARNING, "Unnecessary non-null assertion (!!) on a non-null receiver of type {0}");
|
||||
DiagnosticFactory2<JetSimpleNameExpression, JetTypeConstraint, JetTypeParameterListOwner> NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER = DiagnosticFactory2.create(ERROR, "{0} does not refer to a type parameter of {1}", new Renderer<JetTypeConstraint>() {
|
||||
@NotNull
|
||||
@Override
|
||||
|
||||
@@ -53,7 +53,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
FUN_KEYWORD, FOR_KEYWORD, NULL_KEYWORD,
|
||||
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD,
|
||||
CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD, TRY_KEYWORD, ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD,
|
||||
WHEN_KEYWORD, RBRACKET, RBRACE, RPAR, PLUSPLUS, MINUSMINUS,
|
||||
WHEN_KEYWORD, RBRACKET, RBRACE, RPAR, PLUSPLUS, MINUSMINUS, EXCLEXCL,
|
||||
// MUL,
|
||||
PLUS, MINUS, EXCL, DIV, PERC, LTEQ,
|
||||
// TODO GTEQ, foo<bar, baz>=x
|
||||
@@ -64,7 +64,9 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
|
||||
/*package*/ static final TokenSet EXPRESSION_FIRST = TokenSet.create(
|
||||
// Prefix
|
||||
MINUS, PLUS, MINUSMINUS, PLUSPLUS, EXCL, LBRACKET, LABEL_IDENTIFIER, AT, ATAT,
|
||||
MINUS, PLUS, MINUSMINUS, PLUSPLUS,
|
||||
EXCL, EXCLEXCL, // Joining complex tokens makes it necessary to put EXCLEXCL here
|
||||
LBRACKET, LABEL_IDENTIFIER, AT, ATAT,
|
||||
// Atomic
|
||||
|
||||
LPAR, // parenthesized
|
||||
@@ -126,7 +128,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
|
||||
@SuppressWarnings({"UnusedDeclaration"})
|
||||
private enum Precedence {
|
||||
POSTFIX(PLUSPLUS, MINUSMINUS,
|
||||
POSTFIX(PLUSPLUS, MINUSMINUS, EXCLEXCL,
|
||||
// HASH,
|
||||
DOT, SAFE_ACCESS), // typeArguments? valueArguments : typeArguments : arrayAccess
|
||||
|
||||
@@ -235,7 +237,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
opSet.removeAll(usedSet);
|
||||
assert false : opSet;
|
||||
}
|
||||
assert usedSet.size() == opSet.size();
|
||||
assert usedSet.size() == opSet.size() : "Either some ops are unused, or something a non-op is used";
|
||||
|
||||
usedSet.removeAll(opSet);
|
||||
|
||||
@@ -325,24 +327,34 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
*/
|
||||
private void parsePrefixExpression() {
|
||||
// System.out.println("pre at " + myBuilder.getTokenText());
|
||||
|
||||
if (at(LBRACKET)) {
|
||||
if (!parseLocalDeclaration()) {
|
||||
PsiBuilder.Marker expression = mark();
|
||||
myJetParsing.parseAnnotations(false);
|
||||
parsePrefixExpression();
|
||||
expression.done(ANNOTATED_EXPRESSION);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
} else if (atSet(Precedence.PREFIX.getOperations())) {
|
||||
PsiBuilder.Marker expression = mark();
|
||||
}
|
||||
else {
|
||||
myBuilder.disableJoiningComplexTokens();
|
||||
if (atSet(Precedence.PREFIX.getOperations())) {
|
||||
PsiBuilder.Marker expression = mark();
|
||||
|
||||
parseOperationReference();
|
||||
parseOperationReference();
|
||||
|
||||
parsePrefixExpression();
|
||||
expression.done(PREFIX_EXPRESSION);
|
||||
} else {
|
||||
parsePostfixExpression();
|
||||
myBuilder.restoreJoiningComplexTokensState();
|
||||
|
||||
parsePrefixExpression();
|
||||
expression.done(PREFIX_EXPRESSION);
|
||||
}
|
||||
else {
|
||||
myBuilder.restoreJoiningComplexTokensState();
|
||||
parsePostfixExpression();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,7 +362,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
* atomicExpression postfixUnaryOperation?
|
||||
*
|
||||
* postfixUnaryOperation
|
||||
* : "++" : "--"
|
||||
* : "++" : "--" : "!!"
|
||||
* : typeArguments? valueArguments (getEntryPoint? functionLiteral)
|
||||
* : typeArguments (getEntryPoint? functionLiteral)
|
||||
* : arrayAccess
|
||||
|
||||
+5
-1
@@ -32,7 +32,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
||||
* @author abreslav
|
||||
*/
|
||||
public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter implements SemanticWhitespaceAwarePsiBuilder {
|
||||
private final TokenSet complexTokens = TokenSet.create(SAFE_ACCESS, ELVIS);
|
||||
private final TokenSet complexTokens = TokenSet.create(SAFE_ACCESS, ELVIS, EXCLEXCL);
|
||||
private final Stack<Boolean> joinComplexTokens = new Stack<Boolean>();
|
||||
|
||||
private final Stack<Boolean> newlinesEnabled = new Stack<Boolean>();
|
||||
@@ -126,6 +126,10 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
|
||||
if (nextRawToken == DOT) return SAFE_ACCESS;
|
||||
if (nextRawToken == COLON) return ELVIS;
|
||||
}
|
||||
else if (rawTokenType == EXCL) {
|
||||
IElementType nextRawToken = rawLookup(rawLookupSteps);
|
||||
if (nextRawToken == EXCL) return EXCLEXCL;
|
||||
}
|
||||
return rawTokenType;
|
||||
}
|
||||
|
||||
|
||||
+52
-15
@@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.calls.CallMaker;
|
||||
import org.jetbrains.jet.lang.resolve.calls.OverloadResolutionResults;
|
||||
import org.jetbrains.jet.lang.resolve.calls.OverloadResolutionResultsUtil;
|
||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowValueFactory;
|
||||
import org.jetbrains.jet.lang.resolve.constants.*;
|
||||
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -661,7 +662,10 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
||||
public JetType visitUnaryExpression(JetUnaryExpression expression, ExpressionTypingContext context, boolean isStatement) {
|
||||
JetExpression baseExpression = expression.getBaseExpression();
|
||||
if (baseExpression == null) return null;
|
||||
|
||||
JetSimpleNameExpression operationSign = expression.getOperationReference();
|
||||
|
||||
// If it's a labeled expression
|
||||
if (JetTokens.LABELS.contains(operationSign.getReferencedNameElementType())) {
|
||||
String referencedName = operationSign.getReferencedName();
|
||||
referencedName = referencedName == null ? " <?>" : referencedName;
|
||||
@@ -672,42 +676,62 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
||||
context.labelResolver.exitLabeledElement(baseExpression);
|
||||
return DataFlowUtils.checkType(type, expression, context);
|
||||
}
|
||||
|
||||
IElementType operationType = operationSign.getReferencedNameElementType();
|
||||
|
||||
// Type check the base expression
|
||||
JetType type = facade.getType(baseExpression, context.replaceExpectedType(NO_EXPECTED_TYPE));
|
||||
if (type == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Special case for expr!!
|
||||
if (operationType == JetTokens.EXCLEXCL) {
|
||||
JetType result;
|
||||
if (isKnownToBeNotNull(baseExpression, context)) {
|
||||
context.trace.report(UNNECESSARY_NOT_NULL_ASSERTION.on(operationSign, type));
|
||||
result = type;
|
||||
}
|
||||
else {
|
||||
result = TypeUtils.makeNotNullable(type);
|
||||
}
|
||||
return DataFlowUtils.checkType(result, expression, context);
|
||||
}
|
||||
|
||||
// Conventions for unary operations
|
||||
String name = OperatorConventions.UNARY_OPERATION_NAMES.get(operationType);
|
||||
if (name == null) {
|
||||
context.trace.report(UNSUPPORTED.on(operationSign, "visitUnaryExpression"));
|
||||
return null;
|
||||
}
|
||||
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(context.trace);
|
||||
BindingTrace initialTrace = context.trace;
|
||||
context = context.replaceBindingTrace(temporaryTrace);
|
||||
JetType type = facade.getType(baseExpression, context.replaceExpectedType(NO_EXPECTED_TYPE));
|
||||
if (type == null) {
|
||||
temporaryTrace.commit();
|
||||
return null;
|
||||
}
|
||||
|
||||
// a[i]++/-- takes special treatment because it is actually let j = i, arr = a in arr.set(j, a.get(j).inc())
|
||||
if ((operationType == JetTokens.PLUSPLUS || operationType == JetTokens.MINUSMINUS) && baseExpression instanceof JetArrayAccessExpression) {
|
||||
JetExpression stubExpression = ExpressionTypingUtils.createStubExpressionOfNecessaryType(baseExpression.getProject(), type, context.trace);
|
||||
resolveArrayAccessSetMethod((JetArrayAccessExpression) baseExpression, stubExpression, context.replaceExpectedType(NO_EXPECTED_TYPE).replaceBindingTrace(TemporaryBindingTrace.create(initialTrace)), context.trace);
|
||||
resolveArrayAccessSetMethod((JetArrayAccessExpression) baseExpression,
|
||||
stubExpression,
|
||||
context.replaceExpectedType(NO_EXPECTED_TYPE).replaceBindingTrace(TemporaryBindingTrace.create(context.trace)),
|
||||
context.trace);
|
||||
}
|
||||
|
||||
ExpressionReceiver receiver = new ExpressionReceiver(baseExpression, type);
|
||||
|
||||
OverloadResolutionResults<FunctionDescriptor> functionDescriptor = context.resolveCallWithGivenNameToDescriptor(
|
||||
// Resolve the operation reference
|
||||
OverloadResolutionResults<FunctionDescriptor> resolutionResults = context.resolveCallWithGivenNameToDescriptor(
|
||||
CallMaker.makeCall(receiver, expression),
|
||||
expression.getOperationReference(),
|
||||
name);
|
||||
|
||||
if (!functionDescriptor.isSuccess()) {
|
||||
temporaryTrace.commit();
|
||||
if (!resolutionResults.isSuccess()) {
|
||||
return null;
|
||||
}
|
||||
JetType returnType = functionDescriptor.getResultingDescriptor().getReturnType();
|
||||
|
||||
// Computing the return type
|
||||
JetType returnType = resolutionResults.getResultingDescriptor().getReturnType();
|
||||
JetType result;
|
||||
if (operationType == JetTokens.PLUSPLUS || operationType == JetTokens.MINUSMINUS) {
|
||||
if (JetTypeChecker.INSTANCE.isSubtypeOf(returnType, JetStandardClasses.getUnitType())) {
|
||||
result = JetStandardClasses.getUnitType();
|
||||
result = ErrorUtils.createErrorType("Unit");
|
||||
context.trace.report(INC_DEC_SHOULD_NOT_RETURN_UNIT.on(operationSign));
|
||||
}
|
||||
else {
|
||||
@@ -727,10 +751,23 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
||||
else {
|
||||
result = returnType;
|
||||
}
|
||||
temporaryTrace.commit();
|
||||
return DataFlowUtils.checkType(result, expression, context);
|
||||
}
|
||||
|
||||
private boolean isKnownToBeNotNull(JetExpression expression, ExpressionTypingContext context) {
|
||||
JetType type = context.trace.get(EXPRESSION_TYPE, expression);
|
||||
assert type != null : "This method is only supposed to be called when the type is not null";
|
||||
if (!type.isNullable()) return true;
|
||||
List<JetType> possibleTypes = context.dataFlowInfo
|
||||
.getPossibleTypes(DataFlowValueFactory.INSTANCE.createDataFlowValue(expression, type, context.trace.getBindingContext()));
|
||||
for (JetType possibleType : possibleTypes) {
|
||||
if (!possibleType.isNullable()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void checkLValue(BindingTrace trace, JetExpression expression) {
|
||||
checkLValue(trace, expression, false);
|
||||
}
|
||||
|
||||
@@ -164,6 +164,10 @@ LONG_TEMPLATE_ENTRY_END=\}
|
||||
|
||||
// (Nested) comments
|
||||
|
||||
"/**/" {
|
||||
return JetTokens.BLOCK_COMMENT;
|
||||
}
|
||||
|
||||
"/**" {
|
||||
pushState(DOC_COMMENT);
|
||||
commentDepth = 0;
|
||||
@@ -266,6 +270,7 @@ LONG_TEMPLATE_ENTRY_END=\}
|
||||
">=" { return JetTokens.GTEQ ; }
|
||||
"==" { return JetTokens.EQEQ ; }
|
||||
"!=" { return JetTokens.EXCLEQ ; }
|
||||
//"!!" { return JetTokens.EXCLEXCL ; }
|
||||
"&&" { return JetTokens.ANDAND ; }
|
||||
"||" { return JetTokens.OROR ; }
|
||||
//"?." { return JetTokens.SAFE_ACCESS;}
|
||||
|
||||
@@ -107,6 +107,7 @@ public interface JetTokens {
|
||||
JetToken EXCLEQEQEQ = new JetToken("EXCLEQEQEQ");
|
||||
JetToken EQEQ = new JetToken("EQEQ");
|
||||
JetToken EXCLEQ = new JetToken("EXCLEQ");
|
||||
JetToken EXCLEXCL = new JetToken("EXCLEXCL");
|
||||
JetToken ANDAND = new JetToken("ANDAND");
|
||||
JetToken OROR = new JetToken("OROR");
|
||||
JetToken SAFE_ACCESS = new JetToken("SAFE_ACCESS");
|
||||
@@ -184,7 +185,7 @@ public interface JetTokens {
|
||||
TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT);
|
||||
|
||||
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
|
||||
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, MUL, PLUS,
|
||||
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
|
||||
MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
|
||||
SAFE_ACCESS, ELVIS,
|
||||
// MAP, FILTER,
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
/* The following code was generated by JFlex 1.4.3 on 3/21/12 3:48 PM */
|
||||
/* The following code was generated by JFlex 1.4.3 on 3/23/12 10:24 AM */
|
||||
|
||||
package org.jetbrains.jet.lexer;
|
||||
|
||||
import com.intellij.lexer.FlexLexer;
|
||||
import com.intellij.psi.TokenType;
|
||||
import java.util.*;
|
||||
import com.intellij.lexer.*;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
|
||||
import java.util.Stack;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
|
||||
|
||||
/**
|
||||
* This class is a scanner generated by
|
||||
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
|
||||
* on 3/21/12 3:48 PM from the specification file
|
||||
* on 3/23/12 10:24 AM from the specification file
|
||||
* <tt>/Users/abreslav/work/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex</tt>
|
||||
*/
|
||||
class _JetLexer implements FlexLexer {
|
||||
@@ -136,14 +137,14 @@ class _JetLexer implements FlexLexer {
|
||||
"\1\103\1\104\1\44\1\3\2\0\1\105\4\0\1\106"+
|
||||
"\4\3\1\107\10\3\1\110\4\3\1\111\1\112\2\3"+
|
||||
"\1\113\1\114\1\115\1\116\1\117\1\120\1\121\1\122"+
|
||||
"\2\0\2\40\1\45\1\46\1\44\1\0\1\123\1\3"+
|
||||
"\1\124\1\3\1\125\4\3\1\126\1\127\4\3\1\130"+
|
||||
"\1\3\1\131\1\132\1\77\1\0\1\133\1\134\1\135"+
|
||||
"\1\136\1\3\1\137\3\3\1\140\1\141\1\142\1\0"+
|
||||
"\1\3\1\143\1\3\1\144\1\3\1\145\1\146";
|
||||
"\2\0\2\40\1\45\1\46\1\123\1\44\1\0\1\124"+
|
||||
"\1\3\1\125\1\3\1\126\4\3\1\127\1\130\4\3"+
|
||||
"\1\131\1\3\1\132\1\133\1\77\1\0\1\134\1\135"+
|
||||
"\1\136\1\137\1\3\1\140\3\3\1\141\1\142\1\143"+
|
||||
"\1\0\1\3\1\144\1\3\1\145\1\3\1\146\1\147";
|
||||
|
||||
private static int [] zzUnpackAction() {
|
||||
int [] result = new int[229];
|
||||
int [] result = new int[230];
|
||||
int offset = 0;
|
||||
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
|
||||
return result;
|
||||
@@ -186,20 +187,20 @@ class _JetLexer implements FlexLexer {
|
||||
"\0\u1680\0\u0180\0\u0180\0\u16c0\0\u0180\0\u0180\0\u0180\0\u0180"+
|
||||
"\0\u0180\0\u1700\0\u1740\0\u0180\0\u0180\0\u1780\0\u17c0\0\u1800"+
|
||||
"\0\u1840\0\u0180\0\u0180\0\u0180\0\u1880\0\u0180\0\u18c0\0\u1900"+
|
||||
"\0\u0180\0\u1940\0\u1980\0\u19c0\0\u1a00\0\u0180\0\u1a40\0\u1a80"+
|
||||
"\0\u1ac0\0\u1b00\0\u0200\0\u1b40\0\u1b80\0\u1bc0\0\u1c00\0\u1c40"+
|
||||
"\0\u1c80\0\u1cc0\0\u1d00\0\u0180\0\u1d40\0\u1d80\0\u1dc0\0\u1e00"+
|
||||
"\0\u0200\0\u0200\0\u1e40\0\u1e80\0\u0200\0\u0200\0\u1ec0\0\u1ec0"+
|
||||
"\0\u0180\0\u0180\0\u0180\0\u0180\0\u1f00\0\u1f40\0\u0180\0\u1f80"+
|
||||
"\0\u0180\0\u0180\0\u1fc0\0\u1880\0\u0200\0\u2000\0\u0200\0\u2040"+
|
||||
"\0\u0200\0\u2080\0\u20c0\0\u2100\0\u2140\0\u0200\0\u0200\0\u2180"+
|
||||
"\0\u21c0\0\u2200\0\u2240\0\u0200\0\u2280\0\u0200\0\u0180\0\u0180"+
|
||||
"\0\u22c0\0\u0c00\0\u0200\0\u0200\0\u0200\0\u2300\0\u0200\0\u2340"+
|
||||
"\0\u2380\0\u23c0\0\u0200\0\u0200\0\u0200\0\u2400\0\u2440\0\u0200"+
|
||||
"\0\u2480\0\u0200\0\u24c0\0\u0200\0\u0200";
|
||||
"\0\u1940\0\u1980\0\u19c0\0\u1a00\0\u1a40\0\u0180\0\u1a80\0\u1ac0"+
|
||||
"\0\u1b00\0\u1b40\0\u0200\0\u1b80\0\u1bc0\0\u1c00\0\u1c40\0\u1c80"+
|
||||
"\0\u1cc0\0\u1d00\0\u1d40\0\u0180\0\u1d80\0\u1dc0\0\u1e00\0\u1e40"+
|
||||
"\0\u0200\0\u0200\0\u1e80\0\u1ec0\0\u0200\0\u0200\0\u1f00\0\u1f00"+
|
||||
"\0\u0180\0\u0180\0\u0180\0\u0180\0\u1f40\0\u1f80\0\u0180\0\u1fc0"+
|
||||
"\0\u0180\0\u0180\0\u0180\0\u2000\0\u1880\0\u0200\0\u2040\0\u0200"+
|
||||
"\0\u2080\0\u0200\0\u20c0\0\u2100\0\u2140\0\u2180\0\u0200\0\u0200"+
|
||||
"\0\u21c0\0\u2200\0\u2240\0\u2280\0\u0200\0\u22c0\0\u0200\0\u0180"+
|
||||
"\0\u0180\0\u2300\0\u0c00\0\u0200\0\u0200\0\u0200\0\u2340\0\u0200"+
|
||||
"\0\u2380\0\u23c0\0\u2400\0\u0200\0\u0200\0\u0200\0\u2440\0\u2480"+
|
||||
"\0\u0200\0\u24c0\0\u0200\0\u2500\0\u0200\0\u0200";
|
||||
|
||||
private static int [] zzUnpackRowMap() {
|
||||
int [] result = new int[229];
|
||||
int [] result = new int[230];
|
||||
int offset = 0;
|
||||
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
|
||||
return result;
|
||||
@@ -374,109 +375,109 @@ class _JetLexer implements FlexLexer {
|
||||
"\5\0\3\77\1\0\1\77\1\0\1\77\3\0\1\77"+
|
||||
"\2\0\2\77\1\270\1\77\1\0\22\77\22\0\1\215"+
|
||||
"\11\0\1\215\64\0\6\217\1\271\1\0\70\217\6\220"+
|
||||
"\1\272\1\0\70\220\1\0\1\125\11\0\1\125\65\0"+
|
||||
"\2\273\10\0\1\273\1\0\1\273\1\214\1\273\15\0"+
|
||||
"\1\273\2\0\1\273\1\0\1\273\3\0\1\273\3\0"+
|
||||
"\1\273\3\0\1\273\22\0\1\215\11\0\1\215\4\0"+
|
||||
"\1\274\44\0\1\274\30\0\1\214\62\0\2\11\1\0"+
|
||||
"\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
|
||||
"\1\11\2\0\3\11\1\275\1\0\22\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\1\11\1\276\20\11"+
|
||||
"\1\272\1\0\70\220\12\0\1\273\66\0\1\125\11\0"+
|
||||
"\1\125\65\0\2\274\10\0\1\274\1\0\1\274\1\214"+
|
||||
"\1\274\15\0\1\274\2\0\1\274\1\0\1\274\3\0"+
|
||||
"\1\274\3\0\1\274\3\0\1\274\22\0\1\215\11\0"+
|
||||
"\1\215\4\0\1\275\44\0\1\275\30\0\1\214\62\0"+
|
||||
"\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
|
||||
"\1\11\3\0\1\11\2\0\3\11\1\276\1\0\22\11"+
|
||||
"\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\3\11"+
|
||||
"\1\277\16\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\2\11"+
|
||||
"\1\300\1\11\1\0\22\11\22\0\2\11\1\0\2\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\1\11"+
|
||||
"\1\277\20\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
|
||||
"\1\0\3\11\1\300\16\11\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
|
||||
"\2\0\4\11\1\0\3\11\1\301\16\11\22\0\2\11"+
|
||||
"\2\0\2\11\1\301\1\11\1\0\22\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\3\11\1\302\16\11"+
|
||||
"\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\1\303\3\11\1\0"+
|
||||
"\22\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
|
||||
"\1\11\1\0\1\11\3\0\1\11\2\0\3\11\1\304"+
|
||||
"\1\0\22\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
|
||||
"\1\0\3\11\1\305\16\11\22\0\2\11\1\0\2\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\3\11"+
|
||||
"\1\303\16\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\1\304"+
|
||||
"\3\11\1\0\22\11\22\0\2\11\1\0\2\11\5\0"+
|
||||
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
|
||||
"\3\11\1\305\1\0\22\11\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
|
||||
"\2\0\4\11\1\0\14\11\1\306\5\11\22\0\2\11"+
|
||||
"\2\0\4\11\1\0\3\11\1\306\16\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\3\11\1\307\16\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\14\11\1\307\5\11"+
|
||||
"\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\6\11"+
|
||||
"\1\310\13\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\311\2\0\4\11"+
|
||||
"\1\0\22\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\3\11"+
|
||||
"\1\310\16\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
|
||||
"\1\0\5\11\1\312\14\11\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
|
||||
"\2\0\4\11\1\0\14\11\1\313\5\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\2\11\1\314\17\11"+
|
||||
"\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\3\11\1\315\1\0"+
|
||||
"\22\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
|
||||
"\1\11\1\0\1\11\3\0\1\11\2\0\3\11\1\316"+
|
||||
"\1\0\22\11\22\0\2\317\1\0\2\317\5\0\3\317"+
|
||||
"\1\0\1\317\1\0\1\317\3\0\1\317\2\0\4\317"+
|
||||
"\1\0\22\317\21\0\6\265\1\320\1\0\70\265\1\0"+
|
||||
"\2\321\10\0\1\321\1\0\1\321\1\0\1\321\15\0"+
|
||||
"\1\321\2\0\1\321\1\0\1\321\3\0\1\321\3\0"+
|
||||
"\1\321\3\0\1\321\22\0\2\77\1\0\2\77\5\0"+
|
||||
"\3\77\1\0\1\77\1\0\1\77\3\0\1\77\2\0"+
|
||||
"\3\77\1\322\1\0\22\77\22\0\2\273\10\0\1\273"+
|
||||
"\1\0\1\273\1\0\1\273\1\0\1\224\13\0\1\273"+
|
||||
"\2\0\1\273\1\224\1\273\3\0\1\273\3\0\1\273"+
|
||||
"\3\0\1\273\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
|
||||
"\1\0\13\11\1\323\6\11\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
|
||||
"\2\0\1\324\3\11\1\0\22\11\22\0\2\11\1\0"+
|
||||
"\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
|
||||
"\1\11\2\0\4\11\1\0\10\11\1\325\11\11\22\0"+
|
||||
"\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
|
||||
"\1\11\3\0\1\11\2\0\2\11\1\326\1\11\1\0"+
|
||||
"\22\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
|
||||
"\1\11\1\0\1\11\3\0\1\11\2\0\3\11\1\327"+
|
||||
"\1\0\22\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\4\11"+
|
||||
"\1\0\1\330\21\11\22\0\2\11\1\0\2\11\5\0"+
|
||||
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
|
||||
"\4\11\1\0\5\11\1\331\14\11\22\0\2\11\1\0"+
|
||||
"\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
|
||||
"\1\11\2\0\4\11\1\0\10\11\1\332\11\11\22\0"+
|
||||
"\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
|
||||
"\1\11\3\0\1\11\2\0\4\11\1\0\6\11\1\333"+
|
||||
"\13\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
|
||||
"\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
|
||||
"\3\11\1\334\16\11\22\0\2\11\1\0\2\11\5\0"+
|
||||
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
|
||||
"\4\11\1\0\3\11\1\335\16\11\22\0\2\336\10\0"+
|
||||
"\1\336\1\0\1\336\1\0\1\336\15\0\1\336\2\0"+
|
||||
"\1\336\1\0\1\336\3\0\1\336\3\0\1\336\3\0"+
|
||||
"\1\336\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
|
||||
"\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
|
||||
"\2\11\1\337\17\11\22\0\2\11\1\0\2\11\5\0"+
|
||||
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
|
||||
"\1\340\3\11\1\0\22\11\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
|
||||
"\2\0\4\11\1\0\7\11\1\341\12\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\2\11\1\342\17\11"+
|
||||
"\22\0\2\205\10\0\1\205\1\0\1\205\1\0\1\205"+
|
||||
"\15\0\1\205\2\0\1\205\1\0\1\205\3\0\1\205"+
|
||||
"\3\0\1\205\3\0\1\205\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\343"+
|
||||
"\1\0\6\11\1\311\13\11\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\312"+
|
||||
"\2\0\4\11\1\0\22\11\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
|
||||
"\2\0\4\11\1\0\3\11\1\344\16\11\22\0\2\11"+
|
||||
"\2\0\4\11\1\0\5\11\1\313\14\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\14\11\1\314\5\11"+
|
||||
"\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\2\11"+
|
||||
"\1\315\17\11\22\0\2\11\1\0\2\11\5\0\3\11"+
|
||||
"\1\0\1\11\1\0\1\11\3\0\1\11\2\0\3\11"+
|
||||
"\1\316\1\0\22\11\22\0\2\11\1\0\2\11\5\0"+
|
||||
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
|
||||
"\3\11\1\317\1\0\22\11\22\0\2\320\1\0\2\320"+
|
||||
"\5\0\3\320\1\0\1\320\1\0\1\320\3\0\1\320"+
|
||||
"\2\0\4\320\1\0\22\320\21\0\6\265\1\321\1\0"+
|
||||
"\70\265\1\0\2\322\10\0\1\322\1\0\1\322\1\0"+
|
||||
"\1\322\15\0\1\322\2\0\1\322\1\0\1\322\3\0"+
|
||||
"\1\322\3\0\1\322\3\0\1\322\22\0\2\77\1\0"+
|
||||
"\2\77\5\0\3\77\1\0\1\77\1\0\1\77\3\0"+
|
||||
"\1\77\2\0\3\77\1\323\1\0\22\77\22\0\2\274"+
|
||||
"\10\0\1\274\1\0\1\274\1\0\1\274\1\0\1\224"+
|
||||
"\13\0\1\274\2\0\1\274\1\224\1\274\3\0\1\274"+
|
||||
"\3\0\1\274\3\0\1\274\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
|
||||
"\2\0\4\11\1\0\13\11\1\324\6\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\1\325\3\11\1\0\22\11\22\0"+
|
||||
"\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
|
||||
"\1\11\3\0\1\11\2\0\4\11\1\0\10\11\1\326"+
|
||||
"\11\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
|
||||
"\1\11\1\0\1\11\3\0\1\11\2\0\2\11\1\327"+
|
||||
"\1\11\1\0\22\11\22\0\2\11\1\0\2\11\5\0"+
|
||||
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
|
||||
"\3\11\1\330\1\0\22\11\22\0\2\11\1\0\2\11"+
|
||||
"\5\0\3\11\1\0\1\11\1\0\1\11\3\0\1\11"+
|
||||
"\2\0\4\11\1\0\1\331\21\11\22\0\2\11\1\0"+
|
||||
"\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
|
||||
"\1\11\2\0\4\11\1\0\5\11\1\332\14\11\22\0"+
|
||||
"\2\11\1\0\2\11\5\0\3\11\1\0\1\11\1\0"+
|
||||
"\1\11\3\0\1\11\2\0\4\11\1\0\10\11\1\333"+
|
||||
"\11\11\22\0\2\11\1\0\2\11\5\0\3\11\1\0"+
|
||||
"\1\11\1\0\1\11\3\0\1\11\2\0\4\11\1\0"+
|
||||
"\6\11\1\334\13\11\22\0\2\11\1\0\2\11\5\0"+
|
||||
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
|
||||
"\4\11\1\0\3\11\1\335\16\11\22\0\2\11\1\0"+
|
||||
"\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
|
||||
"\1\11\2\0\4\11\1\0\3\11\1\336\16\11\22\0"+
|
||||
"\2\337\10\0\1\337\1\0\1\337\1\0\1\337\15\0"+
|
||||
"\1\337\2\0\1\337\1\0\1\337\3\0\1\337\3\0"+
|
||||
"\1\337\3\0\1\337\22\0\2\11\1\0\2\11\5\0"+
|
||||
"\3\11\1\0\1\11\1\0\1\11\3\0\1\11\2\0"+
|
||||
"\4\11\1\0\2\11\1\340\17\11\22\0\2\11\1\0"+
|
||||
"\2\11\5\0\3\11\1\0\1\11\1\0\1\11\3\0"+
|
||||
"\1\11\2\0\1\341\3\11\1\0\22\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\7\11\1\342\12\11"+
|
||||
"\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\2\11"+
|
||||
"\1\343\17\11\22\0\2\205\10\0\1\205\1\0\1\205"+
|
||||
"\1\0\1\205\15\0\1\205\2\0\1\205\1\0\1\205"+
|
||||
"\3\0\1\205\3\0\1\205\3\0\1\205\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\344\2\0\4\11\1\0\22\11\22\0\2\11"+
|
||||
"\1\0\2\11\5\0\3\11\1\0\1\11\1\0\1\11"+
|
||||
"\3\0\1\11\2\0\4\11\1\0\3\11\1\345\16\11"+
|
||||
"\21\0";
|
||||
"\22\0\2\11\1\0\2\11\5\0\3\11\1\0\1\11"+
|
||||
"\1\0\1\11\3\0\1\11\2\0\4\11\1\0\3\11"+
|
||||
"\1\346\16\11\21\0";
|
||||
|
||||
private static int [] zzUnpackTrans() {
|
||||
int [] result = new int[9472];
|
||||
int [] result = new int[9536];
|
||||
int offset = 0;
|
||||
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
|
||||
return result;
|
||||
@@ -524,12 +525,12 @@ class _JetLexer implements FlexLexer {
|
||||
"\5\11\1\1\1\0\7\1\1\11\20\1\1\0\1\1"+
|
||||
"\1\0\1\11\1\0\2\11\1\1\5\11\1\1\1\0"+
|
||||
"\2\11\1\1\2\0\1\1\3\11\1\1\1\11\2\0"+
|
||||
"\1\11\4\0\1\11\15\1\1\11\14\1\4\11\2\0"+
|
||||
"\1\11\1\1\2\11\1\1\1\0\22\1\2\11\1\0"+
|
||||
"\1\1\4\0\1\11\15\1\1\11\14\1\4\11\2\0"+
|
||||
"\1\11\1\1\3\11\1\1\1\0\22\1\2\11\1\0"+
|
||||
"\14\1\1\0\7\1";
|
||||
|
||||
private static int [] zzUnpackAttribute() {
|
||||
int [] result = new int[229];
|
||||
int [] result = new int[230];
|
||||
int offset = 0;
|
||||
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
|
||||
return result;
|
||||
@@ -621,11 +622,6 @@ class _JetLexer implements FlexLexer {
|
||||
yybegin(state.state);
|
||||
}
|
||||
|
||||
private boolean atCommentState() {
|
||||
int state = yystate();
|
||||
return state == BLOCK_COMMENT || state == DOC_COMMENT;
|
||||
}
|
||||
|
||||
private IElementType commentStateToTokenType(int state) {
|
||||
switch (state) {
|
||||
case BLOCK_COMMENT:
|
||||
@@ -637,10 +633,6 @@ class _JetLexer implements FlexLexer {
|
||||
}
|
||||
}
|
||||
|
||||
void p(Object o) {
|
||||
System.out.println(o);
|
||||
}
|
||||
|
||||
|
||||
_JetLexer(java.io.Reader in) {
|
||||
this.zzReader = in;
|
||||
@@ -892,23 +884,23 @@ class _JetLexer implements FlexLexer {
|
||||
case 3:
|
||||
{ return JetTokens.IDENTIFIER;
|
||||
}
|
||||
case 103: break;
|
||||
case 104: break;
|
||||
case 10:
|
||||
{ pushState(STRING); return JetTokens.OPEN_QUOTE;
|
||||
}
|
||||
case 104: break;
|
||||
case 105: break;
|
||||
case 74:
|
||||
{ return JetTokens.FOR_KEYWORD ;
|
||||
}
|
||||
case 105: break;
|
||||
case 100:
|
||||
case 106: break;
|
||||
case 101:
|
||||
{ return JetTokens.RETURN_KEYWORD ;
|
||||
}
|
||||
case 106: break;
|
||||
case 86:
|
||||
case 107: break;
|
||||
case 87:
|
||||
{ return JetTokens.NULL_KEYWORD ;
|
||||
}
|
||||
case 107: break;
|
||||
case 108: break;
|
||||
case 35:
|
||||
{ if (lBraceCount == 0) {
|
||||
popState();
|
||||
@@ -917,159 +909,159 @@ class _JetLexer implements FlexLexer {
|
||||
lBraceCount--;
|
||||
return JetTokens.RBRACE;
|
||||
}
|
||||
case 108: break;
|
||||
case 109: break;
|
||||
case 15:
|
||||
{ return JetTokens.LT ;
|
||||
}
|
||||
case 109: break;
|
||||
case 110: break;
|
||||
case 52:
|
||||
{ return JetTokens.DO_KEYWORD ;
|
||||
}
|
||||
case 110: break;
|
||||
case 111: break;
|
||||
case 20:
|
||||
{ return JetTokens.PLUS ;
|
||||
}
|
||||
case 111: break;
|
||||
case 112: break;
|
||||
case 58:
|
||||
{ return JetTokens.PLUSEQ ;
|
||||
}
|
||||
case 112: break;
|
||||
case 91:
|
||||
case 113: break;
|
||||
case 92:
|
||||
{ popState(); return JetTokens.THIS_KEYWORD;
|
||||
}
|
||||
case 113: break;
|
||||
case 114: break;
|
||||
case 28:
|
||||
{ return JetTokens.COMMA ;
|
||||
}
|
||||
case 114: break;
|
||||
case 115: break;
|
||||
case 17:
|
||||
{ return JetTokens.GT ;
|
||||
}
|
||||
case 115: break;
|
||||
case 116: break;
|
||||
case 4:
|
||||
{ return JetTokens.WHITE_SPACE;
|
||||
}
|
||||
case 116: break;
|
||||
case 117: break;
|
||||
case 25:
|
||||
{ return JetTokens.RPAR ;
|
||||
}
|
||||
case 117: break;
|
||||
case 118: break;
|
||||
case 56:
|
||||
{ return JetTokens.DOUBLE_ARROW;
|
||||
}
|
||||
case 118: break;
|
||||
case 84:
|
||||
case 119: break;
|
||||
case 85:
|
||||
{ return JetTokens.TRUE_KEYWORD ;
|
||||
}
|
||||
case 119: break;
|
||||
case 120: break;
|
||||
case 80:
|
||||
{ return JetTokens.IDE_TEMPLATE_START ;
|
||||
}
|
||||
case 120: break;
|
||||
case 121: break;
|
||||
case 37:
|
||||
{ return JetTokens.FIELD_IDENTIFIER;
|
||||
}
|
||||
case 121: break;
|
||||
case 122: break;
|
||||
case 60:
|
||||
{ return JetTokens.ANDAND ;
|
||||
}
|
||||
case 122: break;
|
||||
case 123: break;
|
||||
case 64:
|
||||
{ pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START;
|
||||
}
|
||||
case 123: break;
|
||||
case 124: break;
|
||||
case 36:
|
||||
{ return JetTokens.FLOAT_LITERAL;
|
||||
}
|
||||
case 124: break;
|
||||
case 125: break;
|
||||
case 40:
|
||||
{ return JetTokens.EOL_COMMENT;
|
||||
}
|
||||
case 125: break;
|
||||
case 88:
|
||||
case 126: break;
|
||||
case 89:
|
||||
{ return JetTokens.WHEN_KEYWORD ;
|
||||
}
|
||||
case 126: break;
|
||||
case 127: break;
|
||||
case 70:
|
||||
{ pushState(RAW_STRING); return JetTokens.OPEN_QUOTE;
|
||||
}
|
||||
case 127: break;
|
||||
case 128: break;
|
||||
case 26:
|
||||
{ return JetTokens.COLON ;
|
||||
}
|
||||
case 128: break;
|
||||
case 129: break;
|
||||
case 54:
|
||||
{ return JetTokens.LTEQ ;
|
||||
}
|
||||
case 129: break;
|
||||
case 130: break;
|
||||
case 45:
|
||||
{ return JetTokens.ARROW ;
|
||||
}
|
||||
case 130: break;
|
||||
case 131: break;
|
||||
case 32:
|
||||
{ popState(); return JetTokens.IDENTIFIER;
|
||||
}
|
||||
case 131: break;
|
||||
case 132: break;
|
||||
case 22:
|
||||
{ return JetTokens.LBRACKET ;
|
||||
}
|
||||
case 132: break;
|
||||
case 133: break;
|
||||
case 68:
|
||||
{ yypushback(2); return JetTokens.INTEGER_LITERAL;
|
||||
}
|
||||
case 133: break;
|
||||
case 134: break;
|
||||
case 9:
|
||||
{ return JetTokens.CHARACTER_LITERAL;
|
||||
}
|
||||
case 134: break;
|
||||
case 135: break;
|
||||
case 75:
|
||||
{ return JetTokens.VAR_KEYWORD ;
|
||||
}
|
||||
case 135: break;
|
||||
case 136: break;
|
||||
case 55:
|
||||
{ return JetTokens.GTEQ ;
|
||||
}
|
||||
case 136: break;
|
||||
case 137: break;
|
||||
case 2:
|
||||
{ return JetTokens.INTEGER_LITERAL;
|
||||
}
|
||||
case 137: break;
|
||||
case 138: break;
|
||||
case 12:
|
||||
{ return JetTokens.RBRACE ;
|
||||
}
|
||||
case 138: break;
|
||||
case 95:
|
||||
case 139: break;
|
||||
case 96:
|
||||
{ return JetTokens.CLASS_KEYWORD ;
|
||||
}
|
||||
case 139: break;
|
||||
case 140: break;
|
||||
case 14:
|
||||
{ return JetTokens.EXCL ;
|
||||
}
|
||||
case 140: break;
|
||||
case 141: break;
|
||||
case 71:
|
||||
{ return JetTokens.TRY_KEYWORD ;
|
||||
}
|
||||
case 141: break;
|
||||
case 142: break;
|
||||
case 53:
|
||||
{ return JetTokens.EXCLEQ ;
|
||||
}
|
||||
case 142: break;
|
||||
case 143: break;
|
||||
case 46:
|
||||
{ return JetTokens.MINUSEQ ;
|
||||
}
|
||||
case 143: break;
|
||||
case 101:
|
||||
case 144: break;
|
||||
case 102:
|
||||
{ return JetTokens.PACKAGE_KEYWORD ;
|
||||
}
|
||||
case 144: break;
|
||||
case 92:
|
||||
case 145: break;
|
||||
case 93:
|
||||
{ return JetTokens.THROW_KEYWORD ;
|
||||
}
|
||||
case 145: break;
|
||||
case 94:
|
||||
case 146: break;
|
||||
case 95:
|
||||
{ return JetTokens.SUPER_KEYWORD ;
|
||||
}
|
||||
case 146: break;
|
||||
case 147: break;
|
||||
case 67:
|
||||
{ if (commentDepth > 0) {
|
||||
commentDepth--;
|
||||
@@ -1081,241 +1073,245 @@ class _JetLexer implements FlexLexer {
|
||||
return commentStateToTokenType(state);
|
||||
}
|
||||
}
|
||||
case 147: break;
|
||||
case 97:
|
||||
case 148: break;
|
||||
case 98:
|
||||
{ return JetTokens.WHILE_KEYWORD ;
|
||||
}
|
||||
case 148: break;
|
||||
case 149: break;
|
||||
case 44:
|
||||
{ return JetTokens.MINUSMINUS;
|
||||
}
|
||||
case 149: break;
|
||||
case 102:
|
||||
case 150: break;
|
||||
case 103:
|
||||
{ return JetTokens.CONTINUE_KEYWORD ;
|
||||
}
|
||||
case 150: break;
|
||||
case 151: break;
|
||||
case 78:
|
||||
{ return JetTokens.NOT_IN;
|
||||
}
|
||||
case 151: break;
|
||||
case 152: break;
|
||||
case 39:
|
||||
{ return JetTokens.ATAT ;
|
||||
}
|
||||
case 152: break;
|
||||
case 153: break;
|
||||
case 6:
|
||||
{ return JetTokens.DIV ;
|
||||
}
|
||||
case 153: break;
|
||||
case 154: break;
|
||||
case 81:
|
||||
{ return JetTokens.IDE_TEMPLATE_END ;
|
||||
}
|
||||
case 154: break;
|
||||
case 155: break;
|
||||
case 38:
|
||||
{ return JetTokens.LABEL_IDENTIFIER;
|
||||
}
|
||||
case 155: break;
|
||||
case 156: break;
|
||||
case 29:
|
||||
{ return JetTokens.REGULAR_STRING_PART;
|
||||
}
|
||||
case 156: break;
|
||||
case 157: break;
|
||||
case 19:
|
||||
{ return JetTokens.QUEST ;
|
||||
}
|
||||
case 157: break;
|
||||
case 158: break;
|
||||
case 69:
|
||||
{ pushState(DOC_COMMENT);
|
||||
commentDepth = 0;
|
||||
commentStart = getTokenStart();
|
||||
}
|
||||
case 158: break;
|
||||
case 159: break;
|
||||
case 61:
|
||||
{ return JetTokens.OROR ;
|
||||
}
|
||||
case 159: break;
|
||||
case 160: break;
|
||||
case 21:
|
||||
{ return JetTokens.PERC ;
|
||||
}
|
||||
case 160: break;
|
||||
case 161: break;
|
||||
case 79:
|
||||
{ return JetTokens.EXCLEQEQEQ;
|
||||
}
|
||||
case 161: break;
|
||||
case 162: break;
|
||||
case 62:
|
||||
{ return JetTokens.PERCEQ ;
|
||||
}
|
||||
case 162: break;
|
||||
case 163: break;
|
||||
case 43:
|
||||
{ return JetTokens.RANGE ;
|
||||
}
|
||||
case 163: break;
|
||||
case 164: break;
|
||||
case 1:
|
||||
{ return TokenType.BAD_CHARACTER;
|
||||
}
|
||||
case 164: break;
|
||||
case 165: break;
|
||||
case 63:
|
||||
{ pushState(SHORT_TEMPLATE_ENTRY);
|
||||
yypushback(yylength() - 1);
|
||||
return JetTokens.SHORT_TEMPLATE_ENTRY_START;
|
||||
}
|
||||
case 165: break;
|
||||
case 166: break;
|
||||
case 77:
|
||||
{ return JetTokens.NOT_IS;
|
||||
}
|
||||
case 166: break;
|
||||
case 167: break;
|
||||
case 13:
|
||||
{ return JetTokens.MUL ;
|
||||
}
|
||||
case 167: break;
|
||||
case 168: break;
|
||||
case 23:
|
||||
{ return JetTokens.RBRACKET ;
|
||||
}
|
||||
case 168: break;
|
||||
case 169: break;
|
||||
case 59:
|
||||
{ return JetTokens.PLUSPLUS ;
|
||||
}
|
||||
case 169: break;
|
||||
case 170: break;
|
||||
case 41:
|
||||
{ pushState(BLOCK_COMMENT);
|
||||
commentDepth = 0;
|
||||
commentStart = getTokenStart();
|
||||
}
|
||||
case 170: break;
|
||||
case 83:
|
||||
case 171: break;
|
||||
case 84:
|
||||
{ return JetTokens.THIS_KEYWORD ;
|
||||
}
|
||||
case 171: break;
|
||||
case 172: break;
|
||||
case 7:
|
||||
{ return JetTokens.DOT ;
|
||||
}
|
||||
case 172: break;
|
||||
case 173: break;
|
||||
case 27:
|
||||
{ return JetTokens.SEMICOLON ;
|
||||
}
|
||||
case 173: break;
|
||||
case 174: break;
|
||||
case 49:
|
||||
{ return JetTokens.IF_KEYWORD ;
|
||||
}
|
||||
case 174: break;
|
||||
case 175: break;
|
||||
case 65:
|
||||
{ return JetTokens.ESCAPE_SEQUENCE;
|
||||
}
|
||||
case 175: break;
|
||||
case 176: break;
|
||||
case 31:
|
||||
{ popState(); return JetTokens.CLOSING_QUOTE;
|
||||
}
|
||||
case 176: break;
|
||||
case 177: break;
|
||||
case 18:
|
||||
{ return JetTokens.EQ ;
|
||||
}
|
||||
case 177: break;
|
||||
case 178: break;
|
||||
case 5:
|
||||
{ return JetTokens.AT ;
|
||||
}
|
||||
case 178: break;
|
||||
case 179: break;
|
||||
case 72:
|
||||
{ return JetTokens.AS_SAFE;
|
||||
}
|
||||
case 179: break;
|
||||
case 180: break;
|
||||
case 24:
|
||||
{ return JetTokens.LPAR ;
|
||||
}
|
||||
case 180: break;
|
||||
case 181: break;
|
||||
case 8:
|
||||
{ return JetTokens.MINUS ;
|
||||
}
|
||||
case 181: break;
|
||||
case 98:
|
||||
case 182: break;
|
||||
case 99:
|
||||
{ return JetTokens.FALSE_KEYWORD ;
|
||||
}
|
||||
case 182: break;
|
||||
case 85:
|
||||
case 183: break;
|
||||
case 86:
|
||||
{ return JetTokens.TYPE_KEYWORD ;
|
||||
}
|
||||
case 183: break;
|
||||
case 184: break;
|
||||
case 66:
|
||||
{ commentDepth++;
|
||||
}
|
||||
case 184: break;
|
||||
case 185: break;
|
||||
case 73:
|
||||
{ return JetTokens.FUN_KEYWORD ;
|
||||
}
|
||||
case 185: break;
|
||||
case 186: break;
|
||||
case 47:
|
||||
{ return JetTokens.IS_KEYWORD ;
|
||||
}
|
||||
case 186: break;
|
||||
case 187: break;
|
||||
case 30:
|
||||
{ popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE;
|
||||
}
|
||||
case 187: break;
|
||||
case 188: break;
|
||||
case 34:
|
||||
{ lBraceCount++; return JetTokens.LBRACE;
|
||||
}
|
||||
case 188: break;
|
||||
case 90:
|
||||
case 189: break;
|
||||
case 91:
|
||||
{ yypushback(3); return JetTokens.EXCL;
|
||||
}
|
||||
case 189: break;
|
||||
case 190: break;
|
||||
case 42:
|
||||
{ return JetTokens.DIVEQ ;
|
||||
}
|
||||
case 190: break;
|
||||
case 87:
|
||||
case 191: break;
|
||||
case 88:
|
||||
{ return JetTokens.ELSE_KEYWORD ;
|
||||
}
|
||||
case 191: break;
|
||||
case 192: break;
|
||||
case 51:
|
||||
{ return JetTokens.AS_KEYWORD ;
|
||||
}
|
||||
case 192: break;
|
||||
case 193: break;
|
||||
case 48:
|
||||
{ return JetTokens.IN_KEYWORD ;
|
||||
}
|
||||
case 193: break;
|
||||
case 194: break;
|
||||
case 57:
|
||||
{ return JetTokens.EQEQ ;
|
||||
}
|
||||
case 194: break;
|
||||
case 195: break;
|
||||
case 82:
|
||||
{ return JetTokens.EQEQEQ ;
|
||||
}
|
||||
case 195: break;
|
||||
case 196: break;
|
||||
case 76:
|
||||
{ return JetTokens.VAL_KEYWORD ;
|
||||
}
|
||||
case 196: break;
|
||||
case 89:
|
||||
case 197: break;
|
||||
case 90:
|
||||
{ return JetTokens.CAPITALIZED_THIS_KEYWORD ;
|
||||
}
|
||||
case 197: break;
|
||||
case 198: break;
|
||||
case 50:
|
||||
{ return JetTokens.MULTEQ ;
|
||||
}
|
||||
case 198: break;
|
||||
case 199: break;
|
||||
case 11:
|
||||
{ return JetTokens.LBRACE ;
|
||||
}
|
||||
case 199: break;
|
||||
case 99:
|
||||
case 200: break;
|
||||
case 100:
|
||||
{ return JetTokens.OBJECT_KEYWORD ;
|
||||
}
|
||||
case 200: break;
|
||||
case 96:
|
||||
case 201: break;
|
||||
case 97:
|
||||
{ return JetTokens.BREAK_KEYWORD ;
|
||||
}
|
||||
case 201: break;
|
||||
case 93:
|
||||
case 202: break;
|
||||
case 83:
|
||||
{ return JetTokens.BLOCK_COMMENT;
|
||||
}
|
||||
case 203: break;
|
||||
case 94:
|
||||
{ return JetTokens.TRAIT_KEYWORD ;
|
||||
}
|
||||
case 202: break;
|
||||
case 204: break;
|
||||
case 33:
|
||||
{
|
||||
}
|
||||
case 203: break;
|
||||
case 205: break;
|
||||
case 16:
|
||||
{ return JetTokens.HASH ;
|
||||
}
|
||||
case 204: break;
|
||||
case 206: break;
|
||||
default:
|
||||
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
|
||||
zzAtEOF = true;
|
||||
@@ -1327,14 +1323,14 @@ class _JetLexer implements FlexLexer {
|
||||
zzStartRead = commentStart;
|
||||
return commentStateToTokenType(state);
|
||||
}
|
||||
case 230: break;
|
||||
case 231: break;
|
||||
case DOC_COMMENT: {
|
||||
int state = yystate();
|
||||
popState();
|
||||
zzStartRead = commentStart;
|
||||
return commentStateToTokenType(state);
|
||||
}
|
||||
case 231: break;
|
||||
case 232: break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
fun main(args : Array<String>) {
|
||||
val a : Int? = null
|
||||
val b : Int? = null
|
||||
a!! : Int
|
||||
a!! + 2
|
||||
a!!.plus(2)
|
||||
a!!.plus(b!!)
|
||||
2.plus(b!!)
|
||||
2 + b!!
|
||||
|
||||
val c = 1
|
||||
c<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
|
||||
val d : Any? = null
|
||||
|
||||
if (d != null) {
|
||||
d<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
}
|
||||
|
||||
if (d is String) {
|
||||
d<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
}
|
||||
|
||||
if (d is String?) {
|
||||
if (d != null) {
|
||||
d<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
}
|
||||
if (d is String) {
|
||||
d<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
}
|
||||
}
|
||||
|
||||
val <!UNUSED_VARIABLE!>f<!> : String = <!TYPE_MISMATCH!>a!!<!>
|
||||
<!TYPE_MISMATCH!>a!!<!> : String
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
fun main(args : Array<String>) {
|
||||
val a : Int? = null;
|
||||
var v = 1
|
||||
val <!UNUSED_VARIABLE!>b<!> : String = <!TYPE_MISMATCH!>v<!>;
|
||||
val <!UNUSED_VARIABLE!>f<!> : String = <!TYPE_MISMATCH!>a!!<!>;
|
||||
val <!UNUSED_VARIABLE!>g<!> : String = <!TYPE_MISMATCH!>v++<!>;
|
||||
val <!UNUSED_VARIABLE!>g1<!> : String = <!TYPE_MISMATCH!>++v<!>;
|
||||
val <!UNUSED_VARIABLE!>h<!> : String = <!TYPE_MISMATCH!>v--<!>;
|
||||
val <!UNUSED_VARIABLE!>h1<!> : String = <!TYPE_MISMATCH!>--v<!>;
|
||||
val <!UNUSED_VARIABLE!>i<!> : String = <!TYPE_MISMATCH!>!true<!>;
|
||||
val <!UNUSED_VARIABLE!>j<!> : String = <!TYPE_MISMATCH!>@foo <!ERROR_COMPILE_TIME_VALUE!>true<!><!>;
|
||||
val <!UNUSED_VARIABLE!>j1<!> : String = <!TYPE_MISMATCH!>@ <!ERROR_COMPILE_TIME_VALUE!>true<!><!>;
|
||||
val <!UNUSED_VARIABLE!>j2<!> : String = <!TYPE_MISMATCH!>@@ <!ERROR_COMPILE_TIME_VALUE!>true<!><!>;
|
||||
val <!UNUSED_VARIABLE!>k<!> : String = <!TYPE_MISMATCH!>-1<!>;
|
||||
val <!UNUSED_VARIABLE!>l<!> : String = <!TYPE_MISMATCH!>+1<!>;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fun main(args : Array<String>) {
|
||||
!true;
|
||||
!!true;
|
||||
!!!true;
|
||||
!!!!true;
|
||||
true!!!
|
||||
true!!!!
|
||||
true!!and(false)
|
||||
true!!.and(false)
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
JetFile: AssertNotNull.jet
|
||||
NAMESPACE_HEADER
|
||||
<empty list>
|
||||
FUN
|
||||
PsiElement(fun)('fun')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(IDENTIFIER)('main')
|
||||
VALUE_PARAMETER_LIST
|
||||
PsiElement(LPAR)('(')
|
||||
VALUE_PARAMETER
|
||||
PsiElement(IDENTIFIER)('args')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(COLON)(':')
|
||||
PsiWhiteSpace(' ')
|
||||
TYPE_REFERENCE
|
||||
USER_TYPE
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('Array')
|
||||
TYPE_ARGUMENT_LIST
|
||||
PsiElement(LT)('<')
|
||||
TYPE_PROJECTION
|
||||
TYPE_REFERENCE
|
||||
USER_TYPE
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('String')
|
||||
PsiElement(GT)('>')
|
||||
PsiElement(RPAR)(')')
|
||||
PsiWhiteSpace(' ')
|
||||
BLOCK
|
||||
PsiElement(LBRACE)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(true)('true')
|
||||
PsiElement(SEMICOLON)(';')
|
||||
PsiWhiteSpace('\n ')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(true)('true')
|
||||
PsiElement(SEMICOLON)(';')
|
||||
PsiWhiteSpace('\n ')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(true)('true')
|
||||
PsiElement(SEMICOLON)(';')
|
||||
PsiWhiteSpace('\n ')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
PREFIX_EXPRESSION
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCL)('!')
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(true)('true')
|
||||
PsiElement(SEMICOLON)(';')
|
||||
PsiWhiteSpace('\n ')
|
||||
POSTFIX_EXPRESSION
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(true)('true')
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCLEXCL)('!!')
|
||||
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line)
|
||||
PsiElement(EXCL)('!')
|
||||
PsiWhiteSpace('\n ')
|
||||
POSTFIX_EXPRESSION
|
||||
POSTFIX_EXPRESSION
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(true)('true')
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCLEXCL)('!!')
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCLEXCL)('!!')
|
||||
PsiWhiteSpace('\n ')
|
||||
BINARY_EXPRESSION
|
||||
POSTFIX_EXPRESSION
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(true)('true')
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCLEXCL)('!!')
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(IDENTIFIER)('and')
|
||||
PARENTHESIZED
|
||||
PsiElement(LPAR)('(')
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(false)('false')
|
||||
PsiElement(RPAR)(')')
|
||||
PsiWhiteSpace('\n ')
|
||||
DOT_QUALIFIED_EXPRESSION
|
||||
POSTFIX_EXPRESSION
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(true)('true')
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(EXCLEXCL)('!!')
|
||||
PsiElement(DOT)('.')
|
||||
CALL_EXPRESSION
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('and')
|
||||
VALUE_ARGUMENT_LIST
|
||||
PsiElement(LPAR)('(')
|
||||
VALUE_ARGUMENT
|
||||
BOOLEAN_CONSTANT
|
||||
PsiElement(false)('false')
|
||||
PsiElement(RPAR)(')')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(RBRACE)('}')
|
||||
@@ -10,10 +10,10 @@ b
|
||||
b
|
||||
/***/
|
||||
b
|
||||
/**/***/*/
|
||||
/** /***/*/
|
||||
b
|
||||
/** /**
|
||||
|
||||
*/***/
|
||||
b
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,27 @@ JetFile: NestedComments.jet
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('b')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiComment(DOC_COMMENT)('/**/\nb\n/* */\nb\n/*/**/*/\nb\n/***/\nb\n/**/***/')
|
||||
PsiErrorElement:Expecting an element
|
||||
PsiElement(MUL)('*')
|
||||
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line)
|
||||
PsiElement(DIV)('/')
|
||||
PsiComment(BLOCK_COMMENT)('/**/')
|
||||
PsiWhiteSpace('\n')
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('b')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiComment(BLOCK_COMMENT)('/* */')
|
||||
PsiWhiteSpace('\n')
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('b')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiComment(BLOCK_COMMENT)('/*/**/*/')
|
||||
PsiWhiteSpace('\n')
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('b')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiComment(DOC_COMMENT)('/***/')
|
||||
PsiWhiteSpace('\n')
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('b')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiComment(DOC_COMMENT)('/** /***/*/')
|
||||
PsiWhiteSpace('\n')
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('b')
|
||||
|
||||
@@ -212,7 +212,7 @@ prefixUnaryOperation
|
||||
;
|
||||
|
||||
postfixUnaryOperation
|
||||
: "++" : "--"
|
||||
: "++" : "--" : "!!"
|
||||
: callSuffix
|
||||
: arrayAccess
|
||||
: memberAccessOperation postfixUnaryExpression // TODO: Review
|
||||
|
||||
@@ -50,7 +50,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
||||
*/
|
||||
public class DebugInfoAnnotator implements Annotator {
|
||||
|
||||
public static final TokenSet EXCLUDED = TokenSet.create(COLON, AS_KEYWORD, AS_SAFE, IS_KEYWORD, NOT_IS, OROR, ANDAND, EQ, EQEQEQ, EXCLEQEQEQ, ELVIS);
|
||||
public static final TokenSet EXCLUDED = TokenSet.create(COLON, AS_KEYWORD, AS_SAFE, IS_KEYWORD, NOT_IS, OROR, ANDAND, EQ, EQEQEQ, EXCLEQEQEQ, ELVIS, EXCLEXCL);
|
||||
|
||||
private static volatile boolean debugInfoEnabled = true;
|
||||
|
||||
|
||||
@@ -30,8 +30,7 @@ import com.intellij.util.Consumer;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
@@ -41,22 +40,27 @@ import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
|
||||
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author Nikolay Krasko
|
||||
*/
|
||||
public class JetCompletionContributor extends CompletionContributor {
|
||||
|
||||
private static class CompletionSession {
|
||||
public boolean isSomethingAdded = false;
|
||||
public int customInvocationCount = 0;
|
||||
}
|
||||
|
||||
public JetCompletionContributor() {
|
||||
extend(CompletionType.BASIC, PlatformPatterns.psiElement(),
|
||||
new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context,
|
||||
@NotNull CompletionResultSet result) {
|
||||
result.restartCompletionWhenNothingMatches();
|
||||
|
||||
Set<LookupPositionObject> positions = new HashSet<LookupPositionObject>();
|
||||
CompletionSession session = new CompletionSession();
|
||||
session.customInvocationCount = parameters.getInvocationCount();
|
||||
|
||||
PsiElement position = parameters.getPosition();
|
||||
if (!(position.getContainingFile() instanceof JetFile)) {
|
||||
@@ -65,49 +69,74 @@ public class JetCompletionContributor extends CompletionContributor {
|
||||
|
||||
JetSimpleNameReference jetReference = getJetReference(parameters);
|
||||
if (jetReference != null) {
|
||||
completeForReference(parameters, result, position, jetReference, session);
|
||||
|
||||
// Prevent from adding reference variants from standard reference contributor
|
||||
result.stopHere();
|
||||
|
||||
if (isOnlyKeywordCompletion(position)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (shouldRunTypeCompletionOnly(position, jetReference)) {
|
||||
addClasses(parameters, result);
|
||||
return;
|
||||
}
|
||||
|
||||
for (Object variant : jetReference.getVariants()) {
|
||||
addReferenceVariant(result, variant, positions);
|
||||
}
|
||||
|
||||
String prefix = result.getPrefixMatcher().getPrefix();
|
||||
|
||||
// Try to avoid computing not-imported descriptors for empty prefix
|
||||
if (prefix.isEmpty()) {
|
||||
if (parameters.getInvocationCount() < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (PsiTreeUtil.getParentOfType(jetReference.getElement(), JetDotQualifiedExpression.class) == null) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldRunTopLevelCompletion(parameters, prefix)) {
|
||||
addClasses(parameters, result);
|
||||
addJetTopLevelFunctions(jetReference.getExpression(), result, position, positions);
|
||||
}
|
||||
|
||||
if (shouldRunExtensionsCompletion(parameters, prefix)) {
|
||||
addJetExtensions(jetReference.getExpression(), result, position);
|
||||
if (!session.isSomethingAdded && session.customInvocationCount == 0) {
|
||||
// Rerun completion if nothing was found
|
||||
session.customInvocationCount = 1;
|
||||
completeForReference(parameters, result, position, jetReference, session);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void completeForReference(
|
||||
@NotNull CompletionParameters parameters,
|
||||
@NotNull CompletionResultSet result,
|
||||
@NotNull PsiElement position,
|
||||
@NotNull JetSimpleNameReference jetReference,
|
||||
@NotNull CompletionSession session
|
||||
) {
|
||||
// Prevent from adding reference variants from standard reference contributor
|
||||
result.stopHere();
|
||||
|
||||
if (isOnlyKeywordCompletion(position)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (shouldRunTypeCompletionOnly(position, jetReference)) {
|
||||
if (session.customInvocationCount > 0) {
|
||||
addClasses(parameters, result);
|
||||
}
|
||||
else {
|
||||
for (Object variant : jetReference.getVariants()) {
|
||||
if (isTypeDeclaration(variant)) {
|
||||
addReferenceVariant(result, variant, session);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
for (Object variant : jetReference.getVariants()) {
|
||||
addReferenceVariant(result, variant, session);
|
||||
}
|
||||
|
||||
String prefix = result.getPrefixMatcher().getPrefix();
|
||||
|
||||
// Try to avoid computing not-imported descriptors for empty prefix
|
||||
if (prefix.isEmpty()) {
|
||||
if (session.customInvocationCount < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (PsiTreeUtil.getParentOfType(jetReference.getElement(), JetDotQualifiedExpression.class) == null) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldRunTopLevelCompletion(parameters, session)) {
|
||||
addClasses(parameters, result);
|
||||
addJetTopLevelFunctions(jetReference.getExpression(), result, position, session);
|
||||
}
|
||||
|
||||
if (shouldRunExtensionsCompletion(parameters, prefix, session)) {
|
||||
addJetExtensions(jetReference.getExpression(), result, position);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isOnlyKeywordCompletion(PsiElement position) {
|
||||
return PsiTreeUtil.getParentOfType(position, JetModifierList.class) != null;
|
||||
}
|
||||
@@ -135,18 +164,32 @@ public class JetCompletionContributor extends CompletionContributor {
|
||||
private static void addReferenceVariant(
|
||||
@NotNull CompletionResultSet result,
|
||||
@NotNull Object variant,
|
||||
@NotNull Set<LookupPositionObject> positions) {
|
||||
@NotNull CompletionSession session) {
|
||||
|
||||
if (variant instanceof LookupElement) {
|
||||
addCompletionToResult(result, (LookupElement) variant, positions);
|
||||
addCompletionToResult(result, (LookupElement) variant, session);
|
||||
}
|
||||
else {
|
||||
addCompletionToResult(result, LookupElementBuilder.create(variant.toString()), positions);
|
||||
addCompletionToResult(result, LookupElementBuilder.create(variant.toString()), session);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isTypeDeclaration(@NotNull Object variant) {
|
||||
if (variant instanceof LookupElement) {
|
||||
Object object = ((LookupElement)variant).getObject();
|
||||
if (object instanceof JetLookupObject) {
|
||||
DeclarationDescriptor descriptor = ((JetLookupObject) object).getDescriptor();
|
||||
return (descriptor instanceof ClassDescriptor) ||
|
||||
(descriptor instanceof NamespaceDescriptor) ||
|
||||
(descriptor instanceof TypeParameterDescriptor);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void addJetTopLevelFunctions(JetSimpleNameExpression expression, @NotNull CompletionResultSet result, @NotNull PsiElement position,
|
||||
@NotNull Set<LookupPositionObject> positions) {
|
||||
@NotNull CompletionSession session) {
|
||||
|
||||
String actualPrefix = result.getPrefixMatcher().getPrefix();
|
||||
|
||||
@@ -161,7 +204,7 @@ public class JetCompletionContributor extends CompletionContributor {
|
||||
for (String name : functionNames) {
|
||||
if (name.contains(actualPrefix)) {
|
||||
for (FunctionDescriptor function : namesCache.getTopLevelFunctionDescriptorsByName(name, expression, scope)) {
|
||||
addCompletionToResult(result, DescriptorLookupConverter.createLookupElement(resolutionContext, function), positions);
|
||||
addCompletionToResult(result, DescriptorLookupConverter.createLookupElement(resolutionContext, function), session);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -194,8 +237,8 @@ public class JetCompletionContributor extends CompletionContributor {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean shouldRunTopLevelCompletion(@NotNull CompletionParameters parameters, String prefix) {
|
||||
if (parameters.getInvocationCount() == 0 && prefix.length() < 3) {
|
||||
private static boolean shouldRunTopLevelCompletion(@NotNull CompletionParameters parameters, CompletionSession session) {
|
||||
if (session.customInvocationCount == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -212,8 +255,8 @@ public class JetCompletionContributor extends CompletionContributor {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean shouldRunExtensionsCompletion(CompletionParameters parameters, String prefix) {
|
||||
if (parameters.getInvocationCount() == 0 && prefix.length() < 3) {
|
||||
private static boolean shouldRunExtensionsCompletion(CompletionParameters parameters, String prefix, CompletionSession session) {
|
||||
if (session.customInvocationCount == 0 && prefix.length() < 3) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -243,36 +286,28 @@ public class JetCompletionContributor extends CompletionContributor {
|
||||
private static void addCompletionToResult(
|
||||
@NotNull CompletionResultSet result,
|
||||
@NotNull LookupElement element,
|
||||
@NotNull Set<LookupPositionObject> positions) {
|
||||
@NotNull CompletionSession session) {
|
||||
|
||||
// LookupPositionObject lookupPosition = getLookupPosition(element);
|
||||
// if (lookupPosition != null) {
|
||||
// if (!positions.contains(lookupPosition)) {
|
||||
// positions.add(lookupPosition);
|
||||
// result.addElement(element);
|
||||
// }
|
||||
//
|
||||
// // There is already an element with same position - ignore duplicate
|
||||
// }
|
||||
// else {
|
||||
if (result.getPrefixMatcher().prefixMatches(element)) {
|
||||
result.addElement(element);
|
||||
// }
|
||||
session.isSomethingAdded = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static LookupPositionObject getLookupPosition(LookupElement element) {
|
||||
Object lookupObject = element.getObject();
|
||||
if (lookupObject instanceof PsiElement) {
|
||||
return new LookupPositionObject((PsiElement) lookupObject);
|
||||
}
|
||||
else if (lookupObject instanceof JetLookupObject) {
|
||||
PsiElement psiElement = ((JetLookupObject) lookupObject).getPsiElement();
|
||||
if (psiElement != null) {
|
||||
return new LookupPositionObject(psiElement);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
//private static LookupPositionObject getLookupPosition(LookupElement element) {
|
||||
// Object lookupObject = element.getObject();
|
||||
// if (lookupObject instanceof PsiElement) {
|
||||
// return new LookupPositionObject((PsiElement) lookupObject);
|
||||
// }
|
||||
// else if (lookupObject instanceof JetLookupObject) {
|
||||
// PsiElement psiElement = ((JetLookupObject) lookupObject).getPsiElement();
|
||||
// if (psiElement != null) {
|
||||
// return new LookupPositionObject(psiElement);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return null;
|
||||
//}
|
||||
|
||||
@Override
|
||||
public void beforeCompletion(@NotNull CompletionInitializationContext context) {
|
||||
|
||||
@@ -75,7 +75,7 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder {
|
||||
.aroundInside(TokenSet.create(LT, GT, LTEQ, GTEQ), BINARY_EXPRESSION).spaceIf(jetCommonSettings.SPACE_AROUND_RELATIONAL_OPERATORS)
|
||||
.around(TokenSet.create(PLUS, MINUS)).spaceIf(jetCommonSettings.SPACE_AROUND_ADDITIVE_OPERATORS)
|
||||
.aroundInside(TokenSet.create(MUL, DIV, PERC), BINARY_EXPRESSION).spaceIf(jetCommonSettings.SPACE_AROUND_MULTIPLICATIVE_OPERATORS)
|
||||
.around(TokenSet.create(PLUSPLUS, MINUSMINUS, MINUS, PLUS, EXCL)).spaceIf(jetCommonSettings.SPACE_AROUND_UNARY_OPERATOR)
|
||||
.around(TokenSet.create(PLUSPLUS, MINUSMINUS, EXCLEXCL, MINUS, PLUS, EXCL)).spaceIf(jetCommonSettings.SPACE_AROUND_UNARY_OPERATOR)
|
||||
.around(RANGE).spaceIf(jetSettings.SPACE_AROUND_RANGE)
|
||||
|
||||
.beforeInside(BLOCK, FUN).spaceIf(jetCommonSettings.SPACE_BEFORE_METHOD_LBRACE)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package first
|
||||
|
||||
fun firstFun() {
|
||||
val a = In<caret>
|
||||
}
|
||||
|
||||
// RUNTIME: 1
|
||||
// TIME: 0
|
||||
// EXIST: Int~(jet)
|
||||
// ABSENT: Int~(jet.runtime.SharedVar)
|
||||
@@ -16,8 +16,13 @@
|
||||
|
||||
package org.jetbrains.jet.completion;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Collections2;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import junit.framework.Assert;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -34,6 +39,39 @@ import java.util.List;
|
||||
* @author Nikolay Krasko
|
||||
*/
|
||||
public class ExpectedCompletionUtils {
|
||||
|
||||
public static class CompletionProposal {
|
||||
public static final String TAIL_FLAG = "~";
|
||||
|
||||
private final String lookupString;
|
||||
private final String tailString;
|
||||
|
||||
|
||||
|
||||
public CompletionProposal(@NotNull String lookupString, @Nullable String tailString) {
|
||||
this.lookupString = lookupString;
|
||||
this.tailString = tailString != null ? tailString.trim() : null;
|
||||
}
|
||||
|
||||
public boolean isSuitable(CompletionProposal proposal) {
|
||||
if (proposal.tailString != null) {
|
||||
if (!proposal.tailString.equals(tailString)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return lookupString.equals(proposal.lookupString);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (tailString != null) {
|
||||
return lookupString + TAIL_FLAG + tailString;
|
||||
}
|
||||
|
||||
return lookupString;
|
||||
}
|
||||
}
|
||||
|
||||
public static final String EXIST_LINE_PREFIX = "// EXIST:";
|
||||
public static final String ABSENT_LINE_PREFIX = "// ABSENT:";
|
||||
@@ -57,13 +95,30 @@ public class ExpectedCompletionUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String[] itemsShouldExist(String fileText) {
|
||||
return findListWithPrefix(existLinePrefix, fileText);
|
||||
public CompletionProposal[] itemsShouldExist(String fileText) {
|
||||
return processProposalAssertions(existLinePrefix, fileText);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String[] itemsShouldAbsent(String fileText) {
|
||||
return findListWithPrefix(absentLinePrefix, fileText);
|
||||
public CompletionProposal[] itemsShouldAbsent(String fileText) {
|
||||
return processProposalAssertions(absentLinePrefix, fileText);
|
||||
}
|
||||
|
||||
public static CompletionProposal[] processProposalAssertions(String prefix, String fileText) {
|
||||
List<CompletionProposal> proposals = new ArrayList<CompletionProposal>();
|
||||
for (String proposalStr : findListWithPrefix(prefix, fileText)) {
|
||||
int tailChar = proposalStr.indexOf(CompletionProposal.TAIL_FLAG);
|
||||
|
||||
if (tailChar > 0) {
|
||||
proposals.add(new CompletionProposal(proposalStr.substring(0, tailChar),
|
||||
proposalStr.substring(tailChar + 1, proposalStr.length())));
|
||||
}
|
||||
else {
|
||||
proposals.add(new CompletionProposal(proposalStr, null));
|
||||
}
|
||||
}
|
||||
|
||||
return ArrayUtil.toObjectArray(proposals, CompletionProposal.class);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -137,4 +192,57 @@ public class ExpectedCompletionUtils {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
protected static void assertContainsRenderedItems(CompletionProposal[] expected, LookupElement[] items) {
|
||||
List<CompletionProposal> itemsInformation = getItemsInformation(items);
|
||||
|
||||
for (CompletionProposal expectedProposal : expected) {
|
||||
boolean isFound = false;
|
||||
|
||||
for (CompletionProposal proposal : itemsInformation) {
|
||||
if (proposal.isSuitable(expectedProposal)) {
|
||||
isFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Assert.assertTrue("Expected '" + expectedProposal + "' not found in " + listToString(itemsInformation), isFound);
|
||||
}
|
||||
}
|
||||
|
||||
protected static void assertNotContainsRenderedItems(CompletionProposal[] unexpected,LookupElement[] items) {
|
||||
List<CompletionProposal> itemsInformation = getItemsInformation(items);
|
||||
|
||||
for (CompletionProposal unexpectedProposal : unexpected) {
|
||||
for (CompletionProposal proposal : itemsInformation) {
|
||||
Assert.assertFalse("Unexpected '" + unexpectedProposal + "' presented in " + listToString(itemsInformation),
|
||||
proposal.isSuitable(unexpectedProposal));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected static List<CompletionProposal> getItemsInformation(LookupElement[] items) {
|
||||
final LookupElementPresentation presentation = new LookupElementPresentation();
|
||||
|
||||
List<CompletionProposal> result = new ArrayList<CompletionProposal>();
|
||||
if (items != null) {
|
||||
for (LookupElement item : items) {
|
||||
item.renderElement(presentation);
|
||||
result.add(new ExpectedCompletionUtils.CompletionProposal(item.getLookupString(), presentation.getTailText()));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
protected static String listToString(List<ExpectedCompletionUtils.CompletionProposal> items) {
|
||||
return StringUtil.join(
|
||||
Collections2.transform(items, new Function<CompletionProposal, String>() {
|
||||
@Override
|
||||
public String apply(@Nullable CompletionProposal proposal) {
|
||||
assert proposal != null;
|
||||
return proposal.toString();
|
||||
}
|
||||
}), "\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,6 +97,10 @@ public class JetBasicCompletionTest extends JetCompletionTestBase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testOnlyScopedClassesWithoutExplicit() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testOverloadFunctions() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
@@ -17,10 +17,6 @@
|
||||
package org.jetbrains.jet.completion;
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionTestCase;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author Nikolay Krasko
|
||||
@@ -41,8 +37,8 @@ public abstract class JetCompletionMultiTestBase extends CompletionTestCase {
|
||||
final String fileText = getFile().getText();
|
||||
final ExpectedCompletionUtils completionUtils = new ExpectedCompletionUtils();
|
||||
|
||||
assertContainsItems(completionUtils.itemsShouldExist(fileText));
|
||||
assertNotContainItems(completionUtils.itemsShouldAbsent(fileText));
|
||||
ExpectedCompletionUtils.assertContainsRenderedItems(completionUtils.itemsShouldExist(fileText), myItems);
|
||||
ExpectedCompletionUtils.assertNotContainsRenderedItems(completionUtils.itemsShouldAbsent(fileText), myItems);
|
||||
|
||||
Integer itemsNumber = completionUtils.getExpectedNumber(fileText);
|
||||
if (itemsNumber != null) {
|
||||
@@ -56,33 +52,4 @@ public abstract class JetCompletionMultiTestBase extends CompletionTestCase {
|
||||
protected void doFileTest() {
|
||||
doFileTest(1);
|
||||
}
|
||||
|
||||
// Copied from com.intellij.codeInsight.completion.LightCompletionTestCase
|
||||
protected void assertContainsItems(final String... expected) {
|
||||
final Set<String> actual = getLookupStrings();
|
||||
for (String s : expected) {
|
||||
assertTrue("Expected '" + s + "' not found in " + actual,
|
||||
actual.contains(s));
|
||||
}
|
||||
}
|
||||
|
||||
// Copied from com.intellij.codeInsight.completion.LightCompletionTestCase
|
||||
protected void assertNotContainItems(final String... unexpected) {
|
||||
final Set<String> actual = getLookupStrings();
|
||||
for (String s : unexpected) {
|
||||
assertFalse("Unexpected '" + s + "' presented in " + actual,
|
||||
actual.contains(s));
|
||||
}
|
||||
}
|
||||
|
||||
// Copied from com.intellij.codeInsight.completion.LightCompletionTestCase
|
||||
private Set<String> getLookupStrings() {
|
||||
final Set<String> actual = new HashSet<String>();
|
||||
if (myItems != null) {
|
||||
for (LookupElement lookupElement : myItems) {
|
||||
actual.add(lookupElement.getLookupString());
|
||||
}
|
||||
}
|
||||
return actual;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,14 +59,14 @@ public abstract class JetCompletionTestBase extends LightCompletionTestCase {
|
||||
|
||||
complete(completionTime == null ? 1 : completionTime);
|
||||
|
||||
final String[] expected = completionUtils.itemsShouldExist(fileText);
|
||||
final String[] unexpected = completionUtils.itemsShouldAbsent(fileText);
|
||||
ExpectedCompletionUtils.CompletionProposal[] expected = completionUtils.itemsShouldExist(fileText);
|
||||
ExpectedCompletionUtils.CompletionProposal[] unexpected = completionUtils.itemsShouldAbsent(fileText);
|
||||
Integer itemsNumber = completionUtils.getExpectedNumber(fileText);
|
||||
|
||||
assertTrue("Should be some assertions about completion", expected.length != 0 || unexpected.length != 0 || itemsNumber != null);
|
||||
|
||||
assertContainsItems(expected);
|
||||
assertNotContainItems(unexpected);
|
||||
ExpectedCompletionUtils.assertContainsRenderedItems(expected, myItems);
|
||||
ExpectedCompletionUtils.assertNotContainsRenderedItems(unexpected, myItems);
|
||||
|
||||
if (itemsNumber != null) {
|
||||
assertEquals("Invalid number of completion items", itemsNumber.intValue(), myItems.length);
|
||||
|
||||
Reference in New Issue
Block a user