@ -224,373 +224,405 @@ let mapPut_list =
; ( cp , " java.util.Map.put(java.lang.Object,java.lang.Object):java.lang.Object " ) ]
; ( cp , " java.util.Map.put(java.lang.Object,java.lang.Object):java.lang.Object " ) ]
type nonnull_alternative_method = { package_name : string ; class_name : string ; method_name : string }
(* Nullable methods that have non-nullable signatures.
Format is a triple : ( < nullability > , < method > , < alternative > ) , * )
let nullable_methods_with_nonnull_alternatives_list =
[ ( ( n , [ o ] )
, " android.view.View.findViewById(int):android.view.View "
, { package_name = " android.view " ; class_name = " View " ; method_name = " requireViewById " } )
; ( ( n , [ o ] )
, " android.app.Activity.findViewById(int):android.view.View "
, { package_name = " android.app " ; class_name = " Activity " ; method_name = " requireViewById " } ) ]
let nullable_method_with_nonnull_alternatives_nullability_list =
let result =
List . map nullable_methods_with_nonnull_alternatives_list
~ f : ( fun ( nullability , method_descr , _ ) -> ( nullability , method_descr ) )
in
List . iter result ~ f : ( fun ( ( ret_nullability , _ param_nullability ) , _ ) ->
if not ( ret_nullability = = n ) then
Logging . die Logging . InternalError " Function is expected to be nullable " ) ;
result
(* Methods with signatures that are not special enough to be described in one of lists above *)
let annotated_list_nullability_other =
[ ( o1 , " android.text.SpannableString.valueOf(java.lang.CharSequence):android.text.SpannableString " )
; ( o1 , " android.app.AlarmManager.cancel(android.app.PendingIntent):void " )
; ( o1 , " android.net.Uri.parse(java.lang.String):android.net.Uri " )
; ( n1 , " android.os.Parcel.writeList(java.util.List):void " )
; ( n2 , " android.os.Parcel.writeParcelable(android.os.Parcelable,int):void " )
; ( n1 , " android.os.Parcel.writeString(java.lang.String):void " )
; ( ( o , [ o ; o ; n ; n ; n ] )
, " com.android.sdklib.build.ApkBuilder.<init>(java.io.File,java.io.File,java.io.File,java.lang.String,java.io.PrintStream) "
)
; ( ( o , [ n ] )
, " com.android.manifmerger.ManifestMerger.xmlFileAndLine(org.w3c.dom.Node):com.android.manifmerger.IMergerLog$FileAndLine "
)
; ( on
, " com.android.util.CommandLineParser$Mode.process(com.android.util.CommandLineParser$Arg,java.lang.String):java.lang.Object "
)
; ( on
, " com.google.common.base.Objects$ToStringHelper.add(java.lang.String,java.lang.Object):com.google.common.base.Objects$ToStringHelper "
)
; ( n2 , " com.google.common.base.Objects.equal(java.lang.Object,java.lang.Object):boolean " )
; ( n1
, " com.google.common.base.Optional.fromNullable(java.lang.Object):com.google.common.base.Optional "
)
; ( ( n , [] ) , " com.google.common.base.Optional.orNull():java.lang.Object " )
; ( n1 , " com.google.common.base.Strings.nullToEmpty(java.lang.String):java.lang.String " )
; ( cg , " com.google.common.collect.ImmutableMap.get(java.lang.Object):java.lang.Object " )
; (* container get *)
( o1
, " com.google.common.collect.ImmutableList$Builder.add(java.lang.Object):com.google.common.collect.ImmutableList$Builder "
)
; ( o1
, " com.google.common.collect.ImmutableList$Builder.addAll(java.lang.Iterable):com.google.common.collect.ImmutableList$Builder "
)
; ( o1
, " com.google.common.collect.ImmutableList.of(java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o2
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o3
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o4
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o5
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o6
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o7
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o8
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o9
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o10
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o11
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o12
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableList.copyOf(java.lang.Iterable):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableList.copyOf(java.util.Collection):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableList.copyOf(java.util.Iterator):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableList.copyOf(java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o2
, " com.google.common.collect.ImmutableList.sortedCopyOf(java.util.Comparator,java.lang.Iterable):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableSet.of(java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o2
, " com.google.common.collect.ImmutableSet.of(java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o3
, " com.google.common.collect.ImmutableSet.of(java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o4
, " com.google.common.collect.ImmutableSet.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o5
, " com.google.common.collect.ImmutableSet.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSet.copyOf(java.lang.Iterable):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSet.copyOf(java.util.Collection):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSet.copyOf(java.util.Iterator):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSet.copyOf(java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSortedSet$Builder.add(java.lang.Object):com.google.common.collect.ImmutableSortedSet$Builder "
)
; ( o2
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o4
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o6
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o8
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o10
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o1
, " com.google.common.collect.ImmutableMap.copyOf(java.util.Map):com.google.common.collect.ImmutableMap "
)
; ( o1
, " com.google.common.collect.ImmutableMap.copyOf(java.lang.Iterable):com.google.common.collect.ImmutableMap "
)
; ( on
, " com.google.common.collect.Iterables.getFirst(java.lang.Iterable,java.lang.Object):java.lang.Object "
)
; ( o1
, " com.google.common.util.concurrent.SettableFuture.setException(java.lang.Throwable):boolean "
)
; ( o1 , " java.io.File.<init>(java.lang.String) " )
; ( n1 , " java.io.PrintStream.print(java.lang.String):void " )
; ( ( n , [ o ] ) , " java.lang.Class.getResource(java.lang.String):java.net.URL " )
; ( o1 , " java.lang.Class.isAssignableFrom(java.lang.Class):boolean " )
; ( n1 , " java.lang.Integer.equals(java.lang.Object):boolean " )
; ( o1 , " java.lang.Integer.parseInt(java.lang.String):int " )
; ( o1 , " java.lang.Long.parseLong(java.lang.String):long " )
; ( n1 , " java.lang.Object.equals(java.lang.Object):boolean " )
; ( n2 , " java.lang.RuntimeException.<init>(java.lang.String,java.lang.Throwable) " )
; ( n1 , " java.lang.String.equals(java.lang.Object):boolean " )
; ( n1 , " java.lang.StringBuilder.append(java.lang.String):java.lang.StringBuilder " )
; ( ( n , [ o ] ) , " java.lang.System.getProperty(java.lang.String):java.lang.String " )
; ( ( n , [ o ] ) , " java.lang.System.getenv(java.lang.String):java.lang.String " )
; ( on
, " java.net.URLClassLoader.newInstance(java.net.URL[],java.lang.ClassLoader):java.net.URLClassLoader "
)
; ( ng , " java.nio.file.Path.getParent():java.nio.file.Path " )
; ( n1 , " java.util.AbstractList.equals(java.lang.Object):boolean " )
; ( ca , " java.util.ArrayList.add(java.lang.Object):boolean " )
; ( ca , " java.util.List.add(java.lang.Object):boolean " )
; ( cg , " java.util.Map.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.Map.remove(java.lang.Object):java.lang.Object " )
; ( cp , " java.util.Map.put(java.lang.Object,java.lang.Object):java.lang.Object " )
; ( cg , " java.util.HashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.HashMap.remove(java.lang.Object):java.lang.Object " )
; ( cp , " java.util.HashMap.put(java.lang.Object,java.lang.Object):java.lang.Object " )
; ( cg , " java.util.concurrent.ConcurrentHashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.concurrent.ConcurrentHashMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.AbstractMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.AbstractMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.concurrent.ConcurrentSkipListMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.concurrent.ConcurrentSkipListMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.EnumMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.EnumMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.Hashtable.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.Hashtable.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.IdentityHashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.IdentityHashMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.LinkedHashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.LinkedHashMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.TreeMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.TreeMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.WeakHashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.WeakHashMap.remove(java.lang.Object):java.lang.Object " )
; ( ( n , [ o ] )
, " javax.lang.model.element.Element.getAnnotation(java.lang.Class):java.lang.annotation.Annotation "
)
; ( ng , " javax.lang.model.element.Element.getEnclosingElement():javax.lang.model.element.Element " )
; ( ng
, " javax.lang.model.element.ExecutableElement.getDefaultValue():javax.lang.model.element.AnnotationValue "
)
; ( ng
, " javax.lang.model.element.PackageElement.getEnclosingElement():javax.lang.model.element.Element "
)
; ( ng , " javax.lang.model.element.VariableElement.getConstantValue():java.lang.Object " )
; ( ng , " javax.lang.model.type.WildcardType.getSuperBound():javax.lang.model.type.TypeMirror " )
; ( ( n , [ o ] )
, " javax.lang.model.util.Elements.getPackageElement(java.lang.CharSequence):javax.lang.model.element.PackageElement "
)
; ( ( n , [ o ] )
, " javax.lang.model.util.Elements.getTypeElement(java.lang.CharSequence):javax.lang.model.element.TypeElement "
)
; ( ( n , [ o ] )
, " javax.lang.model.util.Elements.getDocComment(javax.lang.model.element.Element):java.lang.String "
)
; ( o1
, " javax.lang.model.util.Elements.getElementValuesWithDefaults(javax.lang.model.element.AnnotationMirror):java.util.Map "
)
; ( o1 , " javax.lang.model.util.Elements.isDeprecated(javax.lang.model.element.Element):boolean " )
; ( o1
, " javax.lang.model.util.Elements.getBinaryName(javax.lang.model.element.TypeElement):javax.lang.model.element.Name "
)
; ( o1
, " javax.lang.model.util.Elements.getPackageOf(javax.lang.model.element.Element):javax.lang.model.element.PackageElement "
)
; ( o1
, " javax.lang.model.util.Elements.getAllMembers(javax.lang.model.element.TypeElement):java.util.List "
)
; ( o1
, " javax.lang.model.util.Elements.getAllAnnotationMirrors(javax.lang.model.element.Element):java.util.List "
)
; ( o2
, " javax.lang.model.util.Elements.hides(javax.lang.model.element.Element, \
javax . lang . model . element . Element ) : boolean " )
; ( o3
, " javax.lang.model.util.Elements.overrides(javax.lang.model.element.ExecutableElement, \
javax . lang . model . element . ExecutableElement , javax . lang . model . element . TypeElement ) : boolean " )
; ( o1
, " javax.lang.model.util.Types.asElement(javax.lang.model.type.TypeMirror):javax.lang.model.element.Element "
)
; ( o2
, " javax.lang.model.util.Types.isSameType(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : boolean " )
; ( o2
, " javax.lang.model.util.Types.isSubtype(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : boolean " )
; ( o2
, " javax.lang.model.util.Types.isAssignable(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : boolean " )
; ( o2
, " javax.lang.model.util.Types.contains(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : boolean " )
; ( o2
, " javax.lang.model.util.Types.isSubsignature(javax.lang.model.type.ExecutableType, \
javax . lang . model . type . ExecutableType ) : boolean " )
; ( o1
, " javax.lang.model.util.Types.directSupertypes(javax.lang.model.type.TypeMirror):java.util.List "
)
; ( o1
, " javax.lang.model.util.Types.erasure(javax.lang.model.type.TypeMirror):javax.lang.model.type.TypeMirror "
)
; ( o1
, " javax.lang.model.util.Types.boxedClass(javax.lang.model.type.PrimitiveType):javax.lang.model.element.TypeElement "
)
; ( o1
, " javax.lang.model.util.Types.unboxedType(javax.lang.model.type.TypeMirror):javax.lang.model.type.PrimitiveType "
)
; ( o1
, " javax.lang.model.util.Types.capture(javax.lang.model.type.TypeMirror):javax.lang.model.type.TypeMirror "
)
; ( o1
, " javax.lang.model.util.Types.getArrayType(javax.lang.model.type.TypeMirror):javax.lang.model.type.ArrayType "
)
; ( o2
, " javax.lang.model.util.Types.getWildcardType(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : javax . lang . model . type . WildcardType " )
; ( o2
, " javax.lang.model.util.Types.getDeclaredType(javax.lang.model.element.TypeElement, \
javax . lang . model . type . TypeMirror [] ) : javax . lang . model . type . DeclaredType " )
; ( o3
, " javax.lang.model.util.Types.getDeclaredType(javax.lang.model.type.DeclaredType, \
javax . lang . model . element . TypeElement , \
javax . lang . model . type . TypeMirror [] ) : javax . lang . model . type . DeclaredType " )
; ( o2
, " javax.lang.model.util.Types.asMemberOf(javax.lang.model.type.DeclaredType, \
javax . lang . model . element . Element ) : javax . lang . model . type . TypeMirror " )
; ( n3
, " javax.tools.JavaCompiler.getStandardFileManager(javax.tools.DiagnosticListener,java.util.Locale,java.nio.charset.Charset):javax.tools.StandardJavaFileManager "
)
; ( ng , " javax.tools.JavaFileObject.getAccessLevel():javax.lang.model.element.Modifier " )
; ( ng , " javax.tools.JavaFileObject.getNestingKind():javax.lang.model.element.NestingKind " )
; ( o2
, " com.sun.source.util.SourcePositions.getStartPosition(com.sun.source.tree.CompilationUnitTree, \
com . sun . source . tree . Tree ) : long " )
; ( o2
, " com.sun.source.util.SourcePositions.getEndPosition(com.sun.source.tree.CompilationUnitTree, \
com . sun . source . tree . Tree ) : long " )
; ( ( n , [ o ; o ] )
, " com.sun.source.util.TreePath.getPath(com.sun.source.tree.CompilationUnitTree, \
com . sun . source . tree . Tree ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ; o ] )
, " com.sun.source.util.TreePath.getPath(com.sun.source.util.TreePath, \
com . sun . source . tree . Tree ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.Element):com.sun.source.tree.Tree "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.TypeElement):com.sun.source.tree.ClassTree "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.ExecutableElement):com.sun.source.tree.MethodTree "
)
; ( ( n , [ o ; o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.Element, \
javax . lang . model . element . AnnotationMirror ) : com . sun . source . tree . Tree " )
; ( ( n , [ o ; o ; o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.Element, \
javax . lang . model . element . AnnotationMirror , \
javax . lang . model . element . AnnotationValue ) : com . sun . source . tree . Tree " )
; ( o2
, " com.sun.source.util.Trees.getPath(com.sun.source.tree.CompilationUnitTree, \
com . sun . source . tree . Tree ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getPath(javax.lang.model.element.Element):com.sun.source.util.TreePath "
)
; ( ( n , [ o ; o ] )
, " com.sun.source.util.Trees.getPath(javax.lang.model.element.Element, \
javax . lang . model . element . AnnotationMirror ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ; o ; o ] )
, " com.sun.source.util.Trees.getPath(javax.lang.model.element.Element, \
javax . lang . model . element . AnnotationMirror , \
javax . lang . model . element . AnnotationValue ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getElement(com.sun.source.util.TreePath):javax.lang.model.element.Element "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getTypeMirror(com.sun.source.util.TreePath):javax.lang.model.type.TypeMirror "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getScope(com.sun.source.util.TreePath):com.sun.source.tree.Scope "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getDocComment(com.sun.source.util.TreePath):java.lang.String " )
; ( o2
, " com.sun.source.util.Trees.isAccessible(com.sun.source.tree.Scope, \
javax . lang . model . element . TypeElement ) : boolean " )
; ( o3
, " com.sun.source.util.Trees.isAccessible(com.sun.source.tree.Scope, \
javax . lang . model . element . Element , javax . lang . model . type . DeclaredType ) : boolean " )
; ( o1
, " com.sun.source.util.Trees.getOriginalType(javax.lang.model.type.ErrorType):javax.lang.model.type.TypeMirror "
)
; ( ( o , [ o ; o ; o ; o ] )
, " com.sun.source.util.Trees.printMessage(javax.tools.Diagnostic.Kind, java.lang.CharSequence, \
com . sun . source . tree . Tree , com . sun . source . tree . CompilationUnitTree ) : void " )
; ( o1
, " com.sun.source.util.Trees.getLub(com.sun.source.tree.CatchTree):javax.lang.model.type.TypeMirror "
)
; ( ( n , [ o ; n ; n ] )
, " org.w3c.dom.Document.setUserData(java.lang.String,java.lang.Object,org.w3c.dom.UserDataHandler):java.lang.Object "
)
; ( ( n , [ o ; n ; n ] )
, " org.w3c.dom.Node.setUserData(java.lang.String,java.lang.Object,org.w3c.dom.UserDataHandler):java.lang.Object "
)
; (* References *)
( ng , " java.lang.ref.Reference.get():java.lang.Object " )
; ( ng , " java.lang.ref.PhantomReference.get():java.lang.Object " )
; ( ng , " java.lang.ref.SoftReference.get():java.lang.Object " )
; ( ng , " java.lang.ref.WeakReference.get():java.lang.Object " )
; ( ng , " java.util.concurrent.atomic.AtomicReference.get():java.lang.Object " ) ]
(* * Models for nullability *)
(* * Models for nullability *)
let annotated_list_nullability =
let annotated_list_nullability =
check_not_null_list @ check_state_list @ check_argument_list @ true _ on_null_list
let result =
@ [ ( o1
check_not_null_list @ check_state_list @ check_argument_list @ true _ on_null_list
, " android.text.SpannableString.valueOf(java.lang.CharSequence):android.text.SpannableString "
@ nullable_method_with_nonnull_alternatives_nullability_list @ annotated_list_nullability_other
)
in
; ( o1 , " android.app.AlarmManager.cancel(android.app.PendingIntent):void " )
List . find_a_dup result ~ compare : ( fun ( _ , descr1 ) ( _ , descr2 ) -> String . compare descr1 descr2 )
; ( o1 , " android.net.Uri.parse(java.lang.String):android.net.Uri " )
| > Option . iter ~ f : ( fun ( _ , duplicate_method_descr ) ->
; ( n1 , " android.os.Parcel.writeList(java.util.List):void " )
Logging . die Logging . InternalError " Nullability table contains a duplicate %s "
; ( n2 , " android.os.Parcel.writeParcelable(android.os.Parcelable,int):void " )
duplicate_method_descr ) ;
; ( n1 , " android.os.Parcel.writeString(java.lang.String):void " )
result
; ( ( o , [ o ; o ; n ; n ; n ] )
, " com.android.sdklib.build.ApkBuilder.<init>(java.io.File,java.io.File,java.io.File,java.lang.String,java.io.PrintStream) "
)
; ( ( o , [ n ] )
, " com.android.manifmerger.ManifestMerger.xmlFileAndLine(org.w3c.dom.Node):com.android.manifmerger.IMergerLog$FileAndLine "
)
; ( on
, " com.android.util.CommandLineParser$Mode.process(com.android.util.CommandLineParser$Arg,java.lang.String):java.lang.Object "
)
; ( on
, " com.google.common.base.Objects$ToStringHelper.add(java.lang.String,java.lang.Object):com.google.common.base.Objects$ToStringHelper "
)
; ( n2 , " com.google.common.base.Objects.equal(java.lang.Object,java.lang.Object):boolean " )
; ( n1
, " com.google.common.base.Optional.fromNullable(java.lang.Object):com.google.common.base.Optional "
)
; ( ( n , [] ) , " com.google.common.base.Optional.orNull():java.lang.Object " )
; ( n1 , " com.google.common.base.Strings.nullToEmpty(java.lang.String):java.lang.String " )
; ( cg , " com.google.common.collect.ImmutableMap.get(java.lang.Object):java.lang.Object " )
; (* container get *)
( o1
, " com.google.common.collect.ImmutableList$Builder.add(java.lang.Object):com.google.common.collect.ImmutableList$Builder "
)
; ( o1
, " com.google.common.collect.ImmutableList$Builder.addAll(java.lang.Iterable):com.google.common.collect.ImmutableList$Builder "
)
; ( o1
, " com.google.common.collect.ImmutableList.of(java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o2
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o3
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o4
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o5
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o6
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o7
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o8
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o9
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o10
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o11
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o12
, " com.google.common.collect.ImmutableList.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableList.copyOf(java.lang.Iterable):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableList.copyOf(java.util.Collection):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableList.copyOf(java.util.Iterator):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableList.copyOf(java.lang.Object):com.google.common.collect.ImmutableList "
)
; ( o2
, " com.google.common.collect.ImmutableList.sortedCopyOf(java.util.Comparator,java.lang.Iterable):com.google.common.collect.ImmutableList "
)
; ( o1
, " com.google.common.collect.ImmutableSet.of(java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o2
, " com.google.common.collect.ImmutableSet.of(java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o3
, " com.google.common.collect.ImmutableSet.of(java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o4
, " com.google.common.collect.ImmutableSet.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o5
, " com.google.common.collect.ImmutableSet.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSet.copyOf(java.lang.Iterable):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSet.copyOf(java.util.Collection):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSet.copyOf(java.util.Iterator):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSet.copyOf(java.lang.Object):com.google.common.collect.ImmutableSet "
)
; ( o1
, " com.google.common.collect.ImmutableSortedSet$Builder.add(java.lang.Object):com.google.common.collect.ImmutableSortedSet$Builder "
)
; ( o2
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o4
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o6
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o8
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o10
, " com.google.common.collect.ImmutableMap.of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object):com.google.common.collect.ImmutableMap "
)
; ( o1
, " com.google.common.collect.ImmutableMap.copyOf(java.util.Map):com.google.common.collect.ImmutableMap "
)
; ( o1
, " com.google.common.collect.ImmutableMap.copyOf(java.lang.Iterable):com.google.common.collect.ImmutableMap "
)
; ( on
, " com.google.common.collect.Iterables.getFirst(java.lang.Iterable,java.lang.Object):java.lang.Object "
)
; ( o1
, " com.google.common.util.concurrent.SettableFuture.setException(java.lang.Throwable):boolean "
)
; ( o1 , " java.io.File.<init>(java.lang.String) " )
; ( n1 , " java.io.PrintStream.print(java.lang.String):void " )
; ( ( n , [ o ] ) , " java.lang.Class.getResource(java.lang.String):java.net.URL " )
; ( o1 , " java.lang.Class.isAssignableFrom(java.lang.Class):boolean " )
; ( n1 , " java.lang.Integer.equals(java.lang.Object):boolean " )
; ( o1 , " java.lang.Integer.parseInt(java.lang.String):int " )
; ( o1 , " java.lang.Long.parseLong(java.lang.String):long " )
; ( n1 , " java.lang.Object.equals(java.lang.Object):boolean " )
; ( n2 , " java.lang.RuntimeException.<init>(java.lang.String,java.lang.Throwable) " )
; ( n1 , " java.lang.String.equals(java.lang.Object):boolean " )
; ( n1 , " java.lang.StringBuilder.append(java.lang.String):java.lang.StringBuilder " )
; ( ( n , [ o ] ) , " java.lang.System.getProperty(java.lang.String):java.lang.String " )
; ( ( n , [ o ] ) , " java.lang.System.getenv(java.lang.String):java.lang.String " )
; ( on
, " java.net.URLClassLoader.newInstance(java.net.URL[],java.lang.ClassLoader):java.net.URLClassLoader "
)
; ( ng , " java.nio.file.Path.getParent():java.nio.file.Path " )
; ( n1 , " java.util.AbstractList.equals(java.lang.Object):boolean " )
; ( ca , " java.util.ArrayList.add(java.lang.Object):boolean " )
; ( ca , " java.util.List.add(java.lang.Object):boolean " )
; ( cg , " java.util.Map.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.Map.remove(java.lang.Object):java.lang.Object " )
; ( cp , " java.util.Map.put(java.lang.Object,java.lang.Object):java.lang.Object " )
; ( cg , " java.util.HashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.HashMap.remove(java.lang.Object):java.lang.Object " )
; ( cp , " java.util.HashMap.put(java.lang.Object,java.lang.Object):java.lang.Object " )
; ( cg , " java.util.concurrent.ConcurrentHashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.concurrent.ConcurrentHashMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.AbstractMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.AbstractMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.concurrent.ConcurrentSkipListMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.concurrent.ConcurrentSkipListMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.EnumMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.EnumMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.Hashtable.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.Hashtable.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.IdentityHashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.IdentityHashMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.LinkedHashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.LinkedHashMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.TreeMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.TreeMap.remove(java.lang.Object):java.lang.Object " )
; ( cg , " java.util.WeakHashMap.get(java.lang.Object):java.lang.Object " )
; ( cr , " java.util.WeakHashMap.remove(java.lang.Object):java.lang.Object " )
; ( ( n , [ o ] )
, " javax.lang.model.element.Element.getAnnotation(java.lang.Class):java.lang.annotation.Annotation "
)
; ( ng , " javax.lang.model.element.Element.getEnclosingElement():javax.lang.model.element.Element " )
; ( ng
, " javax.lang.model.element.ExecutableElement.getDefaultValue():javax.lang.model.element.AnnotationValue "
)
; ( ng
, " javax.lang.model.element.PackageElement.getEnclosingElement():javax.lang.model.element.Element "
)
; ( ng , " javax.lang.model.element.VariableElement.getConstantValue():java.lang.Object " )
; ( ng , " javax.lang.model.type.WildcardType.getSuperBound():javax.lang.model.type.TypeMirror " )
; ( ( n , [ o ] )
, " javax.lang.model.util.Elements.getPackageElement(java.lang.CharSequence):javax.lang.model.element.PackageElement "
)
; ( ( n , [ o ] )
, " javax.lang.model.util.Elements.getTypeElement(java.lang.CharSequence):javax.lang.model.element.TypeElement "
)
; ( ( n , [ o ] )
, " javax.lang.model.util.Elements.getDocComment(javax.lang.model.element.Element):java.lang.String "
)
; ( o1
, " javax.lang.model.util.Elements.getElementValuesWithDefaults(javax.lang.model.element.AnnotationMirror):java.util.Map "
)
; ( o1 , " javax.lang.model.util.Elements.isDeprecated(javax.lang.model.element.Element):boolean " )
; ( o1
, " javax.lang.model.util.Elements.getBinaryName(javax.lang.model.element.TypeElement):javax.lang.model.element.Name "
)
; ( o1
, " javax.lang.model.util.Elements.getPackageOf(javax.lang.model.element.Element):javax.lang.model.element.PackageElement "
)
; ( o1
, " javax.lang.model.util.Elements.getAllMembers(javax.lang.model.element.TypeElement):java.util.List "
)
; ( o1
, " javax.lang.model.util.Elements.getAllAnnotationMirrors(javax.lang.model.element.Element):java.util.List "
)
; ( o2
, " javax.lang.model.util.Elements.hides(javax.lang.model.element.Element, \
javax . lang . model . element . Element ) : boolean " )
; ( o3
, " javax.lang.model.util.Elements.overrides(javax.lang.model.element.ExecutableElement, \
javax . lang . model . element . ExecutableElement , javax . lang . model . element . TypeElement ) : boolean "
)
; ( o1
, " javax.lang.model.util.Types.asElement(javax.lang.model.type.TypeMirror):javax.lang.model.element.Element "
)
; ( o2
, " javax.lang.model.util.Types.isSameType(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : boolean " )
; ( o2
, " javax.lang.model.util.Types.isSubtype(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : boolean " )
; ( o2
, " javax.lang.model.util.Types.isAssignable(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : boolean " )
; ( o2
, " javax.lang.model.util.Types.contains(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : boolean " )
; ( o2
, " javax.lang.model.util.Types.isSubsignature(javax.lang.model.type.ExecutableType, \
javax . lang . model . type . ExecutableType ) : boolean " )
; ( o1
, " javax.lang.model.util.Types.directSupertypes(javax.lang.model.type.TypeMirror):java.util.List "
)
; ( o1
, " javax.lang.model.util.Types.erasure(javax.lang.model.type.TypeMirror):javax.lang.model.type.TypeMirror "
)
; ( o1
, " javax.lang.model.util.Types.boxedClass(javax.lang.model.type.PrimitiveType):javax.lang.model.element.TypeElement "
)
; ( o1
, " javax.lang.model.util.Types.unboxedType(javax.lang.model.type.TypeMirror):javax.lang.model.type.PrimitiveType "
)
; ( o1
, " javax.lang.model.util.Types.capture(javax.lang.model.type.TypeMirror):javax.lang.model.type.TypeMirror "
)
; ( o1
, " javax.lang.model.util.Types.getArrayType(javax.lang.model.type.TypeMirror):javax.lang.model.type.ArrayType "
)
; ( o2
, " javax.lang.model.util.Types.getWildcardType(javax.lang.model.type.TypeMirror, \
javax . lang . model . type . TypeMirror ) : javax . lang . model . type . WildcardType " )
; ( o2
, " javax.lang.model.util.Types.getDeclaredType(javax.lang.model.element.TypeElement, \
javax . lang . model . type . TypeMirror [] ) : javax . lang . model . type . DeclaredType " )
; ( o3
, " javax.lang.model.util.Types.getDeclaredType(javax.lang.model.type.DeclaredType, \
javax . lang . model . element . TypeElement , \
javax . lang . model . type . TypeMirror [] ) : javax . lang . model . type . DeclaredType " )
; ( o2
, " javax.lang.model.util.Types.asMemberOf(javax.lang.model.type.DeclaredType, \
javax . lang . model . element . Element ) : javax . lang . model . type . TypeMirror " )
; ( n3
, " javax.tools.JavaCompiler.getStandardFileManager(javax.tools.DiagnosticListener,java.util.Locale,java.nio.charset.Charset):javax.tools.StandardJavaFileManager "
)
; ( ng , " javax.tools.JavaFileObject.getAccessLevel():javax.lang.model.element.Modifier " )
; ( ng , " javax.tools.JavaFileObject.getNestingKind():javax.lang.model.element.NestingKind " )
; ( o2
, " com.sun.source.util.SourcePositions.getStartPosition(com.sun.source.tree.CompilationUnitTree, \
com . sun . source . tree . Tree ) : long " )
; ( o2
, " com.sun.source.util.SourcePositions.getEndPosition(com.sun.source.tree.CompilationUnitTree, \
com . sun . source . tree . Tree ) : long " )
; ( ( n , [ o ; o ] )
, " com.sun.source.util.TreePath.getPath(com.sun.source.tree.CompilationUnitTree, \
com . sun . source . tree . Tree ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ; o ] )
, " com.sun.source.util.TreePath.getPath(com.sun.source.util.TreePath, \
com . sun . source . tree . Tree ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.Element):com.sun.source.tree.Tree "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.TypeElement):com.sun.source.tree.ClassTree "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.ExecutableElement):com.sun.source.tree.MethodTree "
)
; ( ( n , [ o ; o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.Element, \
javax . lang . model . element . AnnotationMirror ) : com . sun . source . tree . Tree " )
; ( ( n , [ o ; o ; o ] )
, " com.sun.source.util.Trees.getTree(javax.lang.model.element.Element, \
javax . lang . model . element . AnnotationMirror , \
javax . lang . model . element . AnnotationValue ) : com . sun . source . tree . Tree " )
; ( o2
, " com.sun.source.util.Trees.getPath(com.sun.source.tree.CompilationUnitTree, \
com . sun . source . tree . Tree ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getPath(javax.lang.model.element.Element):com.sun.source.util.TreePath "
)
; ( ( n , [ o ; o ] )
, " com.sun.source.util.Trees.getPath(javax.lang.model.element.Element, \
javax . lang . model . element . AnnotationMirror ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ; o ; o ] )
, " com.sun.source.util.Trees.getPath(javax.lang.model.element.Element, \
javax . lang . model . element . AnnotationMirror , \
javax . lang . model . element . AnnotationValue ) : com . sun . source . util . TreePath " )
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getElement(com.sun.source.util.TreePath):javax.lang.model.element.Element "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getTypeMirror(com.sun.source.util.TreePath):javax.lang.model.type.TypeMirror "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getScope(com.sun.source.util.TreePath):com.sun.source.tree.Scope "
)
; ( ( n , [ o ] )
, " com.sun.source.util.Trees.getDocComment(com.sun.source.util.TreePath):java.lang.String " )
; ( o2
, " com.sun.source.util.Trees.isAccessible(com.sun.source.tree.Scope, \
javax . lang . model . element . TypeElement ) : boolean " )
; ( o3
, " com.sun.source.util.Trees.isAccessible(com.sun.source.tree.Scope, \
javax . lang . model . element . Element , javax . lang . model . type . DeclaredType ) : boolean " )
; ( o1
, " com.sun.source.util.Trees.getOriginalType(javax.lang.model.type.ErrorType):javax.lang.model.type.TypeMirror "
)
; ( ( o , [ o ; o ; o ; o ] )
, " com.sun.source.util.Trees.printMessage(javax.tools.Diagnostic.Kind, \
java . lang . CharSequence , com . sun . source . tree . Tree , \
com . sun . source . tree . CompilationUnitTree ) : void " )
; ( o1
, " com.sun.source.util.Trees.getLub(com.sun.source.tree.CatchTree):javax.lang.model.type.TypeMirror "
)
; ( ( n , [ o ; n ; n ] )
, " org.w3c.dom.Document.setUserData(java.lang.String,java.lang.Object,org.w3c.dom.UserDataHandler):java.lang.Object "
)
; ( ( n , [ o ; n ; n ] )
, " org.w3c.dom.Node.setUserData(java.lang.String,java.lang.Object,org.w3c.dom.UserDataHandler):java.lang.Object "
)
; (* References *)
( ng , " java.lang.ref.Reference.get():java.lang.Object " )
; ( ng , " java.lang.ref.PhantomReference.get():java.lang.Object " )
; ( ng , " java.lang.ref.SoftReference.get():java.lang.Object " )
; ( ng , " java.lang.ref.WeakReference.get():java.lang.Object " )
; ( ng , " java.util.concurrent.atomic.AtomicReference.get():java.lang.Object " ) ]
(* * Models for methods that do not return *)
(* * Models for methods that do not return *)
@ -621,3 +653,10 @@ let mapPut_table = mk_table mapPut_list
let noreturn_table = mk_table noreturn_list
let noreturn_table = mk_table noreturn_list
let true _ on_null_table = mk_table true _ on_null_list
let true _ on_null_table = mk_table true _ on_null_list
let nonnull_alternatives_table =
let method_descr_to_alternative =
List . map nullable_methods_with_nonnull_alternatives_list
~ f : ( fun ( _ , method_descr , alternative ) -> ( alternative , method_descr ) )
in
mk_table method_descr_to_alternative