jif.types
Interface JifTypeSystem

All Superinterfaces:
polyglot.ext.param.types.ParamTypeSystem, polyglot.types.TypeSystem
All Known Implementing Classes:
JifTypeSystem_c

public interface JifTypeSystem
extends polyglot.ext.param.types.ParamTypeSystem

Jif type system.


Field Summary
 
Fields inherited from interface polyglot.types.TypeSystem
SERIALIZE_MEMBERS_WITH_CONTAINER
 
Method Summary
 java.util.List abstractSuperInterfaces(polyglot.types.ReferenceType rt)
          Exposes utility method of TypeSystem_c
 ActsForConstraint actsForConstraint(polyglot.util.Position pos, Principal actor, Principal granter, boolean isEquiv)
          Construct an acts-for constraint.
 ArgLabel argLabel(polyglot.util.Position pos, polyglot.types.VarInstance li)
           
 AuthConstraint authConstraint(polyglot.util.Position pos, java.util.List principals)
          Construct an authority constraint.
 Label bottomLabel()
           
 Label bottomLabel(polyglot.util.Position pos)
           
 CallerConstraint callerConstraint(polyglot.util.Position pos, java.util.List principals)
          Construct a caller constraint.
 CovariantParamLabel covariantLabel(polyglot.util.Position pos, ParamInstance pi)
           
 DefaultSignature defaultSignature()
           
 DynamicLabel dynamicLabel(polyglot.util.Position pos, AccessPath path)
           
 DynamicPrincipal dynamicPrincipal(polyglot.util.Position pos, AccessPath path)
           
 boolean equalsNoStrip(polyglot.types.TypeObject t1, polyglot.types.TypeObject t2)
          Compares t1 to t2 without stripping off all the parameters and labels
 ExceptionPath exceptionPath(polyglot.types.Type type)
           
 ExternalPrincipal externalPrincipal(polyglot.util.Position pos, java.lang.String name)
           
 VarLabel freshLabelVariable(polyglot.util.Position pos, java.lang.String s, java.lang.String description)
           
 Path gotoPath(polyglot.ast.Branch.Kind kind, java.lang.String target)
           
 polyglot.types.ClassType hasUntrustedAncestor(polyglot.types.Type t)
          Check if the class has an untrusted non-jif ancestor.
 boolean isAccessible(polyglot.types.MemberInstance mi, polyglot.types.ClassType contextClass)
          Exposes utility method of TypeSystem_c
 boolean isJifClass(polyglot.types.Type t)
          Returns true if the type is a Jif class (will return false if the type is just a jif signature for a java class).
 boolean isLabel(polyglot.types.Type t)
          Tests if the type is "label".
 boolean isLabeled(polyglot.types.Type type)
          Returns true if the type is labeled.
 boolean isParamsRuntimeRep(polyglot.types.Type t)
          Returns true if the type is a Jif class, or if it is a non-Jif class that represents parameters at runtime.
 boolean isPrincipal(polyglot.types.Type t)
          Tests if the type is "principal".
 Label join(Label L1, Label L2)
          Returns the join of L1 and L2.
 Label joinLabel(polyglot.util.Position pos, java.util.Collection components)
           
 polyglot.types.PrimitiveType Label()
          Returns the "label" type.
 LabeledType labeledType(polyglot.util.Position pos, polyglot.types.Type type, Label label)
          Returns a labeled type, type{label}.
 LabelLeAssertion labelLeAssertion(polyglot.util.Position pos, Label lhs, Label rhs)
          Construct an acts-for constraint.
 Label labelOfField(polyglot.types.FieldInstance vi, Label pc)
          Get the label of the field, folding in the PC if appropriate.
 Label labelOfLocal(polyglot.types.LocalInstance vi, Label pc)
          Get the label of the local, folding in the PC if appropriate.
 Label labelOfType(polyglot.types.Type type)
          Get the label of the type, or bottom if unlabeled
 Label labelOfType(polyglot.types.Type type, Label defaultLabel)
          Get the label of the type, or defaultLabel if unlabeled.
 boolean leq(Label L1, Label L2)
           
 boolean leq(Label L1, Label L2, LabelEnv env)
          Returns true iff L1 <= L2 in ph.
 Label notTaken()
           
 Label notTaken(polyglot.util.Position pos)
           
 polyglot.types.ClassType nullInstantiate(polyglot.util.Position pos, polyglot.ext.param.types.PClass pc)
           
 ParamInstance paramInstance(polyglot.util.Position pos, JifClassType container, ParamInstance.Kind kind, java.lang.String name)
          Constructs a parameter instance for a class parameter declaration
 ParamLabel paramLabel(polyglot.util.Position pos, ParamInstance pi)
           
 PathMap pathMap()
           
 PathMap pathMap(Path path, Label L)
           
 PolicyLabel policyLabel(polyglot.util.Position pos, Principal owner, java.util.Collection readers)
           
 polyglot.types.PrimitiveType Principal()
          Returns the "principal" type.
 polyglot.types.Type PrincipalClass()
          Returns the class jif.lang.Principal.
 PrincipalInstance principalInstance(polyglot.util.Position pos, ExternalPrincipal principal)
          Constructs a principal instance for an external principal.
 ParamPrincipal principalParam(polyglot.util.Position pos, ParamInstance pi)
           
 Label runtimeLabel()
           
 Label runtimeLabel(polyglot.util.Position pos)
           
 Solver solver(java.lang.String solverName)
          Returns a new label constraint system solver.
 ThisLabel thisLabel(JifClassType ct)
           
 ThisLabel thisLabel(polyglot.util.Position pos, JifClassType ct)
           
 Label topLabel()
           
 Label topLabel(polyglot.util.Position pos)
           
 UnknownLabel unknownLabel(polyglot.util.Position pos)
           
 Param unknownParam(polyglot.util.Position pos)
           
 UnknownPrincipal unknownPrincipal(polyglot.util.Position pos)
           
 polyglot.types.Type unlabel(polyglot.types.Type type)
          Remove the label from a type, if any.
 
Methods inherited from interface polyglot.ext.param.types.ParamTypeSystem
instantiate, mutablePClass, subst, subst, subst
 
Methods inherited from interface polyglot.types.TypeSystem
Abstract, ArithmeticException, arrayOf, arrayOf, arrayOf, arrayOf, ArrayStoreException, Boolean, Byte, callValid, canCoerceToString, canOverride, Char, checkAccessFlags, checkClassConformance, checkConstructorFlags, checkCycles, checkFieldFlags, checkInitializerFlags, checkLocalClassFlags, checkLocalFlags, checkMemberClassFlags, checkMethodFlags, checkOverride, checkTopLevelClassFlags, Class, classAccessible, classAccessible, classAccessibleFromPackage, ClassCastException, classContextResolver, classContextResolver, Cloneable, constructorInstance, createClassContextResolver, createClassType, createClassType, createClassType, createClassType, createContext, createNewFlag, createPackage, createPackage, createPackageContextResolver, defaultClassInitializer, defaultConstructor, defaultPackageImports, descendsFrom, deserializedClassInitializer, Double, equals, Error, Exception, extensionInfo, fieldInstance, Final, findConstructor, findConstructor, findField, findField, findField, findImplementingMethod, findMemberClass, findMemberClass, findMemberClass, findMethod, findMethod, flagsForBits, Float, forName, getTransformedClassName, getTypeEncoderRootSet, hasEnclosingInstance, hasFormals, hasMethod, hasMethodNamed, implemented, importTable, importTable, initialize, initializerInstance, Int, Interface, interfaces, isAccessible, isCanonical, isCastValid, isEnclosed, isImplicitCastValid, isSameMethod, isSubtype, isThrowable, isUncheckedException, leastCommonAncestor, legalAbstractMethodFlags, legalAccessFlags, legalConstructorFlags, legalFieldFlags, legalInitializerFlags, legalInterfaceFlags, legalLocalClassFlags, legalLocalFlags, legalMemberClassFlags, legalMethodFlags, legalTopLevelClassFlags, loadedResolver, localInstance, Long, methodCallValid, methodInstance, moreSpecific, Native, NoFlags, Null, NullPointerException, numericConversionValid, numericConversionValid, Object, OutOfBoundsException, overrides, packageContextResolver, packageContextResolver, packageContextResolver, packageEquals, packageExists, packageForName, packageForName, parsedResolver, placeHolder, placeHolder, primitiveForName, Private, promote, promote, Protected, Public, restoreSystemResolver, RuntimeException, saveSystemResolver, Serializable, Short, Static, staticTarget, StrictFP, String, superType, Synchronized, systemResolver, Throwable, throwsSubset, Transient, translateArray, translateClass, translatePackage, translatePrimitive, typeEquals, typeForName, uncheckedExceptions, unknownPackage, unknownQualifier, unknownType, Void, Volatile, wrapperTypeString
 

Method Detail

Label

polyglot.types.PrimitiveType Label()
Returns the "label" type.


Principal

polyglot.types.PrimitiveType Principal()
Returns the "principal" type.


PrincipalClass

polyglot.types.Type PrincipalClass()
Returns the class jif.lang.Principal.


labeledType

LabeledType labeledType(polyglot.util.Position pos,
                        polyglot.types.Type type,
                        Label label)
Returns a labeled type, type{label}.


nullInstantiate

polyglot.types.ClassType nullInstantiate(polyglot.util.Position pos,
                                         polyglot.ext.param.types.PClass pc)

paramInstance

ParamInstance paramInstance(polyglot.util.Position pos,
                            JifClassType container,
                            ParamInstance.Kind kind,
                            java.lang.String name)
Constructs a parameter instance for a class parameter declaration


principalInstance

PrincipalInstance principalInstance(polyglot.util.Position pos,
                                    ExternalPrincipal principal)
Constructs a principal instance for an external principal.


isPrincipal

boolean isPrincipal(polyglot.types.Type t)
Tests if the type is "principal".


isLabel

boolean isLabel(polyglot.types.Type t)
Tests if the type is "label".


pathMap

PathMap pathMap()

pathMap

PathMap pathMap(Path path,
                Label L)

exceptionPath

ExceptionPath exceptionPath(polyglot.types.Type type)

gotoPath

Path gotoPath(polyglot.ast.Branch.Kind kind,
              java.lang.String target)

unknownParam

Param unknownParam(polyglot.util.Position pos)

principalParam

ParamPrincipal principalParam(polyglot.util.Position pos,
                              ParamInstance pi)

dynamicPrincipal

DynamicPrincipal dynamicPrincipal(polyglot.util.Position pos,
                                  AccessPath path)

externalPrincipal

ExternalPrincipal externalPrincipal(polyglot.util.Position pos,
                                    java.lang.String name)

unknownPrincipal

UnknownPrincipal unknownPrincipal(polyglot.util.Position pos)

freshLabelVariable

VarLabel freshLabelVariable(polyglot.util.Position pos,
                            java.lang.String s,
                            java.lang.String description)

topLabel

Label topLabel(polyglot.util.Position pos)

bottomLabel

Label bottomLabel(polyglot.util.Position pos)

notTaken

Label notTaken(polyglot.util.Position pos)

runtimeLabel

Label runtimeLabel(polyglot.util.Position pos)

topLabel

Label topLabel()

bottomLabel

Label bottomLabel()

notTaken

Label notTaken()

runtimeLabel

Label runtimeLabel()

covariantLabel

CovariantParamLabel covariantLabel(polyglot.util.Position pos,
                                   ParamInstance pi)

paramLabel

ParamLabel paramLabel(polyglot.util.Position pos,
                      ParamInstance pi)

policyLabel

PolicyLabel policyLabel(polyglot.util.Position pos,
                        Principal owner,
                        java.util.Collection readers)

joinLabel

Label joinLabel(polyglot.util.Position pos,
                java.util.Collection components)

dynamicLabel

DynamicLabel dynamicLabel(polyglot.util.Position pos,
                          AccessPath path)

argLabel

ArgLabel argLabel(polyglot.util.Position pos,
                  polyglot.types.VarInstance li)

thisLabel

ThisLabel thisLabel(polyglot.util.Position pos,
                    JifClassType ct)

thisLabel

ThisLabel thisLabel(JifClassType ct)

unknownLabel

UnknownLabel unknownLabel(polyglot.util.Position pos)

join

Label join(Label L1,
           Label L2)
Returns the join of L1 and L2.


leq

boolean leq(Label L1,
            Label L2,
            LabelEnv env)
Returns true iff L1 <= L2 in ph.


leq

boolean leq(Label L1,
            Label L2)

actsForConstraint

ActsForConstraint actsForConstraint(polyglot.util.Position pos,
                                    Principal actor,
                                    Principal granter,
                                    boolean isEquiv)
Construct an acts-for constraint.


labelLeAssertion

LabelLeAssertion labelLeAssertion(polyglot.util.Position pos,
                                  Label lhs,
                                  Label rhs)
Construct an acts-for constraint.


authConstraint

AuthConstraint authConstraint(polyglot.util.Position pos,
                              java.util.List principals)
Construct an authority constraint.


callerConstraint

CallerConstraint callerConstraint(polyglot.util.Position pos,
                                  java.util.List principals)
Construct a caller constraint.


labelOfField

Label labelOfField(polyglot.types.FieldInstance vi,
                   Label pc)
Get the label of the field, folding in the PC if appropriate.


labelOfLocal

Label labelOfLocal(polyglot.types.LocalInstance vi,
                   Label pc)
Get the label of the local, folding in the PC if appropriate.


labelOfType

Label labelOfType(polyglot.types.Type type)
Get the label of the type, or bottom if unlabeled


labelOfType

Label labelOfType(polyglot.types.Type type,
                  Label defaultLabel)
Get the label of the type, or defaultLabel if unlabeled.


unlabel

polyglot.types.Type unlabel(polyglot.types.Type type)
Remove the label from a type, if any.


isLabeled

boolean isLabeled(polyglot.types.Type type)
Returns true if the type is labeled.


isJifClass

boolean isJifClass(polyglot.types.Type t)
Returns true if the type is a Jif class (will return false if the type is just a jif signature for a java class).


isParamsRuntimeRep

boolean isParamsRuntimeRep(polyglot.types.Type t)
Returns true if the type is a Jif class, or if it is a non-Jif class that represents parameters at runtime.


hasUntrustedAncestor

polyglot.types.ClassType hasUntrustedAncestor(polyglot.types.Type t)
Check if the class has an untrusted non-jif ancestor. An untrusted non-jif ancestor is any non-jif ancestor that is not one of java.lang.Object, java.lang.Throwable, java.lang.Error, java.lang.Exception, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.IndexOutOfBoundsException, java.lang.RuntimeException or java.lang.SecurityException.

Parameters:
t - Type to check
Returns:
null if ct has no untrusted non-Jif ancestor, and the ClassType of an untrusted non-Jif ancestor otherwise.

abstractSuperInterfaces

java.util.List abstractSuperInterfaces(polyglot.types.ReferenceType rt)
Exposes utility method of TypeSystem_c


isAccessible

boolean isAccessible(polyglot.types.MemberInstance mi,
                     polyglot.types.ClassType contextClass)
Exposes utility method of TypeSystem_c

Specified by:
isAccessible in interface polyglot.types.TypeSystem

solver

Solver solver(java.lang.String solverName)
Returns a new label constraint system solver.


defaultSignature

DefaultSignature defaultSignature()

equalsNoStrip

boolean equalsNoStrip(polyglot.types.TypeObject t1,
                      polyglot.types.TypeObject t2)
Compares t1 to t2 without stripping off all the parameters and labels

Parameters:
t1 -
t2 -
Returns: