Merge remote-tracking branch 'origin/master'
This commit is contained in:
Generated
+1
-1
@@ -13,7 +13,7 @@
|
||||
<option name="MAIN_CLASS_NAME" value="" />
|
||||
<option name="METHOD_NAME" value="" />
|
||||
<option name="TEST_OBJECT" value="package" />
|
||||
<option name="VM_PARAMETERS" value="" />
|
||||
<option name="VM_PARAMETERS" value="-ea" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
|
||||
<option name="ENV_VARIABLES" />
|
||||
|
||||
@@ -117,7 +117,7 @@ public interface JetNodeTypes {
|
||||
JetNodeType ROOT_NAMESPACE = new JetNodeType("ROOT_NAMESPACE", JetRootNamespaceExpression.class);
|
||||
JetNodeType DECOMPOSER_ARGUMENT_LIST = new JetNodeType("DECOMPOSER_ARGUMENT_LIST");
|
||||
JetNodeType DECOMPOSER_ARGUMENT = new JetNodeType("DECOMPOSER_ARGUMENT");
|
||||
JetNodeType TYPE_PATTERN = new JetNodeType("TYPE_PATTERN");
|
||||
JetNodeType TYPE_PATTERN = new JetNodeType("TYPE_PATTERN", JetTypePattern.class);
|
||||
JetNodeType EXPRESSION_PATTERN = new JetNodeType("EXPRESSION_PATTERN");
|
||||
JetNodeType BINDING_PATTERN = new JetNodeType("BINDING_PATTERN");
|
||||
JetNodeType WILDCARD_PATTERN = new JetNodeType("WILDCARD_PATTERN");
|
||||
|
||||
@@ -601,6 +601,14 @@ public class JetControlFlowProcessor {
|
||||
builder.read(expression);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void visitIsExpression(JetIsExpression expression) {
|
||||
value(expression.getLeftHandSide(), false, inCondition);
|
||||
// TODO : builder.read(expression.getPattern());
|
||||
builder.read(expression);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitTypeProjection(JetTypeProjection typeProjection) {
|
||||
// TODO : Support Type Arguments. Class object may be initialized at this point");
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.jetbrains.jet.lang.psi;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
@@ -15,4 +16,15 @@ public class JetIsExpression extends JetExpression {
|
||||
public void accept(JetVisitor visitor) {
|
||||
visitor.visitIsExpression(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JetExpression getLeftHandSide() {
|
||||
return findChildByClass(JetExpression.class);
|
||||
}
|
||||
|
||||
@Nullable @IfNotParsed
|
||||
public JetPattern getPattern() {
|
||||
return findChildByClass(JetPattern.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.jetbrains.jet.lang.psi;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
public class JetPattern extends JetElement {
|
||||
public JetPattern(@NotNull ASTNode node) {
|
||||
super(node);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.jetbrains.jet.lang.psi;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
public class JetTypePattern extends JetPattern {
|
||||
public JetTypePattern(@NotNull ASTNode node) {
|
||||
super(node);
|
||||
}
|
||||
|
||||
@Nullable @IfNotParsed
|
||||
public JetTypeReference getTypeReference() {
|
||||
return findChildByClass(JetTypeReference.class);
|
||||
}
|
||||
}
|
||||
@@ -864,6 +864,8 @@ public class JetTypeInferrer {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void visitTupleExpression(JetTupleExpression expression) {
|
||||
List<JetExpression> entries = expression.getEntries();
|
||||
@@ -1255,6 +1257,19 @@ public class JetTypeInferrer {
|
||||
@Override
|
||||
public void visitIsExpression(JetIsExpression expression) {
|
||||
// TODO : patterns and everything
|
||||
JetType knownType = getType(scope, expression.getLeftHandSide(), false);
|
||||
JetPattern pattern = expression.getPattern();
|
||||
if (pattern instanceof JetTypePattern) {
|
||||
JetTypePattern typePattern = (JetTypePattern) pattern;
|
||||
JetTypeReference typeReference = typePattern.getTypeReference();
|
||||
if (typeReference != null && knownType != null) {
|
||||
JetType targetType = typeResolver.resolveType(scope, typeReference);
|
||||
if (!semanticServices.getTypeChecker().isSubtypeOf(targetType, knownType)) {
|
||||
trace.getErrorHandler().genericWarning(expression.getNode(), "Expression always evaluates to false"); // TODO : make an error?
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
result = semanticServices.getStandardLibrary().getBooleanType();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
fun test() {
|
||||
if (1 is Int) {
|
||||
if (<warning>1 is Boolean</warning>) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user