Little fixes

This commit is contained in:
svtk
2011-11-04 15:52:11 +04:00
parent d497fb1a5b
commit dfa3783f54
3 changed files with 20 additions and 10 deletions
@@ -26,12 +26,12 @@ public class ControlFlowAnalyzer {
private TopDownAnalysisContext context; private TopDownAnalysisContext context;
private ExpressionTypingServices typeInferrerServices; private ExpressionTypingServices typeInferrerServices;
private final JetControlFlowDataTraceFactory flowDataTraceFactory; private final JetControlFlowDataTraceFactory flowDataTraceFactory;
private final boolean isDeclaredLocally; private final boolean analyzeLocalDeclaration;
public ControlFlowAnalyzer(TopDownAnalysisContext context, JetControlFlowDataTraceFactory flowDataTraceFactory, boolean declaredLocally) { public ControlFlowAnalyzer(TopDownAnalysisContext context, JetControlFlowDataTraceFactory flowDataTraceFactory, boolean analyzeLocalDeclaration) {
this.context = context; this.context = context;
this.flowDataTraceFactory = flowDataTraceFactory; this.flowDataTraceFactory = flowDataTraceFactory;
isDeclaredLocally = declaredLocally; this.analyzeLocalDeclaration = analyzeLocalDeclaration;
this.typeInferrerServices = context.getSemanticServices().getTypeInferrerServices(context.getTrace()); this.typeInferrerServices = context.getSemanticServices().getTypeInferrerServices(context.getTrace());
} }
@@ -84,7 +84,7 @@ public class ControlFlowAnalyzer {
private void checkClassOrObject(JetClassOrObject klass, MutableClassDescriptor classDescriptor) { private void checkClassOrObject(JetClassOrObject klass, MutableClassDescriptor classDescriptor) {
JetFlowInformationProvider flowInformationProvider = new JetFlowInformationProvider((JetDeclaration) klass, (JetExpression) klass, flowDataTraceFactory, context.getTrace()); JetFlowInformationProvider flowInformationProvider = new JetFlowInformationProvider((JetDeclaration) klass, (JetExpression) klass, flowDataTraceFactory, context.getTrace());
flowInformationProvider.markUninitializedVariables((JetElement) klass, true, isDeclaredLocally); flowInformationProvider.markUninitializedVariables((JetElement) klass, true, analyzeLocalDeclaration);
} }
private void checkFunction(JetDeclarationWithBody function, FunctionDescriptor functionDescriptor, final @NotNull JetType expectedReturnType) { private void checkFunction(JetDeclarationWithBody function, FunctionDescriptor functionDescriptor, final @NotNull JetType expectedReturnType) {
@@ -138,7 +138,7 @@ public class ControlFlowAnalyzer {
} }
}); });
} }
flowInformationProvider.markUninitializedVariables(function.asElement(), false, isDeclaredLocally); flowInformationProvider.markUninitializedVariables(function.asElement(), false, analyzeLocalDeclaration);
if (((JetDeclaration) function).hasModifier(JetTokens.INLINE_KEYWORD)) { if (((JetDeclaration) function).hasModifier(JetTokens.INLINE_KEYWORD)) {
//inline functions after M1 //inline functions after M1
// flowInformationProvider.markNotOnlyInvokedFunctionVariables(function.asElement(), functionDescriptor.getValueParameters()); // flowInformationProvider.markNotOnlyInvokedFunctionVariables(function.asElement(), functionDescriptor.getValueParameters());
@@ -158,4 +158,9 @@ fun nullIsNotNothing() : Unit {
return return
} }
fail() fail()
} }
fun returnInWhile(a: Int) {
do {return}
while (<!UNREACHABLE_CODE!>1 > a<!>)
}
@@ -8,6 +8,7 @@ import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
import com.intellij.util.IncorrectOperationException; import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.diagnostics.DiagnosticParameter;
import org.jetbrains.jet.lang.diagnostics.DiagnosticParameters; import org.jetbrains.jet.lang.diagnostics.DiagnosticParameters;
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters; import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters;
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithPsiElement; import org.jetbrains.jet.lang.diagnostics.DiagnosticWithPsiElement;
@@ -18,6 +19,8 @@ import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.JetBundle;
import java.util.Arrays;
/** /**
* @author svtk * @author svtk
*/ */
@@ -73,10 +76,12 @@ public class ChangeVariableMutabilityFix extends JetIntentionAction<JetProperty>
return new JetIntentionActionFactory<JetElement>() { return new JetIntentionActionFactory<JetElement>() {
@Override @Override
public JetIntentionAction<JetElement> createAction(DiagnosticWithPsiElement diagnostic) { public JetIntentionAction<JetElement> createAction(DiagnosticWithPsiElement diagnostic) {
DiagnosticWithParameters<PsiElement> diagnosticWithParameters = assertAndCastToDiagnosticWithParameters(diagnostic, DiagnosticParameters.PROPERTY); if (diagnostic instanceof DiagnosticWithParameters) {
JetProperty property = diagnosticWithParameters.getParameter(DiagnosticParameters.PROPERTY); DiagnosticWithParameters<PsiElement> diagnosticWithParameters = assertAndCastToDiagnosticWithParameters(diagnostic, DiagnosticParameters.PROPERTY);
if (diagnostic.getPsiElement().getContainingFile() == property.getContainingFile()) { JetProperty property = diagnosticWithParameters.getParameter(DiagnosticParameters.PROPERTY);
return (JetIntentionAction) new ChangeVariableMutabilityFix(property); if (diagnostic.getPsiElement().getContainingFile() == property.getContainingFile()) {
return (JetIntentionAction) new ChangeVariableMutabilityFix(property);
}
} }
return null; return null;
} }