diff --git a/Semantic_Analizer_Tests/src/Basic_tests/OopNegativeSemanticTest.ttcn b/Semantic_Analizer_Tests/src/Basic_tests/OopNegativeSemanticTest.ttcn index 86f09659c7a0439f8f993773c7ac85292b9541f1..10a66d267e02187cc634b6e6bcab4ad960259b47 100755 --- a/Semantic_Analizer_Tests/src/Basic_tests/OopNegativeSemanticTest.ttcn +++ b/Semantic_Analizer_Tests/src/Basic_tests/OopNegativeSemanticTest.ttcn @@ -211,6 +211,10 @@ type class ClassWithPrivate { public function f_override3(in float pl_float) return integer { return 1; } + + public function f_override4() { + + } } type class ClassWithPrivateExt extends ClassWithPrivate { @@ -225,6 +229,8 @@ type class ClassWithPrivateExt extends ClassWithPrivate { public function f_override3(charstring pl_chr) return charstring { return pl_chr; } + + function f_override4() { } } // function with class parameter diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/ClassTypeBody.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/ClassTypeBody.java index fb45fcf231ad897154cba97c800d73f2141e74db..20f7d88293052624c2f867a1dd521c0b56cd5d42 100755 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/ClassTypeBody.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/AST/TTCN3/types/ClassTypeBody.java @@ -55,6 +55,7 @@ public final class ClassTypeBody extends TTCN3Scope implements IReferenceChainEl public static final String HIDINGMODULEIDENTIFIER = "Inherited definition with name `{0}'' hides a module identifier"; public static final String FORMALPARAMSDIFFER = "Formal parameter list differs from previous definition"; public static final String OVERRIDDENFORMALPARAM = "Definition is overridden with different formal parameters"; + public static final String PUBLICOVERRIDEPUBLIC = "Public method can only be overriden by a public method"; public static final String TRAITMETHODSONLY = "Trait classes can only declare methods"; public static final String TRAITMETHODHASBODY = "Trait method cannot have a function body"; @@ -251,6 +252,9 @@ public final class ClassTypeBody extends TTCN3Scope implements IReferenceChainEl localDefinition.getIdentifier().getLocation().reportSemanticError(FORMALPARAMSDIFFER); definition.getIdentifier().getLocation().reportSemanticError(OVERRIDDENFORMALPARAM); } + if (modifier == VisibilityModifier.Public && localDefinition.getVisibilityModifier() != VisibilityModifier.Public) { + localDefinition.getIdentifier().getLocation().reportSemanticError(PUBLICOVERRIDEPUBLIC); + } } } else { localDefinition.getIdentifier().getLocation().reportSemanticError(MessageFormat.format( 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 8148839463a1ed4f1fc4a42fac4e5612dab055d5..e08b27e414703623b3c0411860cc8df5a82d2a6b 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,7 +45,7 @@ public class OOP_Semantic_tests { private ArrayList oopNegative_ttcn_initializer() { //oopNegativeSemanticTest.ttcn - ArrayList markersToCheck = new ArrayList(44); + ArrayList markersToCheck = new ArrayList(45); int lineNum = 28; markersToCheck.add(new MarkerToCheck("class type expected", lineNum, IMarker.SEVERITY_ERROR)); lineNum += 10; @@ -100,11 +100,13 @@ public class OOP_Semantic_tests { markersToCheck.add(new MarkerToCheck("Definition is overridden with different formal parameters", lineNum, IMarker.SEVERITY_ERROR)); lineNum += 4; markersToCheck.add(new MarkerToCheck("Definition is overridden with different formal parameters", lineNum, IMarker.SEVERITY_ERROR)); - lineNum += 10; + lineNum += 14; markersToCheck.add(new MarkerToCheck("Formal parameter list differs from previous definition", lineNum, IMarker.SEVERITY_ERROR)); lineNum += 4; markersToCheck.add(new MarkerToCheck("Formal parameter list differs from previous definition", lineNum, IMarker.SEVERITY_ERROR)); - lineNum += 7; + lineNum += 4; + markersToCheck.add(new MarkerToCheck("Public method can only be overriden by a public method", lineNum, IMarker.SEVERITY_ERROR)); + lineNum += 5; markersToCheck.add(new MarkerToCheck("Type mismatch: a value of type `integer' was expected instead of `float'", lineNum, IMarker.SEVERITY_ERROR)); lineNum += 6; markersToCheck.add(new MarkerToCheck("Class functions cannot have a `runs on` clause", lineNum, IMarker.SEVERITY_ERROR));