Merge remote-tracking branch 'origin/master'

This commit is contained in:
Dmitry Jemerov
2011-05-13 15:09:28 +02:00
8 changed files with 76 additions and 2 deletions
+1 -1
View File
@@ -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" />
+1 -1
View File
@@ -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();
}
+7
View File
@@ -0,0 +1,7 @@
fun test() {
if (1 is Int) {
if (<warning>1 is Boolean</warning>) {
}
}
}