Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Eclipse Error: java.lang.CharSequence cannot be resolved

Tags:

java

eclipse

I'm getting a error trying to compile a simple code in Eclipse. I'm using jre8.

For example, when I try to compile this code:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MyProject {
    public static void main (String args[])
    {
        List<String> myList = new ArrayList<String>();

        myList.add("test");
        myList.add("test2");

        Collections.sort(myList);
    }
}

I get a error in the Collections.sort(myList); line.

The error is:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files

    at project.Principal.main(Principal.java:14)

I have already opened eclipse Build Path, removed JRE System Library [jre8] and added it again. But didn't work! What can I do? Thanks!

PS.: In the Collections.sort(myList); line eclipse shows this error:

The type java.lang.CharSequence cannot be resolved. It is inderectly referenced from required .class files.

like image 762
felipeek Avatar asked Jul 13 '14 22:07

felipeek


2 Answers

Ensure that your Eclipse IDE supports Java 8:

The first Eclipse version supporting Java 8 was Eclipse Kepler SR2 (4.3.2) with an additional patch. (See: Installing Java™ 8 Support in Eclipse Kepler SR2, and the corresponding Marketplace Item that needs to be installed: Java 8 support for Eclipse Kepler SR2).

In my opinion you should udpate to the latest Eclipse Version.

With Luna SR2 (4.4.2) no additional patch is necessary.


Ensure the 1.8 JRE is available in your Workspace:

Windows > Preferences: Java > Installed JREs

Installed JREs

If this is not the case you can add a new JRE with the add button.


Ensure that JRE System Library == JavaSE-1.8 for your Project

In the Package Explorer, you should see the Java version:

Package Explorer

If this is not correct you should open the context menu the JRE System Library item and select the Properties menu entry.

JRE System Library - Properties

In your project you have a .classpath file (Use the Navigator View if you do not see the file), that should looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

Rebuild your project

Project Menu > Clean...

Select your project from the list or "Clean all projects" and "Start a build immediately"


See also:

  • Explaination from @mkrakhin in his answer: The type java.lang.CharSequence cannot be resolved in package declaration
like image 76
Jmini Avatar answered Oct 14 '22 06:10

Jmini


This is because the BytecodeParser class in soot.JastAddJ doesn't support higher version of java class file format.The CONSTANT_MethodHandle,CONSTANT_MethodType and CONSTANT_InvokeDynamic of constant pool type missed.Below is my solution to fix the question:

(1) add the type int soot.JastAddJ.BytecodeParser:

private static final int CONSTANT_MethodHandle=15;
private static final int CONSTANT_MethodType=16;
private static final int CONSTANT_InvokeDynamic=18;

(2) add 3 classes to support the parse:

in the method parseEntry of soot.JastAddJ.BytecodeParser,add

CONSTANT_MethodHandle_Info, CONSTANT_MethodType_Info, CONSTANT_InvokeDynamic_Info

in the switch case block.

Now,soot can run successfully.

like image 22
胡启志 Avatar answered Oct 14 '22 08:10

胡启志