Unable to create symbol table for a given Java class

610 views
Skip to first unread message

gael....@glassig.com

unread,
Apr 11, 2017, 9:37:07 AM4/11/17
to SonarQube
Hi, 

I have one error during the sonar analysis on a given Java class.
[ERROR] Unable to create symbol table for : /srv/jenkins_slave/workspace/GlassApps-SonarQube/governance-manager/core/RSDGlassDataMgmt/src/main/java/com/rsd/glass/core/datamgmt/impl/NodeMetadataUpdaterImpl.java
java.lang.ClassCastException: org.sonar.java.resolve.TypeVariableJavaType cannot be cast to org.sonar.java.resolve.ClassJavaType
at org.sonar.java.resolve.JavaSymbol$TypeJavaSymbol.superTypes(JavaSymbol.java:413)
at org.sonar.java.resolve.Resolve.getSamMethod(Resolve.java:1017)
at org.sonar.java.resolve.Resolve.findSamMethodArgsRecursively(Resolve.java:987)
at org.sonar.java.resolve.Resolve.findSamMethodArgs(Resolve.java:980)
at org.sonar.java.resolve.Resolve.isAcceptableDeferredType(Resolve.java:637)
at org.sonar.java.resolve.Resolve.isAcceptableType(Resolve.java:620)
at org.sonar.java.resolve.Resolve.isArgumentsAcceptable(Resolve.java:611)
at org.sonar.java.resolve.Resolve.selectBest(Resolve.java:537)
at org.sonar.java.resolve.Resolve.lookupInScope(Resolve.java:503)
at org.sonar.java.resolve.Resolve.findMethod(Resolve.java:474)
at org.sonar.java.resolve.Resolve.findMethod(Resolve.java:487)
at org.sonar.java.resolve.Resolve.findMethod(Resolve.java:487)
at org.sonar.java.resolve.Resolve.findMethodByStrictThenLooseInvocation(Resolve.java:462)
at org.sonar.java.resolve.Resolve.findMethod(Resolve.java:447)
at org.sonar.java.resolve.Resolve.findMethod(Resolve.java:431)
at org.sonar.java.resolve.TypeAndReferenceSolver.resolveMethodSymbol(TypeAndReferenceSolver.java:333)
at org.sonar.java.resolve.TypeAndReferenceSolver.visitMethodInvocation(TypeAndReferenceSolver.java:229)
at org.sonar.java.model.expression.MethodInvocationTreeImpl.accept(MethodInvocationTreeImpl.java:96)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitExpressionStatement(BaseTreeVisitor.java:101)
at org.sonar.java.resolve.TypeAndReferenceSolver.visitExpressionStatement(TypeAndReferenceSolver.java:765)
at org.sonar.java.model.statement.ExpressionStatementTreeImpl.accept(ExpressionStatementTreeImpl.java:65)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:37)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitBlock(BaseTreeVisitor.java:85)
at org.sonar.java.model.statement.BlockTreeImpl.accept(BlockTreeImpl.java:77)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43)
at org.sonar.java.resolve.TypeAndReferenceSolver.visitMethod(TypeAndReferenceSolver.java:133)
at org.sonar.java.model.declaration.MethodTreeImpl.accept(MethodTreeImpl.java:218)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:37)
at org.sonar.java.resolve.TypeAndReferenceSolver.visitClass(TypeAndReferenceSolver.java:142)
at org.sonar.java.model.declaration.ClassTreeImpl.accept(ClassTreeImpl.java:194)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:37)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitCompilationUnit(BaseTreeVisitor.java:55)
at org.sonar.java.resolve.SemanticModel.createFor(SemanticModel.java:63)
at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:95)
at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:86)
at org.sonar.java.ast.JavaAstScanner.scan(JavaAstScanner.java:63)
at org.sonar.java.JavaSquid.scanSources(JavaSquid.java:119)
at org.sonar.java.JavaSquid.scan(JavaSquid.java:113)
at org.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:84)
at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:57)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:49)
at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:74)
at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:175)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:262)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:257)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:255)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:255)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:255)
at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:247)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:47)
at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:86)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:118)
at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:117)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
at com.sun.proxy.$Proxy25.execute(Unknown Source)
at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233)
at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
at org.sonarsource.scanner.maven.bootstrap.ScannerBootstrapper.execute(ScannerBootstrapper.java:77)
at org.sonarsource.scanner.maven.SonarQubeMojo.execute(SonarQubeMojo.java:139)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

/*
 * Copyright (c) 2009-2017 GlassIG SA and/or its affiliates. All rights reserved.
 * 
 * This software and related documentation are provided under a license agreement containing
 * restrictions on use and disclosure and are protected by intellectual property laws. Except as
 * expressly permitted in your license agreement or allowed by law, you may not use, copy,
 * reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish
 * or display any part, in any form, or by any means. Reverse engineering, disassembly or
 * decompilation of this software, unless required by law for interoperability, is prohibited. The
 * information contained herein is subject to change without notice and is not warranted to be
 * error-free. If you find any errors, please report them to us in writing.
 * 
 * This software and documentation may provide access to or information on content, products and
 * services from third parties. GlassIG SA and its affiliates are not responsible for and expressly
 * disclaim all warranties of any kind with respect to third-party content, products and services.
 * The only warranties for GlassIG or GlassIG affiliate company products and services are those that
 * are set forth in the express warranty statements accompanying such products and services, if any.
 * Should you have any question, please contact your local GlassIG office or distributor.
 */
package com.rsd.glass.core.datamgmt.impl;

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;

import org.dom4j.Element;

import com.rsd.glass.core.datamgmt.NodeXmlConstants;
import com.rsd.glass.core.datamgmt.facade.IndexFacade;
import com.rsd.glass.core.datamgmt.facade.NodeMetadataFacade;
import com.rsd.glass.core.datamgmt.facade.exception.DataMgmtErrMsgConstants;
import com.rsd.glass.core.datamgmt.facade.exception.DataMgmtException;
import com.rsd.glass.core.datamgmt.impl.converters.NodeConverter;
import com.rsd.glass.core.datamgmt.impl.data.AbstractNodeDAO;
import com.rsd.glass.core.datamgmt.model.FilterCapabilities;
import com.rsd.glass.core.datamgmt.model.nodes.AbstractNodeDTO;
import com.rsd.glass.core.ddb.PersistenceConstants;
import com.rsd.glass.core.utils.GlassException;


public class NodeMetadataUpdaterImpl implements NodeMetadataUpdater {

    private final AbstractNodeDAO abstractNodeDAO;
    private final NodeMetadataFacade nodeMetadataFacade;
    private final IndexFacade indexFacade;
    private final NodeManager nodeManager;
    private final FilePlanSchemaBuilder filePlanSchemaBuilder;
    private final SecurityCategoryValuesCache securityCategoryValuesCache;

    public NodeMetadataUpdaterImpl(final AbstractNodeDAO abstractNodeDAO, final NodeMetadataFacade nodeMetadataFacade, final IndexFacade indexFacade, final NodeManager nodeManager,
            final FilePlanSchemaBuilder filePlanSchemaBuilder, final SecurityCategoryValuesCache securityCategoryValuesCache) {
        this.abstractNodeDAO = abstractNodeDAO;
        this.nodeMetadataFacade = nodeMetadataFacade;
        this.indexFacade = indexFacade;
        this.nodeManager = nodeManager;
        this.filePlanSchemaBuilder = filePlanSchemaBuilder;
        this.securityCategoryValuesCache = securityCategoryValuesCache;
    }

    @Override
    public List<AbstractNodeDTO> updateNodeMetadata(final AbstractNodeDTO nodeParentDto, final Element nodesDocument) throws GlassException {

        final String categoryInfo = nodesDocument.attribute(NodeXmlConstants.CATEGORY_INFO)
                .getValue();

        if (!categoryInfo.equals(NodeXmlConstants.ADDITIONAL_METADATA)) {
            return nodeManager.modifyNode(nodeParentDto, nodesDocument, Mode.UPDATE);
        }

        // deal with it
        final List<AbstractNodeDTO> listNodeDTO = new ArrayList<>();
        if (nodeParentDto == null) {
            throw new DataMgmtException(DataMgmtErrMsgConstants.ERR_CODES.ERR_PARENTNODEMANDAT);
        }

        Element elemcodeElement;
        if ((elemcodeElement = nodesDocument.element(PersistenceConstants.FULLQUALIFIDEDCODE)) != null) {
            elemcodeElement.setText(nodeParentDto.getFullQualifiedcode());
        }
        else {
            nodesDocument.addElement(PersistenceConstants.FULLQUALIFIDEDCODE)
                    .setText(nodeParentDto.getFullQualifiedcode());
        }
        // refactor this to make this class unit testable
        new MetaDataEventImpl(this.nodeMetadataFacade, indexFacade, filePlanSchemaBuilder).update(nodeParentDto, nodesDocument,
                filePlanSchemaBuilder.buildSchema(nodeParentDto, nodeParentDto.getNodeTypeEnum(), EnumSet.of(FilterCapabilities.VIEWABLE), true, false)
                        .getMetadataSchemas());
        securityCategoryValuesCache.clear();
        abstractNodeDAO.update(NodeConverter.getInstance()
                .toBean(nodeParentDto));
        listNodeDTO.add(nodeParentDto);

        return listNodeDTO;

    }

    public SecurityCategoryValuesCache getSecurityCategoryValuesCache() {
        return securityCategoryValuesCache;
    }
}



I don't know since when I have this issue. My current version of Sonar is 6.3 and the Java Plugin is 4.8.

Thanks.

Nicolas Peru

unread,
May 10, 2017, 8:37:10 AM5/10/17
to gael....@glassig.com, SonarQube
Hi, 

Thanks for sharing the file, stacktrace and versions. Unfortunately I am not able to reproduce the issue nor construct an equivalent testcase. This seems to come from the fact that a supertype of some of the classes this source file relies on is a TypeVariable : ie a type parameter of a Class or method. 

if you can reduce this to a small self contained reproducer that could really help. 

Thanks.



--
You received this message because you are subscribed to the Google Groups "SonarQube" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sonarqube+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sonarqube/04d10d38-4315-4706-bbab-e781e6c36cc7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
Nicolas Peru | SonarSource

Nicolas Peru

unread,
May 10, 2017, 8:47:58 AM5/10/17
to Gael TARDY, SonarQube
Don't forget to include the group in your replies. 

I can understand that. One way to look at it is that those two failing classes should have somewhere a class dependency in common which might be what we want to look at.

Cheers, 

Le mer. 10 mai 2017 à 14:43, Gael TARDY <gael....@glassig.com> a écrit :
Hi Nicolas,

I will try to reduce this to a small self contained reproducer by sincerely this is not a high priority for us. SO Ican say when I will be able to work on this. We have only two classes impacted by this issue on 5'000 classes..

Regards
Reply all
Reply to author
Forward
0 new messages