001 /* 002 * Copyright 2010-2015 JetBrains s.r.o. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.jetbrains.kotlin.resolve.calls.smartcasts; 018 019 import com.google.common.collect.ImmutableMap; 020 import com.google.common.collect.SetMultimap; 021 import org.jetbrains.annotations.NotNull; 022 import org.jetbrains.kotlin.types.JetType; 023 024 import java.util.Map; 025 import java.util.Set; 026 027 public interface DataFlowInfo { 028 DataFlowInfo EMPTY = new DelegatingDataFlowInfo(null, ImmutableMap.<DataFlowValue, Nullability>of(), 029 DelegatingDataFlowInfo.newTypeInfo()); 030 031 @NotNull 032 Map<DataFlowValue, Nullability> getCompleteNullabilityInfo(); 033 034 @NotNull 035 SetMultimap<DataFlowValue, JetType> getCompleteTypeInfo(); 036 037 @NotNull 038 Nullability getNullability(@NotNull DataFlowValue key); 039 040 @NotNull 041 Set<JetType> getPossibleTypes(@NotNull DataFlowValue key); 042 043 @NotNull 044 DataFlowInfo equate(@NotNull DataFlowValue a, @NotNull DataFlowValue b); 045 046 @NotNull 047 DataFlowInfo disequate(@NotNull DataFlowValue a, @NotNull DataFlowValue b); 048 049 @NotNull 050 DataFlowInfo establishSubtyping(@NotNull DataFlowValue value, @NotNull JetType type); 051 052 @NotNull 053 DataFlowInfo and(@NotNull DataFlowInfo other); 054 055 @NotNull 056 DataFlowInfo or(@NotNull DataFlowInfo other); 057 }