2017-03-03 5 views
0

Ich bekomme diesen Fehler während der Kompilierung. Ich habe keine Ahnung, was diese spezifische Behauptung bedeutet. Ich versuche, eine Basisklasse zu erstellen, und dann zwei Klassen, die es erweitern. Die beiden Klassen sind im Grunde eine Möglichkeit, die Basisklasse einfacher zu verwenden. Mir ist nicht klar, warum die Erweiterung dieses Kompilierungsproblem verursacht.Assertion fehlgeschlagen beim Kompilieren von Scala in IntelliJ

Error:scalac: Error: assertion failed: { 
    <artifact> val x$7: com.acme.ruleengine.expressions.utility.LastExpression[Double] @scala.reflect.internal.annotations.uncheckedBounds = com.acme.ruleengine.expressions.data.TimeSeriesExpression.apply[Double](metricName).last; 
    <artifact> val x$8: com.acme.ruleengine.Context = context; 
    <artifact> val x$9: String = ruleName; 
    <artifact> val x$10: String = ruleFriendlyName; 
    <artifact> val x$11: String = ruleDescription; 
    <artifact> val x$12: com.acme.server.sensor.models.managementprocess.alerts.dto.AlertSeverity = severity; 
    <artifact> val x$13: String = metricName; 
    <artifact> val x$14: Any = threshold; 
    <artifact> val x$15: com.acme.data.conditions.TagsStoreCondition = metaCondition; 
    <artifact> val x$16: String = applicableMetricTag; 
    <artifact> val x$17: String = alertItemDescriptionFormat; 
    <artifact> val x$18: String = alertDescription; 
    <artifact> val x$19: String = baseRemediationText; 
    <artifact> val x$20: com.acme.server.rules.library.ThresholdDirection.ThresholdDirection = thresholdDirection; 
    <artifact> val x$21: String = alertItemsHeader; 
    <artifact> val x$22: Seq[(scala.util.matching.Regex, String)] @scala.reflect.internal.annotations.uncheckedBounds = itemSpecificDescription; 
    NumericThresholdOnDoubleMetricWithItemsTemplateRule.super.<init>(x$8, x$9, x$10, x$11, x$12, x$7, x$13, x$14, x$15, x$16, x$17, x$18, x$19, x$20, x$21, x$22) 
}(<vendorToRemediationText: error>) 
java.lang.AssertionError: assertion failed: { 
    <artifact> val x$7: com.acme.ruleengine.expressions.utility.LastExpression[Double] @scala.reflect.internal.annotations.uncheckedBounds = com.acme.ruleengine.expressions.data.TimeSeriesExpression.apply[Double](metricName).last; 
    <artifact> val x$8: com.acme.ruleengine.Context = context; 
    <artifact> val x$9: String = ruleName; 
    <artifact> val x$10: String = ruleFriendlyName; 
    <artifact> val x$11: String = ruleDescription; 
    <artifact> val x$12: com.acme.server.sensor.models.managementprocess.alerts.dto.AlertSeverity = severity; 
    <artifact> val x$13: String = metricName; 
    <artifact> val x$14: Any = threshold; 
    <artifact> val x$15: com.acme.data.conditions.TagsStoreCondition = metaCondition; 
    <artifact> val x$16: String = applicableMetricTag; 
    <artifact> val x$17: String = alertItemDescriptionFormat; 
    <artifact> val x$18: String = alertDescription; 
    <artifact> val x$19: String = baseRemediationText; 
    <artifact> val x$20: com.acme.server.rules.library.ThresholdDirection.ThresholdDirection = thresholdDirection; 
    <artifact> val x$21: String = alertItemsHeader; 
    <artifact> val x$22: Seq[(scala.util.matching.Regex, String)] @scala.reflect.internal.annotations.uncheckedBounds = itemSpecificDescription; 
    NumericThresholdOnDoubleMetricWithItemsTemplateRule.super.<init>(x$8, x$9, x$10, x$11, x$12, x$7, x$13, x$14, x$15, x$16, x$17, x$18, x$19, x$20, x$21, x$22) 
}(<vendorToRemediationText: error>) 
    at scala.tools.nsc.typechecker.Typers$Typer.computeParamAliases(Typers.scala:2037) 
    at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:2215) 
    at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5308) 
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5359) 
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396) 
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423) 
    ... 
    at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:101) 
    at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:47) 
    at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:41) 
    at org.jetbrains.jps.incremental.scala.local.IdeaIncrementalCompiler.compile(IdeaIncrementalCompiler.scala:29) 
    at org.jetbrains.jps.incremental.scala.local.LocalServer.compile(LocalServer.scala:26) 
    at org.jetbrains.jps.incremental.scala.remote.Main$.make(Main.scala:67) 
    at org.jetbrains.jps.incremental.scala.remote.Main$.nailMain(Main.scala:24) 
    at org.jetbrains.jps.incremental.scala.remote.Main.nailMain(Main.scala) 
    at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.martiansoftware.nailgun.NGSession.run(NGSession.java:319) 

-Code ist:

package com.acme.server.rules.library 

case class NumericThresholdWithItemsTemplateRule(context: Context, ruleName: String, ruleFriendlyName: String, ruleDescription: String, 
                   severity: AlertSeverity = AlertSeverity.ERROR, 
                   value: Expression[Option[Double]], 
                   metricName: String, threshold: Any, metaCondition: TagsStoreCondition = True, 
                   applicableMetricTag: String, alertItemDescriptionFormat: String, alertDescription: String, baseRemediationText: String, thresholdDirection: ThresholdDirection = ThresholdDirection.ABOVE, 
                   alertItemsHeader: String, itemSpecificDescription: Seq[(Regex, String)] = Seq(".*".r -> "")) 
                   (vendorToRemediationText: (String, String)*) extends PerDeviceRule with RuleHelper { 

    ... 
} 

case class NumericThresholdOnDoubleMetricWithItemsTemplateRule(override val context: Context, override val ruleName: String, override val ruleFriendlyName: String, override val ruleDescription: String, 
                   override val severity: AlertSeverity = AlertSeverity.ERROR, 
                   override val metricName: String, override val threshold: Any, override val metaCondition: TagsStoreCondition = True, 
                   override val applicableMetricTag: String, override val alertItemDescriptionFormat: String, override val alertDescription: String, override val baseRemediationText: String, override val thresholdDirection: ThresholdDirection = ThresholdDirection.ABOVE, 
                   override val alertItemsHeader: String, override val itemSpecificDescription: Seq[(Regex, String)] = Seq(".*".r -> "")) 
                   (vendorToRemediationText: (String, String)*) extends NumericThresholdWithItemsTemplateRule(
                   value = TimeSeriesExpression[Double](metricName).last, 
                   context = context, ruleName = ruleName, ruleFriendlyName = ruleFriendlyName, ruleDescription = ruleDescription, severity = severity, metricName = metricName, threshold = threshold, metaCondition = metaCondition, applicableMetricTag = applicableMetricTag, alertItemDescriptionFormat = alertItemDescriptionFormat, alertDescription = alertDescription, baseRemediationText = baseRemediationText, thresholdDirection = thresholdDirection, alertItemsHeader = alertItemsHeader, itemSpecificDescription = itemSpecificDescription)(vendorToRemediationText) { 

} 

case class NumericThresholdOnComplexMetricWithItemsTemplateRule(override val context: Context, override val ruleName: String, override val ruleFriendlyName: String, override val ruleDescription: String, 
                   override val severity: AlertSeverity = AlertSeverity.ERROR, 
                   override val metricName: String, override val threshold: Any, override val metaCondition: TagsStoreCondition = True, 
                   override val applicableMetricTag: String, override val alertItemDescriptionFormat: String, override val alertDescription: String, override val baseRemediationText: String, override val thresholdDirection: ThresholdDirection = ThresholdDirection.ABOVE, 
                   override val alertItemsHeader: String, override val itemSpecificDescription: Seq[(Regex, String)] = Seq(".*".r -> "")) 
                   (vendorToRemediationText: (String, String)*) extends NumericThresholdWithItemsTemplateRule(
    value = ToDoubleExpression(SingleSnapshotExtractExpression(SnapshotExpression(metricName).asSingle().mostRecent(), "value")), 
    context = context, ruleName = ruleName, ruleFriendlyName = ruleFriendlyName, ruleDescription = ruleDescription, severity = severity, metricName = metricName, threshold = threshold, metaCondition = metaCondition, applicableMetricTag = applicableMetricTag, alertItemDescriptionFormat = alertItemDescriptionFormat, alertDescription = alertDescription, baseRemediationText = baseRemediationText, thresholdDirection = thresholdDirection, alertItemsHeader = alertItemsHeader, itemSpecificDescription = itemSpecificDescription)(vendorToRemediationText) { 

} 

Antwort

1

Es ist verboten, von Fall zu Fall Vererbung zu verwenden. Ich denke, das kann Ihr Hauptproblem sein, versuchen Sie es zu vermeiden.

Blick auf diese:

scala> case class A(b: String) 
defined class A 

scala> case class B(b: String) extends A(b) 
<console>:13: error: case class B has case ancestor A, but case-to-case inheritance is prohibited. To overcome this limitation, use extractors to pattern match on non-leaf nodes. 
     case class B(b: String) extends A(b) 

Nützliche Links zu Fall Klassenvererbung: Scala case class inheritance What is *so* wrong with case class inheritance?

Verwandte Themen