Errors
When using the tooling, there are multiple errors you might encounter:
0xC1100 - Circular Inheritance
Description
Occurs when a component directly or indirectly inherits from itself, creating an inheritance cycle.
Example
component A extends B { }
component B extends A { }
How to fix
Break the inheritance cycle by refactoring one of the components so that no cyclic dependency remains.
0xC1101 - Missing Component
Description
The specified component cannot be found or resolved in the current context.
Example
component X extends UnknownComp { }
How to fix
Ensure that UnknownComp
exists and is imported or defined in the same package or module.
0xC1102 - Ambiguous Reference
Description
More than one component or element matches the given name, making resolution ambiguous.
Example
component pkg1.Foo { }
component pkg2.Foo { }
component Bar extends Foo { }
How to fix
Qualify your reference with the full package path or rename one of the conflicting components.
0xC1103 - In Port Unused
Description
An incoming port is declared but never connected or used in the model.
Example
component A {
port in String msg;
// msg is never connected
}
How to fix
Add a connector to route data into this port (e.g., B.out -> msg;
) or remove the msg
port if it isn’t required.
0xC1104 - Out Port Unused
Description
An outgoing port is declared but never connected or used in the model.
Example
component A {
port out Integer data;
// data is never sent or connected
}
How to fix
Connect this port to a target (e.g., data -> B.in;
) or remove the data
port if it isn’t delivering relevant output.
0xC1105 - Port Multiple Sender
Description
An incoming port receives values from more than one connector, causing conflicting data sources.
Example
component A {
port in Integer x;
port out Integer a, b;
a -> x;
b -> x; // second sender to x
}
How to fix
Ensure each input port has at most one source.
0xC1106 - In Port Not Connected
Description
An incoming port is declared but left unconnected, so it never receives data.
Example
component A {
port in Integer inVal;
// missing connector for inVal
}
How to fix
Create a connector to supply data to this port, for example:
component A {
port in Integer inVal;
component Source src;
// src has an out port o
B.o -> inVal;
}
Or remove inVal
if it’s not needed.
0xC1107 - Out Port Not Connected
Description
An outgoing port is declared but has no connectors, so its output is never delivered.
Example
component A {
port out Integer outVal;
// missing connector from outVal
}
0xC1108 - Missing Port
Description
A referenced port does not exist on the specified component.
Example
component A {
port out String o;
o -> unknown;
}
0xC1109 - Missing Subcomponent
Description
A referenced subcomponent cannot be found in the component definition.
Example
component A {
port in String i;
// forgot to declare sub
sub.o -> i;
}
0xC1110 - Connector Type Mismatch
Description
The type of the source port does not match the target port type.
Example
component A {
port out String txt;
port in Integer num;
txt -> num;
}
0xC1111 - Source Direction Mismatch
Description
Attempt to connect from an input port as if it were an output. In MontiArc, every connector must go from an output port to an input port.
Example
component A {
port in Integer i1, i2;
port out Integer o;
// wrong direction:
i1 -> i2;
}
0xC1112 - Target Direction Mismatch
Description
Attempt to write to an output port as if it were an input. In MontiArc, every connector must go from an output port to an input port.
Example
component A {
port out Integer o1, o2;
port in Integer i1;
// wrong directions:
o1 -> o2 ;
}
0xC1113 - Connector Timing Mismatch
Description
The timing annotations (sync
, delay
, etc.) on source and target ports differ incompatibly.
Example
component A {
port sync out Integer a;
port delay in Integer b;
a -> b;
}
0xC1114 - Multiple Timing Annotations
Description
A port has been annotated with more than one timing modifier.
Example
component A {
port sync delay out Integer x;
}
0xC1115 - Multiple Behavior
Description
A component defines more than one behavior block.
Example
component A {
automaton { /*...*/ }
compute { /*...*/ }
}
component B {
automaton { /*...*/ }
automaton { /*...*/ }
}
0xC1117 - Feedback Causality
Description
Occurs when a model contains a feedback loop without any form of delay, causing signals to propagate instantaneously in a cycle. This leads to undefined or nondeterministic behavior because there is no defined ordering for updates.
Example
component A {
port in Integer i;
port out Integer o;
}
component B {
port in Integer i;
A sub;
sub.o -> i;
o -> sub.i;
}
//Here, sub.o drives i and o drives sub.i within the same tick, forming a zero-delay feedback loop.
How to fix
Add a delay: annotate one port with <<delayed>>
to enforce at least one clock tick between signal propagation:
component A {
port in Integer i;
port <<delayed>> out Integer o;
}
component B {
A sub;
sub.o -> i;
o -> sub.i;
}
0xC1119 - Too Few Arguments
Description
A component instance is invoked with fewer arguments than required.
Example
component A(String s, Integer n) { }
component B {
A a("hello"); // missing second arg
}
How to fix
Provide all required arguments: A a("hello", 5);
.
0xC1120 - Too Many Arguments
Description
A component instance is given more arguments than its signature defines.
Example
component A(String s) { }
component B {
A a("x", 1); // extra arg
}
How to fix
Remove the extra arguments or adjust the component signature accordingly.
0xC1122 - Comp Arg Multiple Values
Description
The same named argument is assigned multiple values in a component instantiation.
Example
component A(x=1, x=2) { }
0xC1123 - Comp Arg Type Mismatch
Description
The provided argument type does not match the expected parameter type.
Example
component A(Integer x) { }
component B { A a("string"); }
// an Integer is intended not a String value
0xC1124 - Comp Arg Key Invalid
Description
An unknown key argument is used when instantiating a component.
Example
component A(x=1) { }
component B { A a(y=2); }
0xC1125 - Comp Arg Value After Key
Description
A positional argument follows a named argument, which is disallowed.
Example
component A(x, y) { }
component B { A a(x=1, 2); }
How to fix
Place all positional arguments before any named arguments.
0xC1126 - Optional Params Last
Description
Optional configuration parameters must come after all mandatory parameters in a component or invocation. Placing an optional parameter before a required one leads to ambiguity and is disallowed.
Example
component Comp(int opt = 1, int mand) { } // error: optional 'opt' before mandatory 'mand'
How to fix
Reorder the parameter list so that all mandatory parameters precede any optional ones:
component Comp(int mand, int opt = 1) { }
0xC1127 - Subcomponent Reference Cycle
Description
Subcomponents reference each other circularly.
Example
component A { component B b; }
component B { component A a; }
How to fix
Refactor the model to remove cyclic subcomponent definitions.
0xC1131 - Expected an Expression
Description
An expression was expected in a place where it was omitted or malformed.
Example
component A {
port out Integer x;
connect x -> ; // missing right-hand expression
}
0xC1132 - Heritage In Port Type Mismatch
Description
An inherited component redefines an incoming port with a type incompatible with its supertype.
Example
component Base { port in String m; }
component Sub extends Base { port in Integer m; }
How to fix
Align port types with the super component or rename the port.
0xC1133 - Heritage Out Port Type Mismatch
Description
An inherited component redefines an outgoing port with an incompatible type.
Example
component Base { port out Integer n; }
component Sub extends Base { port out String n; }
How to fix
Keep the same type as in the abstraction or choose a new port name.
0xC1134 - Heritage Port Direction Mismatch
Description
An inherited component changes the direction of a port from its supertype.
Example
component Base { port in Integer x; }
component Sub extends Base { port out Integer x; }
How to fix
Maintain the original direction (in or out) or rename the port.
0xC1135 - Port Ref In Static Context
Description
Port references are disallowed in static contexts such as field initializers or varif conditions—because ports only exist at runtime and cannot be accessed during static initialization.
Example
component B {
port in int i;
varif(i > 0) { } // error: 'i' referenced in static context
}
How to fix
Remove static usage or pass port values at runtime.
0xC1137 - Field Init Type Mismatch
Description
A component field is initialized with a value of the wrong type.
Example
component A {
boolean f = 1; }
0xC1139 - Param Default Type Mismatch
Description
A parameter’s default value does not match its declared type.
Example
component A(boolean p = 1) { }
0xC1142 - Comp Arg Multi Assignment
Description
Occurs when a component instantiation uses either the wrong assignment operator or assigns the same parameter more than once.
Example
component A(x := 5) { } // wrong operator (must be “=”)
component B(y = 1, y = 2) { } // duplicate assignment of “y”
0xC1143 - Component Lower Case
Description
Component names should start with an uppercase letter by convention.
Example
component myComp { }
0xC1144 - Subcomponent Upper Case
Description
Subcomponent instances should start with a lowercase letter.
Example
component A { component B Sub; }
How to fix
Rename to sub
.
0xC1145 - Port Upper Case
Description
Ports should start with a lowercase letter.
Example
component A { port in Integer Data; }
0xC1146 - Parameter Upper Case
Description
Parameters should start with a lowercase letter.
Example
component A(String Par) {}
0xC1147 - Field Upper Case
Description
Component fields should start with a lowercase letter.
Example
component A { boolean Bool; }
0xC1148 - Unique Identifier Names
Description
Multiple identifiers in the same scope share the same name.
Example
component A {
Integer x; String x;
}
0xC1149 - Restricted Identifier
Description
A reserved or restricted identifier is used where disallowed.
Example
component Comp {
port in int key; // ❌ “key” is restricted
}
0xC1150 - Unsupported Model Element
Description
A language feature is used that MontiArc does not support and is thus ignored.
Example
component A {
automaton {
final state s; // The final state is unsupported
}
}
0xC1151 - Read From Outgoing Port
Description
Attempt to read data from an outgoing port, which is write-only.
Example
component A { port out int o; int x = o; }
How to fix
Reverse connector direction or use an incoming port for reading.
0xC1152 - Write To Incoming Port
Description
Attempt to write data to an incoming port, which is read-only.
Example
component A { port in int i; i = 5; }
How to fix
Use an outgoing port or connector to send data.
0xC1153 - Write To Readonly Variable
Description
A component field declared as read-only is being assigned.
Example
component A { final int x; x = 1; }
0xC1154 - Invalid Context Assignment
Description
Assignments are not allowed in this syntactic context. You cannot use an assignment expression (=, +=, -=, etc.) in places where MontiArc does not expect it namely inside subcomponent argument lists or in connector declarations. Such contexts only allow simple parameter bindings or connector arrows, not arbitrary assignments.
Example
Component A {
port out int o;
port in int i;
B b(p = p = 1); // Nested assignment in a subcomponent instantiation
o = i; // Using '=' instead of '->'
}
0xC1155 - Invalid Context Increment Prefix
Description
Prefix increment (++x
) is used in a context where disallowed.
Example
component A { B b(p = ++p); }
How to fix
Perform increments within allowed behavioral code blocks.
0xC1156 - Invalid Context Decrement Prefix
Description
Prefix decrement (--x
) is used where not permitted.
Example
component A { B b(p = --p); }
How to fix
Use within valid behavioral blocks.
0xC1157 - Invalid Context Increment Suffix
Description
Suffix increment (x++
) is disallowed in this context.
Example
component A { B b(p = p++); }
How to fix
Place increments in behavior sections.
0xC1158 - Invalid Context Decrement Suffix
Description
Suffix decrement (x--
) is disallowed here.
Example
component A { B b(p = p--); }
How to fix
Use within valid operational code.
0xC1159 - Key Not Unique
Description
The same key is used multiple times when setting parameters.
Example
component A { A a(x=1, x=2); }
0xC1174 - Connectors In Atomic
Description
An atomic component is one without subcomponents; connectors cannot be used inside such components.
Example
component A {
port out Integer o;
port in Integer i;
// connectors forbidden in atomic
o -> i;
}
0xC1175 - Type Parameter Upper Case
Description
Type parameters should start with an uppercase letter by convention.
Example
component A<t> { }
How to fix
Rename the type parameter to an uppercase identifier:
component A<T> { }
0xC1176 - Type Argument Ignores Upper Bound
Description
Type parameter does not respect its declared upper bound.
Example
component A<T extends Number> { }
component B { A<String> inst; } // ❌ String does not extend Number
0xC1177 - Too Few Type Arguments
Description
Too few type arguments provided for a generic component.
Example
component A<K, V> { }
component B { A<String> inst; } // ❌ missing second argument
0xC1178 - Too Many Type Arguments
Description
Too many type arguments provided for a generic component.
Example
component A<T> { }
component B { A<String, Integer> inst; } // two args for one parameter
0xC1182 - Raw Use Of Parametrized Type
Description
Raw usage of a parameterized component type without type arguments.
Example
component A<T> { }
component B { A inst; } // raw use
0xC1184 - Refinement Port Name Mismatch
Description
Interface mismatch during refinement: a port exists in the abstraction but not in the refinement.
Example
component Base { port in Integer x; }
component Sub refines Base {
// missing port x
port in Integer y;
}
0xC1185 - Refinement Port Direction Changed
Description
Direction mismatch: a port changes from in
to out
or vice versa during refinement.
Example
component Base { port in Integer x; }
component Sub refines Base { port out Integer x; }
0xC1186 - Refinement Timing Mismatch In
Description
Illegal timing change for an incoming port during refinement.
Example
component Base { port sync in Integer i; }
component Sub refines Base { port in Integer i; }
0xC1187 - Refinement Timing Mismatch Out
Description
Illegal timing change for an outgoing port during refinement.
Example
component Base { port sync out Integer o; }
component Sub refines Base { port out Integer o; }
0xC1188 - Refinement In Port Type Mismatch
Description
Input port type in the refinement is not a supertype of the abstraction’s port type.
Example
component Base { port in Object o; }
component Sub refines Base { port in String o; }
0xC1189 - Refinement Out Port Type Mismatch
Description
Output port type in the refinement is not a subtype of the abstraction’s port type.
Example
component Base { port out String o; }
component Sub refines Base { port out Object o; }
0xC1190 - Circular Fields Dependency
Description
Component fields depend on each other circularly in their initializers.
Example
component A {
Integer a = b;
Integer b = a;
}
0xC1191 - IN Port Ref In Invalid Context
Description
Value of an incoming port is not available in the given static context.
Example
component A {
port in int i;
int x = i; // cannot read port in initializer
}
How to fix
Read port values at runtime (e.g., in behavior) or pass them through connectors.
0xC1192 - Out Port Member Accessed
Description
Cannot access an outgoing port or its members; output ports are write-only.
Example
component A {
port out Integer o;
compute {
int x = o; // cannot read output port
}
}
How to fix
Use the port as a connector source only, or read through an input port.
0xC1193 - Invalid Port Timing Override
Description
A port cannot override its timing annotation to an incompatible value.
Example
component Base { port in Integer o; }
component Sub extends Base { port sync in Integer o; }