diff --git a/Semantic_Analizer_Tests/src/Basic_tests/OopNegativeSemanticTest.ttcn b/Semantic_Analizer_Tests/src/Basic_tests/OopNegativeSemanticTest.ttcn index 1edb7bd700d20fad8d01e8f22807a329e88fc3dd..86f09659c7a0439f8f993773c7ac85292b9541f1 100755 --- a/Semantic_Analizer_Tests/src/Basic_tests/OopNegativeSemanticTest.ttcn +++ b/Semantic_Analizer_Tests/src/Basic_tests/OopNegativeSemanticTest.ttcn @@ -30,6 +30,7 @@ type class BadInheritance extends MyUnion { } type class MinimalClass { } +type class @trait BaseClass { } type class @abstract MinimalAbstractClass { } type class @final MinimalFinalClass { } type class @trait MinimalTraitClass { } @@ -46,6 +47,10 @@ type class BadExtends3 extends MinimalFinalClass { } +type class RepeatedExtends extends MinimalClass, BaseClass, MinimalClass { + +} + type class @trait BadTraitClass { public var integer m_int := 0; public timer Timer; diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/ClassTypeReferenceList.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/ClassTypeReferenceList.java index 59adfc1e8cc26d0d0867353f89d8f19ebd5282a9..a5bbfc07d0c5fb4cf1eae24c62eeef1fcfb585ad 100755 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/ClassTypeReferenceList.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/ClassTypeReferenceList.java @@ -9,6 +9,7 @@ package org.eclipse.titan.designer.AST.TTCN3.types; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,6 +37,8 @@ public final class ClassTypeReferenceList extends ASTNode implements ILocateable private final String ONLYONNONTRAIT = "A class can only extend one non-trait class"; private final String TRAITEXTENDSTRAIT = "A trait class can only extend trait classes"; private final String FINALCANNOTBEEXTENDED = "A final class cannot be extended"; + private final String DUPLICATECOMPONENTREFERENCEFIRST = "Duplicate reference to class `{0}'' was first declared here"; + private final String DUPLICATECOMPONENTREFERENCEREPEATED = "Duplicate reference to class `{0}'' was declared here again"; private Class_Type parentClass; @@ -144,10 +147,10 @@ public final class ClassTypeReferenceList extends ASTNode implements ILocateable if (classTypeBody != null) { if (classTypeBodies.containsKey(classTypeBody)) { classTypeBodies.get(classTypeBody).getId().getLocation().reportSingularSemanticError( - MessageFormat.format(ComponentTypeReferenceList.DUPLICATECOMPONENTREFERENCEFIRST, classTypeBody.getIdentifier() + MessageFormat.format(DUPLICATECOMPONENTREFERENCEFIRST, classTypeBody.getIdentifier() .getDisplayName())); reference.getLocation().reportSemanticError( - MessageFormat.format(ComponentTypeReferenceList.DUPLICATECOMPONENTREFERENCEREPEATED, reference.getDisplayName())); + MessageFormat.format(DUPLICATECOMPONENTREFERENCEREPEATED, reference.getDisplayName())); } else { classTypeBodies.put(classTypeBody, reference); orderedClassTypeBodies.add(classTypeBody); diff --git a/org.eclipse.titan.regressiontests/src/org/eclipse/titan/regressiontests/designer/statictests/Basic_tests/OOP_Semantic_tests.java b/org.eclipse.titan.regressiontests/src/org/eclipse/titan/regressiontests/designer/statictests/Basic_tests/OOP_Semantic_tests.java index 174d4580992c43ad8018252a2aa4eba876df86c3..8148839463a1ed4f1fc4a42fac4e5612dab055d5 100755 --- a/org.eclipse.titan.regressiontests/src/org/eclipse/titan/regressiontests/designer/statictests/Basic_tests/OOP_Semantic_tests.java +++ b/org.eclipse.titan.regressiontests/src/org/eclipse/titan/regressiontests/designer/statictests/Basic_tests/OOP_Semantic_tests.java @@ -45,10 +45,10 @@ public class OOP_Semantic_tests { private ArrayList oopNegative_ttcn_initializer() { //oopNegativeSemanticTest.ttcn - ArrayList markersToCheck = new ArrayList(41); + ArrayList markersToCheck = new ArrayList(44); int lineNum = 28; markersToCheck.add(new MarkerToCheck("class type expected", lineNum, IMarker.SEVERITY_ERROR)); - lineNum += 9; + lineNum += 10; int i = 0; for (i = 0; i < 2; i++) { markersToCheck.add(new MarkerToCheck("A class can only extend one non-trait class", lineNum, IMarker.SEVERITY_ERROR)); @@ -58,6 +58,10 @@ public class OOP_Semantic_tests { markersToCheck.add(new MarkerToCheck("A trait class can only extend trait classes", lineNum, IMarker.SEVERITY_ERROR)); lineNum += 4; markersToCheck.add(new MarkerToCheck("A final class cannot be extended", lineNum, IMarker.SEVERITY_ERROR)); + lineNum += 4; + markersToCheck.add(new MarkerToCheck("A class can only extend one non-trait class", lineNum, IMarker.SEVERITY_ERROR)); + markersToCheck.add(new MarkerToCheck("Duplicate reference to class `MinimalClass' was declared here again", lineNum, IMarker.SEVERITY_ERROR)); + markersToCheck.add(new MarkerToCheck("Duplicate reference to class `MinimalClass' was first declared here", lineNum, IMarker.SEVERITY_ERROR)); lineNum += 5; for (i = 0; i < 2; i++) { markersToCheck.add(new MarkerToCheck("Trait classes can only declare methods", lineNum++, IMarker.SEVERITY_ERROR));