Description:
$title.
Happens for both normal methods and resources.
Works for service declarations (an attempt to invoke a resource function also gives an error).
Steps to reproduce:
import ballerina/io;
service s = service {
resource function foo() {
io:println("foo");
}
function bar() {
io:println("bar");
}
};
public function main() {
s.foo();
s.bar();
}
ballerina-internal.log
[2019-08-17 11:04:33,471] ERROR {org.ballerinalang.tool.Main} - org.wso2.ballerinalang.compiler.semantics.model.symbols.BTypeSymbol cannot be cast to org.wso2.ballerinalang.compiler.semantics.model.symbols.BObjectTypeSymbol
java.lang.ClassCastException: org.wso2.ballerinalang.compiler.semantics.model.symbols.BTypeSymbol cannot be cast to org.wso2.ballerinalang.compiler.semantics.model.symbols.BObjectTypeSymbol
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.checkObjectFunctionInvocationExpr(TypeChecker.java:3050)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.visit(TypeChecker.java:1528)
at org.wso2.ballerinalang.compiler.tree.expressions.BLangInvocation.accept(BLangInvocation.java:123)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.checkExpr(TypeChecker.java:248)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.checkExpr(TypeChecker.java:215)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.visit(SemanticAnalyzer.java:1846)
at org.wso2.ballerinalang.compiler.tree.statements.BLangExpressionStmt.accept(BLangExpressionStmt.java:47)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2249)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2214)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeStmt(SemanticAnalyzer.java:2210)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.lambda$visit$42(SemanticAnalyzer.java:1375)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.visit(SemanticAnalyzer.java:1375)
at org.wso2.ballerinalang.compiler.tree.statements.BLangBlockStmt.accept(BLangBlockStmt.java:56)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2249)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2214)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeStmt(SemanticAnalyzer.java:2210)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.visit(SemanticAnalyzer.java:313)
at org.wso2.ballerinalang.compiler.tree.BLangFunction.accept(BLangFunction.java:71)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2249)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2214)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeDef(SemanticAnalyzer.java:2206)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.lambda$visit$4(SemanticAnalyzer.java:232)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.visit(SemanticAnalyzer.java:232)
at org.wso2.ballerinalang.compiler.tree.BLangPackage.accept(BLangPackage.java:160)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyze(SemanticAnalyzer.java:211)
at org.wso2.ballerinalang.compiler.CompilerDriver.typeCheck(CompilerDriver.java:313)
at org.wso2.ballerinalang.compiler.CompilerDriver.compile(CompilerDriver.java:270)
at org.wso2.ballerinalang.compiler.CompilerDriver.compilePackageSymbol(CompilerDriver.java:262)
at org.wso2.ballerinalang.compiler.CompilerDriver.compilePackage(CompilerDriver.java:127)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.wso2.ballerinalang.compiler.Compiler.compilePackages(Compiler.java:175)
at org.wso2.ballerinalang.compiler.Compiler.compilePackage(Compiler.java:180)
at org.wso2.ballerinalang.compiler.Compiler.compile(Compiler.java:93)
at org.wso2.ballerinalang.compiler.Compiler.build(Compiler.java:101)
at org.ballerinalang.packerina.task.CompileTask.execute(CompileTask.java:51)
at org.ballerinalang.packerina.TaskExecutor.executeTasks(TaskExecutor.java:38)
at org.ballerinalang.packerina.cmd.RunCommand.execute(RunCommand.java:298)
at java.util.Optional.ifPresent(Optional.java:159)
at org.ballerinalang.tool.Main.main(Main.java:57)
Affected Versions:
Ballerina 1.0.0-beta-SNAPSHOT - 15th August build
Same happens when trying to access a field in a service object - fields are not allowed anyway, but it should give the proper error.
ballerina-internal.log
[2019-08-17 11:39:11,250] ERROR {org.ballerinalang.tool.Main} - null
java.lang.NullPointerException
at org.wso2.ballerinalang.compiler.semantics.analyzer.SymbolResolver.lookupMemberSymbol(SymbolResolver.java:891)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SymbolResolver.resolveStructField(SymbolResolver.java:656)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.checkObjectFieldAccess(TypeChecker.java:3512)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.checkObjectFieldAccessExpr(TypeChecker.java:3727)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.checkFieldAccessExpr(TypeChecker.java:3862)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.visit(TypeChecker.java:1471)
at org.wso2.ballerinalang.compiler.tree.expressions.BLangFieldBasedAccess.accept(BLangFieldBasedAccess.java:62)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.checkExpr(TypeChecker.java:248)
at org.wso2.ballerinalang.compiler.semantics.analyzer.TypeChecker.checkExpr(TypeChecker.java:215)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.visit(SemanticAnalyzer.java:1846)
at org.wso2.ballerinalang.compiler.tree.statements.BLangExpressionStmt.accept(BLangExpressionStmt.java:47)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2249)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2214)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeStmt(SemanticAnalyzer.java:2210)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.lambda$visit$42(SemanticAnalyzer.java:1375)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.visit(SemanticAnalyzer.java:1375)
at org.wso2.ballerinalang.compiler.tree.statements.BLangBlockStmt.accept(BLangBlockStmt.java:56)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2249)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2214)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeStmt(SemanticAnalyzer.java:2210)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.visit(SemanticAnalyzer.java:313)
at org.wso2.ballerinalang.compiler.tree.BLangFunction.accept(BLangFunction.java:71)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2249)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeNode(SemanticAnalyzer.java:2214)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyzeDef(SemanticAnalyzer.java:2206)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.lambda$visit$4(SemanticAnalyzer.java:232)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.visit(SemanticAnalyzer.java:232)
at org.wso2.ballerinalang.compiler.tree.BLangPackage.accept(BLangPackage.java:160)
at org.wso2.ballerinalang.compiler.semantics.analyzer.SemanticAnalyzer.analyze(SemanticAnalyzer.java:211)
at org.wso2.ballerinalang.compiler.CompilerDriver.typeCheck(CompilerDriver.java:313)
at org.wso2.ballerinalang.compiler.CompilerDriver.compile(CompilerDriver.java:270)
at org.wso2.ballerinalang.compiler.CompilerDriver.compilePackageSymbol(CompilerDriver.java:262)
at org.wso2.ballerinalang.compiler.CompilerDriver.compilePackage(CompilerDriver.java:127)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.wso2.ballerinalang.compiler.Compiler.compilePackages(Compiler.java:175)
at org.wso2.ballerinalang.compiler.Compiler.compilePackage(Compiler.java:180)
at org.wso2.ballerinalang.compiler.Compiler.compile(Compiler.java:93)
at org.wso2.ballerinalang.compiler.Compiler.build(Compiler.java:101)
at org.ballerinalang.packerina.task.CompileTask.execute(CompileTask.java:51)
at org.ballerinalang.packerina.TaskExecutor.executeTasks(TaskExecutor.java:38)
at org.ballerinalang.packerina.cmd.RunCommand.execute(RunCommand.java:298)
at java.util.Optional.ifPresent(Optional.java:159)
at org.ballerinalang.tool.Main.main(Main.java:57)
@irshadnilam @MaryamZi Spec allows this, but let's restrict this usage from the compiler.
service x = service {
public function foo(); // Let's remove access modifiers from the compiler side. the only default is allowed.
}
x.foo(); // This is not supported.
Spec issue is fixed now. https://github.com/ballerina-platform/ballerina-spec/issues/325, Let's restrict this from model builder level without a grammar change.
Spec issue is fixed now. ballerina-platform/ballerina-spec#325, Let's restrict this from model builder level without a grammar change.
@hasithaa @MaryamZi I will work on this.